Skip to content

Preview environment regression check #3163

Preview environment regression check

Preview environment regression check #3163

name: "Preview environment regression check"
permissions:
id-token: write # This is required for requesting the JWT
contents: read # This is required for actions/checkout
on:
workflow_run:
workflows: ["Build"]
types: [completed]
branches: ["main"]
workflow_dispatch:
inputs:
name:
required: true
description: "The name of the preview environment"
version:
required: true
description: "The version of Gitpod to install"
image_repo_base:
type: choice
required: false
description: "The base repo of image"
options:
- "eu.gcr.io/gitpod-core-dev/build"
- "eu.gcr.io/gitpod-dev-artifact/build"
default: "eu.gcr.io/gitpod-core-dev/build"
jobs:
create-runner:
uses: gitpod-io/gce-github-runner/.github/workflows/create-vm.yml@main
secrets:
runner_token: ${{ secrets.SELF_HOSTED_GITHUB_RUNNER_TOKEN }}
gcp_credentials: ${{ secrets.SELF_HOSTED_GITHUB_RUNNER_GCP_CREDENTIALS }}
configuration:
needs: [create-runner]
name: Configuration
runs-on: ${{ needs.create-runner.outputs.label }}
outputs:
skip: ${{ steps.configuration.outputs.skip }}
name: ${{ steps.configuration.outputs.name }}
version: ${{ steps.configuration.outputs.version }}
image_repo_base: ${{ steps.configuration.outputs.image_repo_base }}
steps:
- name: "Set outputs"
id: configuration
run: |
if [[ '${{ github.event.inputs.name }}' != '' ]]; then
# The workflow was triggered by workflow_dispatch
{
echo "version=${{ github.event.inputs.version }}"
echo "name=${{ github.event.inputs.name }}"
echo "image_repo_base=${{ github.event.inputs.image_repo_base }}"
echo "skip=false"
} >> $GITHUB_OUTPUT
else
# The workflow was triggered by workflow_run
{
echo "version=main-gha.${{ github.event.workflow_run.run_number }}"
echo "name=preview-regression-check-main-${{ github.run_id }}-${{ github.run_attempt }}"
echo "image_repo_base=eu.gcr.io/gitpod-core-dev/build"
echo "skip=${{ github.event.workflow_run.conclusion == 'failure' }}"
} >> $GITHUB_OUTPUT
fi
infrastructure:
name: Create preview environment infrastructure
needs: [configuration, create-runner]
runs-on: ${{ needs.create-runner.outputs.label }}
concurrency:
group: ${{ needs.configuration.outputs.name }}-infrastructure
steps:
- uses: actions/checkout@v4
- name: Setup Environment
uses: ./.github/actions/setup-environment
with:
identity_provider: ${{ secrets.DEV_PREVIEW_PROVIDER }}
service_account: ${{ secrets.DEV_PREVIEW_SA }}
leeway_segment_key: ${{ secrets.LEEWAY_SEGMENT_KEY }}
- name: Create preview environment infrastructure
id: create
uses: ./.github/actions/preview-create
with:
name: ${{ needs.configuration.outputs.name }}
infrastructure_provider: ${{ needs.configuration.outputs.infrastructure_provider }}
large_vm: false
preemptible: true
image_repo_base: ${{ needs.configuration.outputs.image_repo_base }}
- name: Deploy Gitpod to the preview environment
id: deploy-gitpod
uses: ./.github/actions/deploy-gitpod
with:
name: ${{ needs.configuration.outputs.name }}
version: ${{ needs.configuration.outputs.version}}
image_repo_base: ${{ needs.configuration.outputs.image_repo_base }}
check:
name: Check for regressions
needs: [configuration, infrastructure, create-runner]
if: ${{ needs.configuration.outputs.skip == 'false' }}
runs-on: ${{ needs.create-runner.outputs.label }}
container:
image: eu.gcr.io/gitpod-core-dev/dev/dev-environment:main-gha.30393
volumes:
- /var/tmp:/var/tmp
- /tmp:/tmp
steps:
- uses: actions/checkout@v4
- name: Setup Environment
uses: ./.github/actions/setup-environment
with:
identity_provider: ${{ secrets.DEV_PREVIEW_PROVIDER }}
service_account: ${{ secrets.DEV_PREVIEW_SA }}
leeway_segment_key: ${{ secrets.LEEWAY_SEGMENT_KEY }}
- name: Check
shell: bash
env:
ROBOQUAT_TOKEN: ${{ secrets.GITHUB_TOKEN }}
USERNAME: ${{ secrets.IDE_INTEGRATION_TEST_USERNAME }}
USER_TOKEN: ${{ secrets.IDE_INTEGRATION_TEST_USER_TOKEN }}
PREVIEW_NAME: ${{ needs.configuration.outputs.name }}
run: |
set -euo pipefail
export LEEWAY_WORKSPACE_ROOT="$(pwd)"
export HOME="/home/gitpod"
leeway run dev/preview/previewctl:install
previewctl install-context --branch "${PREVIEW_NAME}" --log-level debug --timeout 1m
# start integration test
args=()
args+=( "-kubeconfig=/home/gitpod/.kube/config" )
args+=( "-namespace=default" )
[[ "$USERNAME" != "" ]] && args+=( "-username=$USERNAME" )
args+=( "-timeout=60m" )
TESTS_DIR="$GITHUB_WORKSPACE/test/tests/smoke-test"
go install github.com/jstemmer/go-junit-report/v2@latest
echo "running integration for smoke test"
cd "${TESTS_DIR}"
set +e
go test -v ./... "${args[@]}" 2>&1 | go-junit-report -subtest-mode=exclude-parents -set-exit-code -out "TEST.xml" -iocopy
RC=${PIPESTATUS[0]}
set -e
if [ "${RC}" -ne "0" ]; then
exit ${RC}
fi
- name: Test Summary
id: test_summary
uses: test-summary/action@v2
with:
paths: "test/tests/**/TEST.xml"
if: always()
- id: auth
if: failure()
uses: google-github-actions/auth@v1
with:
token_format: access_token
credentials_json: "${{ secrets.GCP_CREDENTIALS }}"
- name: Slack Notification
uses: rtCamp/action-slack-notify@v2
if: failure()
env:
SLACK_WEBHOOK: "${{ secrets.DEVX_SLACK_WEBHOOK }}"
SLACK_COLOR: ${{ job.status }}
SLACK_MESSAGE: "`${{ needs.configuration.outputs.version}}` smoke test failed"
SLACK_FOOTER: "<https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}|Workflow logs>"
delete:
name: Delete preview environment
needs: [configuration, infrastructure, check, create-runner]
if: always()
runs-on: ${{ needs.create-runner.outputs.label }}
steps:
- uses: actions/checkout@v4
- name: Setup Environment
uses: ./.github/actions/setup-environment
with:
identity_provider: ${{ secrets.DEV_PREVIEW_PROVIDER }}
service_account: ${{ secrets.DEV_PREVIEW_SA }}
leeway_segment_key: ${{ secrets.LEEWAY_SEGMENT_KEY }}
- name: Delete preview environment
uses: ./.github/actions/delete-preview
with:
name: ${{ needs.configuration.outputs.name }}
delete-runner:
if: always()
needs:
- create-runner
- configuration
- infrastructure
- check
- delete
uses: gitpod-io/gce-github-runner/.github/workflows/delete-vm.yml@main
secrets:
gcp_credentials: ${{ secrets.SELF_HOSTED_GITHUB_RUNNER_GCP_CREDENTIALS }}
with:
runner-label: ${{ needs.create-runner.outputs.label }}
machine-zone: ${{ needs.create-runner.outputs.machine-zone }}