Run go-scalr tests on pr in any other repo #3075
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Run go-scalr tests on pr in any other repo | |
on: | |
workflow_dispatch: | |
inputs: | |
repo: | |
description: The repository with pull request | |
required: true | |
pr_id: | |
description: The number of the pull request | |
required: true | |
pr_head_sha: | |
description: The head sha of the pull request | |
required: true | |
pr_branch: | |
description: Pull request branch | |
base_branch: | |
description: Base branch of pull request | |
jobs: | |
tests: | |
name: Tests | |
runs-on: ubuntu-latest | |
concurrency: | |
group: ${{ github.workflow }}-${{ inputs.pr_id }} | |
cancel-in-progress: true | |
env: | |
SCALR_TOKEN: ${{ secrets.SCALR_TOKEN }} | |
UPSTREAM_ID: ${{ github.run_number }} | |
steps: | |
- name: Sudo GitHub Token | |
id: generate_token | |
uses: tibdex/github-app-token@v1 | |
with: | |
app_id: ${{vars.SUDO_GHA_APP_ID}} | |
installation_id: ${{vars.SUDO_GHA_APP_INSTALLATION_ID}} | |
private_key: ${{secrets.SUDO_GHA_APP_PRIVATE_KEY}} | |
- uses: actions/checkout@v4 | |
- name: Log PR Link | |
run: | | |
echo ":taco: Pull request: https://github.com/Scalr/${{ inputs.repo }}/pull/${{ inputs.pr_id }} " >> $GITHUB_STEP_SUMMARY | |
- name: Get Current Job Log URL | |
uses: Tiryoh/gha-jobid-action@v1 | |
id: get-job-id | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
job_name: Tests | |
- name: Set Pending Status | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{steps.generate_token.outputs.token}} | |
script: | | |
github.rest.repos.createCommitStatus({ | |
owner: 'Scalr', | |
repo: '${{ inputs.repo }}', | |
sha: '${{ inputs.pr_head_sha }}', | |
state: 'pending', | |
description: 'Starting go-scalr tests', | |
context: 'go-scalr', | |
target_url: '${{ steps.get-job-id.outputs.html_url }}', | |
}) | |
- uses: actions/setup-go@v5 | |
with: | |
go-version: "1.18" | |
- name: Clone Fatmouse Repository | |
uses: actions/checkout@v4 | |
with: | |
repository: Scalr/fatmouse | |
path: fatmouse | |
ref: ${{ inputs.pr_branch }} | |
token: ${{steps.generate_token.outputs.token}} | |
- name: Get PR Labels | |
id: pr-labels | |
uses: ./fatmouse/.github/actions/pr-labels | |
with: | |
github_token: ${{steps.generate_token.outputs.token}} | |
owner: Scalr | |
repo: fatmouse | |
pr_id: ${{ inputs.pr_id }} | |
- name: Set DB_BRANCH | |
if: ${{ contains(github.event.head_commit.message, '[DB_BRANCH]') }} | |
run: echo "DB_BRANCH=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV | |
- id: auth | |
uses: google-github-actions/auth@v2 | |
with: | |
credentials_json: ${{ secrets.GCP_SA_KEY }} | |
- name: Set up Cloud SDK | |
uses: google-github-actions/setup-gcloud@v2 | |
- name: Copy secrets | |
shell: bash | |
run: | | |
mkdir ~/.scalr-labs | |
gsutil cp gs://tacobell-secrets/.secrets.yaml fatmouse/tacobell/.secrets.yaml | |
gsutil cp gs://tacobell-secrets/github.json ~/.scalr-labs/github.json | |
- name: Configure Docker | |
shell: bash | |
run: gcloud auth configure-docker us-central1-docker.pkg.dev | |
- name: Pull Python Builder | |
shell: bash | |
run: | | |
echo "::group::Pull python builder image" | |
builder_path=us-central1-docker.pkg.dev/scalr-dev/main-docker/fatmouse/python-builder | |
exists=$(docker manifest inspect $builder_path:${{ inputs.pr_branch }} > /dev/null ; echo $?) | |
if [[ $exists == "0" ]]; then | |
docker pull $builder_path:${{ inputs.pr_branch }} | |
docker tag $builder_path:${{ inputs.pr_branch }} fatmouse/python-builder:base | |
else | |
docker pull $builder_path:master | |
docker tag $builder_path:master fatmouse/python-builder:base | |
fi | |
echo "::endgroup::" | |
- name: Generate Run Tag | |
shell: bash | |
run: | | |
if [ ${{ github.run_attempt }} = 1 ]; then | |
RERUN_SUFFIX="" | |
else | |
RERUN_SUFFIX=$(echo -${{ github.run_attempt }}) | |
fi | |
echo "RUN_TAG=e2e-go-scalr-external-pr-${{ github.run_number }}${RERUN_SUFFIX}" >> $GITHUB_ENV | |
- name: Create Container | |
id: create | |
shell: bash | |
run: | | |
docker run --rm \ | |
-e GITHUB_WORKSPACE=true \ | |
-e GITHUB_OUTPUT=/fatmouse/output \ | |
-e GITHUB_STEP_SUMMARY=/fatmouse/step_summary \ | |
-w /fatmouse \ | |
-v $PWD/fatmouse:/fatmouse \ | |
-v $GITHUB_OUTPUT:/fatmouse/output \ | |
-v $GITHUB_STEP_SUMMARY:/fatmouse/step_summary \ | |
-v ~/.scalr-labs:/etc/scalr-labs \ | |
fatmouse/python-builder:base python -u clickfile.py te up \ | |
--branch ${{ inputs.pr_branch }} \ | |
--run-url ${{ steps.get-job-id.outputs.html_url }} \ | |
--skip-ui-build \ | |
--agent-pool-id="${{ !contains(steps.pr-labels.outputs.labels, ' e2e:tev2_on_server ') && vars.TACO_APOOL_ID || '' }}" \ | |
${{ env.RUN_TAG }} | |
- name: Get Scalr Hostname | |
shell: bash | |
run: | | |
SCALR_HOST=${{ steps.create.outputs.host }} | |
echo "SCALR_ADDRESS=https://mainiacp.${SCALR_HOST/https:\/\//}" >> $GITHUB_ENV | |
- name: Run Tests | |
id: run-tests | |
env: | |
SCALR_ADDRESS: ${{ env.SCALR_ADDRESS }} | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
TEST_AWS_ACCESS_KEY: ${{ secrets.TEST_AWS_ACCESS_KEY }} | |
TEST_AWS_SECRET_KEY: ${{ secrets.TEST_AWS_SECRET_KEY }} | |
TEST_AWS_ROLE_ARN: ${{ secrets.TEST_AWS_ROLE_ARN }} | |
TEST_AWS_EXTERNAL_ID: ${{ secrets.TEST_AWS_EXTERNAL_ID }} | |
TEST_ARM_CLIENT_ID: ${{ secrets.TEST_ARM_CLIENT_ID }} | |
TEST_ARM_CLIENT_SECRET: ${{ secrets.TEST_ARM_CLIENT_SECRET }} | |
TEST_ARM_TENANT_ID: ${{ secrets.TEST_ARM_TENANT_ID }} | |
TEST_ARM_SUBSCRIPTION_ID: ${{ secrets.TEST_ARM_SUBSCRIPTION_ID }} | |
run: make test | |
- name: Set Commit Status After Tests | |
if: ${{ always() && (steps.run-tests.outcome == 'failure' || steps.run-tests.outcome == 'success') }} | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{steps.generate_token.outputs.token}} | |
script: | | |
github.rest.repos.createCommitStatus({ | |
owner: 'Scalr', | |
repo: '${{ inputs.repo }}', | |
sha: '${{ inputs.pr_head_sha }}', | |
state: '${{ steps.run-tests.outcome }}', | |
description: 'go-scalr tests result: ${{ steps.run-tests.outcome }}', | |
context: 'go-scalr', | |
target_url: '${{ steps.get-job-id.outputs.html_url }}', | |
}) | |
- name: Set Commit Status on Interrupted Workflow | |
if: ${{ always() && steps.run-tests.outcome != 'failure' && steps.run-tests.outcome != 'success' }} | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{steps.generate_token.outputs.token}} | |
script: | | |
github.rest.repos.createCommitStatus({ | |
owner: 'Scalr', | |
repo: '${{ inputs.repo }}', | |
sha: '${{ inputs.pr_head_sha }}', | |
state: 'error', | |
description: 'go-scalr workflow was interrupted', | |
context: 'go-scalr', | |
target_url: '${{ steps.get-job-id.outputs.html_url }}', | |
}) | |
- name: Add Comment on Failed Tests | |
if: ${{ always() && steps.run-tests.outcome == 'failure' }} | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const issue_number = ${{ inputs.pr_id }}; | |
const owner = 'Scalr'; | |
const repo = '${{ inputs.repo }}'; | |
const message = '**go-scalr tests failed**\nJob url ${{ steps.get-job-id.outputs.html_url }}'; | |
await github.rest.issues.createComment({owner, repo, issue_number, body: message}); | |
github-token: ${{steps.generate_token.outputs.token}} | |
- name: Delete Container | |
id: delete | |
if: ${{ always() }} | |
shell: bash | |
run: | | |
docker run --rm \ | |
-w /fatmouse \ | |
-v $PWD/fatmouse:/fatmouse \ | |
-v ~/.scalr-labs:/etc/scalr-labs \ | |
fatmouse/python-builder:base \ | |
python -u clickfile.py te rm \ | |
--no-wait ${{ env.RUN_TAG }} |