-
Notifications
You must be signed in to change notification settings - Fork 1.3k
[tests] Move workspace integration tests to Github Actions #16872
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
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,181 @@ | ||
name: "Workspace integration tests" | ||
on: | ||
workflow_dispatch: | ||
kylos101 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
inputs: | ||
name: | ||
required: true | ||
description: "The name of the preview environment" | ||
version: | ||
required: true | ||
description: "The version of Gitpod to install" | ||
skip_deploy: | ||
required: false | ||
kylos101 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
type: boolean | ||
description: "Skip deploy preview environment (debug only)" | ||
skip_delete: | ||
required: false | ||
type: boolean | ||
description: "Skip delete preview environment (debug only)" | ||
schedule: | ||
- cron: "0 3 * * *" | ||
jobs: | ||
configuration: | ||
name: Configuration | ||
runs-on: [self-hosted] | ||
container: | ||
image: eu.gcr.io/gitpod-core-dev/dev/dev-environment:kylos101-kubecdl-home.1 | ||
outputs: | ||
name: ${{ steps.configuration.outputs.name }} | ||
version: ${{ steps.configuration.outputs.version }} | ||
steps: | ||
- name: "Set outputs" | ||
id: configuration | ||
shell: bash | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
run: | | ||
if [[ '${{ github.event.inputs.name }}' != '' && '${{ github.event.inputs.name }}' != 'latest' ]]; then | ||
# The workflow was triggered by workflow_dispatch | ||
{ | ||
echo "version=${{ github.event.inputs.version }}" | ||
echo "name=${{ github.event.inputs.name }}" | ||
} >> $GITHUB_OUTPUT | ||
else | ||
# others | ||
RUNID=$(gh run list -R gitpod-io/gitpod -b main -w Build --limit 1 --json databaseId --jq .[0].databaseId) | ||
if ! gh run watch "$RUNID" --exit-status -R gitpod-io/gitpod >/dev/null 2>&1; then | ||
echo main branch build is failed, see https://github.com/gitpod-io/gitpod/actions/runs/"$RUNID" for detail | 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)" | ||
echo "name=workspace-integration-test-${{ github.run_id }}-${{ github.run_attempt }}" | ||
} >> $GITHUB_OUTPUT | ||
fi | ||
- 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: Slack Notification | ||
uses: rtCamp/action-slack-notify@v2 | ||
if: failure() | ||
env: | ||
SLACK_WEBHOOK: ${{ steps.secrets.outputs.WORKSPACE_SLACK_WEBHOOK }} | ||
SLACK_COLOR: ${{ job.status }} | ||
SLACK_MESSAGE: main branch build failed | ||
check: | ||
name: Check for regressions | ||
needs: [configuration] | ||
runs-on: [self-hosted] | ||
container: | ||
image: eu.gcr.io/gitpod-core-dev/dev/dev-environment:kylos101-kubecdl-home.1 | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- name: Create preview environment infrastructure | ||
uses: ./.github/actions/preview-create | ||
with: | ||
name: ${{ needs.configuration.outputs.name }} | ||
infrastructure_provider: harvester | ||
large_vm: true | ||
sa_key: ${{ secrets.GCP_CREDENTIALS }} | ||
- name: Deploy Gitpod to the preview environment | ||
if: github.event.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}} | ||
- 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 | ||
WORKSPACE_INTEGRATION_TEST_USERNAME:gitpod-core-dev/workspace-integration-test-username | ||
WORKSPACE_INTEGRATION_TEST_USER_TOKEN:gitpod-core-dev/workspace-integration-test-user-token | ||
- name: Integration Test | ||
shell: bash | ||
env: | ||
ROBOQUAT_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
USERNAME: ${{ steps.secrets.outputs.WORKSPACE_INTEGRATION_TEST_USERNAME }} | ||
USER_TOKEN: ${{ steps.secrets.outputs.WORKSPACE_INTEGRATION_TEST_USER_TOKEN }} | ||
PREVIEW_ENV_DEV_SA_KEY: ${{ secrets.GCP_CREDENTIALS }} | ||
PREVIEW_NAME: ${{ needs.configuration.outputs.name }} | ||
run: | | ||
set -euo pipefail | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. it might be cleaner to keep this script in a separate bash file, and run that file here. That way we keep e.g. syntax highlighting, bash linting, etc. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Will do in a follow-on PR, or, if I have trouble getting having the tests run general. So, expect another PR. ;) |
||
|
||
export LEEWAY_WORKSPACE_ROOT="$(pwd)" | ||
export HOME="/home/gitpod" | ||
export PREVIEW_ENV_DEV_SA_KEY_PATH="/home/gitpod/.config/gcloud/preview-environment-dev-sa.json" | ||
|
||
echo "${PREVIEW_ENV_DEV_SA_KEY}" > "${PREVIEW_ENV_DEV_SA_KEY_PATH}" | ||
gcloud auth activate-service-account --key-file "${PREVIEW_ENV_DEV_SA_KEY_PATH}" | ||
|
||
leeway run dev/preview/previewctl:install | ||
|
||
echo "Setting up access to core-dev and harvester" | ||
previewctl get-credentials --gcp-service-account "${PREVIEW_ENV_DEV_SA_KEY_PATH}" | ||
|
||
previewctl install-context --branch "${PREVIEW_NAME}" --log-level debug --timeout 1m --gcp-service-account "${PREVIEW_ENV_DEV_SA_KEY_PATH}" | ||
|
||
# start integration test | ||
args=() | ||
args+=( "-kubeconfig=/home/gitpod/.kube/config" ) | ||
args+=( "-namespace=default" ) | ||
[[ "$USERNAME" != "" ]] && args+=( "-username=$USERNAME" ) | ||
args+=( "-timeout=60m" ) | ||
|
||
BASE_TESTS_DIR="$GITHUB_WORKSPACE/test/tests" | ||
CONTENT_SERVICE_TESTS="$BASE_TESTS_DIR/components/content-service" | ||
IMAGE_BUILDER_TESTS="$BASE_TESTS_DIR/components/image-builder" | ||
DATABASE_TESTS="$BASE_TESTS_DIR/components/database" | ||
SERVER_TESTS="$BASE_TESTS_DIR/components/server" | ||
WS_DAEMON_TESTS="$BASE_TESTS_DIR/components/ws-daemon" | ||
WS_MANAGER_TESTS="$BASE_TESTS_DIR/components/ws-manager" | ||
WORKSPACE_TESTS="$BASE_TESTS_DIR/components/workspace" | ||
|
||
go install github.com/jstemmer/go-junit-report/v2@latest | ||
|
||
FAILURE_COUNT=0 | ||
|
||
WORKSPACE_TEST_LIST=("$CONTENT_SERVICE_TESTS" "$IMAGE_BUILDER_TESTS" "$DATABASE_TESTS" "$SERVER_TESTS" "$WS_DAEMON_TESTS" "$WS_MANAGER_TESTS" "$WORKSPACE_TESTS") | ||
for TEST_PATH in "${WORKSPACE_TEST_LIST[@]}" | ||
do | ||
TEST_NAME=$(basename "${TEST_PATH}") | ||
echo "running integration for ${TEST_NAME}" | ||
|
||
cd "${TEST_PATH}" | ||
set +e | ||
go test -v ./... "${args[@]}" 2>&1 | go-junit-report -subtest-mode=exclude-parents -set-exit-code -out "TEST-${TEST_NAME}.xml" -iocopy | ||
RC=${PIPESTATUS[0]} | ||
set -e | ||
|
||
if [ "${RC}" -ne "0" ]; then | ||
FAILURE_COUNT=$((FAILURE_COUNT+1)) | ||
fi | ||
done | ||
|
||
exit $FAILURE_COUNT | ||
- name: Test Summary | ||
id: test_summary | ||
uses: test-summary/action@v2 | ||
with: | ||
paths: "test/tests/**/TEST-*.xml" | ||
if: always() | ||
- name: Slack Notification | ||
uses: rtCamp/action-slack-notify@v2 | ||
if: success() || failure() | ||
env: | ||
SLACK_WEBHOOK: ${{ steps.secrets.outputs.WORKSPACE_SLACK_WEBHOOK }} | ||
SLACK_COLOR: ${{ job.status }} | ||
SLACK_MESSAGE: ${{ steps.test_summary.outputs.passed }}/${{ steps.test_summary.outputs.total }} tests passed | ||
- name: Delete preview environment | ||
if: github.event.inputs.skip_delete != 'true' && (success() || failure()) | ||
uses: ./.github/actions/delete-preview | ||
with: | ||
name: ${{ needs.configuration.outputs.name }} | ||
sa_key: ${{ secrets.GCP_CREDENTIALS }} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is a test
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's visible from a workspace, thanks Github extension!