Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: testing some pipelines #18339

Open
wants to merge 8 commits into
base: dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
127 changes: 127 additions & 0 deletions .github/workflows/precommit.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
name: precommit

on:
pull_request:
# we want to run the CI on every PR targetting those branches
branches: [dev]

concurrency:
group: precommit-deploy
cancel-in-progress: true

jobs:
build:
runs-on: buildjet-8vcpu-ubuntu-2204

outputs:
unit_tests_report: ${{ env.UNIT_TEST_REPORT_FILE }}
build_artifact: ${{ env.BUILD_ARTIFACT }}
total_additions: ${{ steps.check_additions.outputs.total_additions }}

env:
BUILD_DIR: server/dist/s3/
BUILD_ARTIFACT: ebs.zip
COMMIT_URL: ${{github.event.head_commit.url}}
COMMITTER: ${{github.event.head_commit.committer.name}}
CHANGELOG_FILE: './changelog.md'
UNIT_TEST_REPORT_FILE: './unit-tests.log'

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 18.16.x
cache: 'yarn'

- name: Install JS dependencies
run: yarn --immutable

- name: Update configuration
run: yarn configure

# - name: Test
# run: |
# set -o pipefail
# yarn test --detectOpenHandles=false 2>&1 | tee ${{ env.UNIT_TEST_REPORT_FILE }}
# echo -e "COMMIT SHA = ${{ github.sha }}" >> ${{env.UNIT_TEST_REPORT_FILE}}
# echo -e "TEST RUN DATE = $(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> ${{env.UNIT_TEST_REPORT_FILE}}

# - uses: actions/upload-artifact@v4
# with:
# name: 'unit-tests-report'
# path: ${{env.UNIT_TEST_REPORT_FILE}}

- name: Build
run: yarn build:prod

- uses: actions/upload-artifact@v4
with:
name: 'build-artifact'
path: '${{env.BUILD_DIR}}${{env.BUILD_ARTIFACT}}'

- name: Fetch PR details
id: pr_details
uses: octokit/[email protected]
with:
route: GET /repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Check total PR additions
id: check_additions
run: |
# Store response data in variable
response='${{ steps.pr_details.outputs.data }}'
# Parse additions from response
total_additions=$(echo "$response" | jq -r '.additions')
echo "Found total additions: $total_additions"
# Output for subsequent steps
echo "total_additions=$total_additions" >> $GITHUB_OUTPUT

deploy_to_aws:
name: 'Deploy to live environments'
runs-on: ubuntu-latest
needs: [build]

steps:
- uses: actions/download-artifact@v4
with:
name: 'build-artifact'

- name: Deploy to precommit environment
id: deploy
if: ${{ needs.build.outputs.total_additions > 100 && github.actor != 'dependabot[bot]' }}
uses: einaregilsson/beanstalk-deploy@v22
with:
application_name: Webapp
aws_access_key: ${{ secrets.WEBTEAM_AWS_ACCESS_KEY_ID }}
aws_secret_key: ${{ secrets.WEBTEAM_AWS_SECRET_ACCESS_KEY }}
deployment_package: ${{needs.build.outputs.build_artifact}}
environment_name: wire-webapp-precommit
region: eu-central-1
use_existing_version_if_available: true
version_description: ${{ github.sha }}
version_label: ${{ github.run_id }}
wait_for_deployment: false
wait_for_environment_recovery: 150

