Skip to content

Workspace integration tests #654

Workspace integration tests

Workspace integration tests #654

name: "Workspace integration tests"
on:
workflow_dispatch:
inputs:
name:
required: false
type: string
description: "The name of the preview environment, or leave empty to use a default name"
version:
required: false
type: string
description: "The version of Gitpod to install (leave empty to target the latest successful build on main)"
skip_deploy:
required: false
type: boolean
description: "Skip deploy preview environment (debug only)"
skip_delete:
required: false
type: boolean
description: "Skip delete preview environment (debug only)"
workflow_call:
inputs:
name:
required: false
type: string
description: "The name of the preview environment, or leave empty to use a default name"
version:
required: false
type: string
description: "The version of Gitpod to install (leave empty to target the latest successful build on main)"
schedule:
- cron: "0 3,12 * * *"
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 }}
with:
task: workspace-integration-tests
configuration:
name: Configuration
runs-on: ${{ needs.create-runner.outputs.label }}
needs: [create-runner]
container:
image: eu.gcr.io/gitpod-core-dev/dev/dev-environment:aledbf-leeway-pigz-gha.18593
outputs:
name: ${{ steps.configuration.outputs.name }}
version: ${{ steps.configuration.outputs.version }}
steps:
- id: auth
uses: google-github-actions/auth@v1
continue-on-error: true
with:
token_format: access_token
credentials_json: "${{ secrets.GCP_CREDENTIALS }}"
# do this step as early as possible, so that Slack Notify failure has the secret
- name: Get Secrets from GCP
id: "secrets"
uses: "google-github-actions/get-secretmanager-secrets@v1"
with:
secrets: |-
WORKSPACE_SLACK_WEBHOOK:gitpod-core-dev/workspace-slack-webhook
- name: "Set outputs"
id: configuration
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
if [[ '${{ inputs.name }}' != '' ]]; then
{
echo "name=${{ inputs.name }}"
} >> $GITHUB_OUTPUT
else
{
echo "name=workspace-integration-test-${{ github.run_id }}-${{ github.run_attempt }}"
} >> $GITHUB_OUTPUT
fi
if [[ '${{ inputs.version }}' != '' ]]; then
{
echo "version=${{ inputs.version }}"
} >> $GITHUB_OUTPUT
else
# Find the most recent successful build on main. Look back up to 10 builds.
RUNID=$(gh run list --repo gitpod-io/gitpod --branch main --workflow Build --limit 10 --json createdAt,conclusion,databaseId --jq 'map(select(.conclusion == "success")) | sort_by(.createdAt) | .[-1] | .databaseId')
if [ "$RUNID" == "" ]; then
echo no successful build found on main branch in the last 10 commits, see https://github.com/gitpod-io/gitpod/actions/workflows/build.yml for details | tee -a $GITHUB_STEP_SUMMARY
exit 1
fi
{
echo "version=$(gh run view "$RUNID" --log -R gitpod-io/gitpod | grep 'main-gha.[0-9]*' -o | head -n 1)"
} >> $GITHUB_OUTPUT
fi
- name: Slack Notification
uses: rtCamp/action-slack-notify@v2
if: failure()
env:
SLACK_WEBHOOK: ${{ steps.secrets.outputs.WORKSPACE_SLACK_WEBHOOK }}
SLACK_ICON_EMOJI: ":test_tube:"
SLACK_USERNAME: "Integration Tests: workspace"
SLACK_COLOR: ${{ job.status }}
SLACK_MESSAGE: "Workspace Integration Tests failed during configuration, is main build green?"
SLACK_FOOTER: "<https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}|Workflow logs>"
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: Create preview environment infrastructure
id: create
uses: ./.github/actions/preview-create
with:
name: ${{ needs.configuration.outputs.name }}
sa_key: ${{ secrets.GCP_CREDENTIALS }}
infrastructure_provider: gce
large_vm: true
- name: Deploy Gitpod to the preview environment
if: inputs.skip_deploy != 'true'
id: deploy-gitpod
uses: ./.github/actions/deploy-gitpod
with:
name: ${{ needs.configuration.outputs.name }}
sa_key: ${{ secrets.GCP_CREDENTIALS }}
version: ${{ needs.configuration.outputs.version}}
check:
name: Check for regressions
needs: [configuration, infrastructure, create-runner]
runs-on: ${{ needs.create-runner.outputs.label }}
container:
image: eu.gcr.io/gitpod-core-dev/dev/dev-environment:aledbf-leeway-pigz-gha.18593
steps:
- uses: actions/checkout@v4
- id: auth
uses: google-github-actions/auth@v1
with:
token_format: access_token
credentials_json: "${{ secrets.GCP_CREDENTIALS }}"
- name: Get Secrets from GCP
id: "secrets"
uses: "google-github-actions/get-secretmanager-secrets@v1"
with:
secrets: |-
WORKSPACE_SLACK_WEBHOOK:gitpod-core-dev/workspace-slack-webhook
- name: Integration Test
id: integration-test
uses: ./.github/actions/integration-tests
with:
preview_name: ${{ needs.configuration.outputs.name }}
test_suite: workspace
notify_slack_webhook: ${{ steps.secrets.outputs.WORKSPACE_SLACK_WEBHOOK }}
sa_key: ${{ secrets.GCP_CREDENTIALS }}
github_token: ${{ secrets.GITHUB_TOKEN }}
delete:
name: Delete preview environment
needs: [configuration, infrastructure, check, create-runner]
if: inputs.skip_delete != 'true' && always()
runs-on: ${{ needs.create-runner.outputs.label }}
container:
image: eu.gcr.io/gitpod-core-dev/dev/dev-environment:aledbf-leeway-pigz-gha.18593
steps:
- uses: actions/checkout@v4
- name: Delete preview environment
uses: ./.github/actions/delete-preview
with:
name: ${{ needs.configuration.outputs.name }}
sa_key: ${{ secrets.GCP_CREDENTIALS }}
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 }}