- name: Deployment Status
if: ${{ always() }}
run: |
if [[ "${{ steps.deploy.outcome }}" == "success" ]]; then
echo "✅ Deployment completed successfully"
elif [[ "${{ steps.deploy.outcome }}" == "skipped" ]]; then
if [[ "${{ needs.build.outputs.total_additions }}" -le 100 ]]; then
echo "⏭️ Deployment was skipped: PR has ${{ needs.build.outputs.total_additions }} additions (threshold: 100)"
elif [[ "${{ github.actor }}" == "dependabot[bot]" ]]; then
echo "⏭️ Deployment was skipped: PR is from dependabot"
else
echo "⏭️ Deployment was skipped"
fi
else
echo "❌ Deployment failed"
exit 1
fi
112 changes: 112 additions & 0 deletions Jenkinsfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
pipeline {
agent {
node {
label 'built-in'
}
}

options { disableConcurrentBuilds(abortPrevious: true) }

environment {
CREDENTIALS = credentials('GITHUB_TOKEN_WEB')
WIRE_BOT_SECRET = credentials('JENKINSBOT_WEBAPP_DEV')
}

stages {
stage('Wait for GitHub action to finish') {
when {
expression { BRANCH_NAME ==~ /PR-[0-9]+/ }
}
steps {
script {
def commit_hash = sh(script: 'git rev-parse HEAD', returnStdout: true).trim()
def pr_number = BRANCH_NAME.replaceAll(/\D/, '')
def changeTargetBranch = env.CHANGE_TARGET

def targetWorkflowUrl
switch (changeTargetBranch) {
case ['dev']:
targetWorkflowUrl = 'https://api.github.com/repos/wireapp/wire-webapp/actions/workflows/128602012/runs'
break
default:
targetWorkflowUrl = 'https://api.github.com/repos/wireapp/wire-webapp/actions/workflows/128602012/runs'
break
}

echo("Wait for github actions to start for ${BRANCH_NAME} against ${changeTargetBranch}")
timeout(time: 45, unit: 'MINUTES') {
waitUntil {
def output = sh label: 'Get runs', returnStdout: true, script: "curl -s -L -H 'Accept: application/vnd.github+json' -H 'Authorization: Bearer ${CREDENTIALS}' -H 'X-GitHub-Api-Version: 2022-11-28' ${targetWorkflowUrl}"
def json = readJSON text: output
if (json['message']) {
echo('Output: ' + output)
error('**Trigger script failed:** ' + json['message'])
}
def runs = json['workflow_runs']
echo('Looking for PR-' + pr_number + ' with hash' + commit_hash)
for (run in runs) {
if (run['head_sha'] == commit_hash) {
echo('Found ' + commit_hash)
echo('status: ' + run['status'])
env.GITHUB_ACTION_URL = run['url'].replace('api.github.com/repos', 'github.com/')
// status can be queued, in_progress, or completed
if (run['status'] == 'queued' || run['status'] == 'in_progress' || run['status'] == 'completed') {
return true
}
}
}
sleep(20)
return false
}
}

}
}
post {
failure {
script {
wireSend(secret: env.WIRE_BOT_SECRET, message: "❌ **$BRANCH_NAME**\n[$CHANGE_TITLE](${CHANGE_URL})\nBuild aborted or failed! See [Github Actions](" + env.GITHUB_ACTION_URL + ')')
}
}
}
}

stage('Smoke Tests') {
when {
expression { BRANCH_NAME ==~ /PR-[0-9]+/ }
}
steps {
script {
def files = []
withAWS(region: 'eu-west-1', credentials: 'S3_CREDENTIALS') {
files = s3FindFiles bucket: 'z-lohika', path: "artifacts/megazord/android/reloaded/staging/compat/$BRANCH_NAME/", onlyFiles: true, glob: '*.apk'
}
files.sort { a, b -> a.lastModified <=> b.lastModified }
if (files.size() < 1) {
error('Could not find any apk at provided location!')
} else {
def lastModifiedFileName = files[-1].name
build job: 'android_reloaded_smoke', parameters: [string(name: 'AppBuildNumber', value: "artifacts/megazord/android/reloaded/staging/compat/$BRANCH_NAME/${lastModifiedFileName}"), string(name: 'TAGS', value: '@smoke'), string(name: 'Branch', value: 'android_dev')]
}
}
}
post {
unsuccessful {
script {
wireSend(secret: env.WIRE_BOT_SECRET, message: "❌ **$BRANCH_NAME**\n[$CHANGE_TITLE](${CHANGE_URL})\nQA-Jenkins - Smoke tests failed (see above report)")
}
}
}
}
}

post {
success {
script {
if (env.BRANCH_NAME ==~ /PR-[0-9]+/) {
wireSend(secret: env.WIRE_BOT_SECRET, message: "✅ **$BRANCH_NAME**\n[$CHANGE_TITLE](${CHANGE_URL})\nQA-Jenkins - Smoke tests successful (see above report)")
}
}
}
}
}
Loading