name: Test on: # Run CI on all pushes to the master and release/** branches, and on all new # pull requests, and on all pushes to pull requests (even if a pull request # is not against master). push: branches: - "master" - "release/**" pull_request: schedule: - cron: "0 0,12 * * *" defaults: run: shell: bash jobs: e2e-test: if: github.repository_owner == 'getsentry' runs-on: ubuntu-22.04 name: "Sentry self-hosted end-to-end tests" steps: - name: Checkout uses: actions/checkout@v4 with: path: self-hosted - name: End to end tests uses: getsentry/action-self-hosted-e2e-tests@main with: project_name: self-hosted unit-test: if: github.repository_owner == 'getsentry' runs-on: ubuntu-22.04 name: "unit tests" steps: - name: Checkout uses: actions/checkout@v4 - name: Unit Tests run: ./unit-test.sh upgrade-test: if: github.repository_owner == 'getsentry' runs-on: ubuntu-22.04 name: "Sentry upgrade test" env: REPORT_SELF_HOSTED_ISSUES: 0 steps: - name: Get latest self-hosted release version run: | LATEST_TAG=$(curl -s https://api.github.com/repos/getsentry/self-hosted/releases/latest | jq -r '.tag_name') echo "LATEST_TAG=$LATEST_TAG" >> $GITHUB_ENV - name: Checkout latest release uses: actions/checkout@v4 with: ref: ${{ env.LATEST_TAG }} - name: Get Compose run: | # Docker Compose v1 is installed here, remove it sudo rm -f "/usr/local/bin/docker-compose" sudo rm -f "/usr/local/lib/docker/cli-plugins/docker-compose" sudo mkdir -p "/usr/local/lib/docker/cli-plugins" sudo curl -L https://github.com/docker/compose/releases/download/v2.26.0/docker-compose-`uname -s`-`uname -m` -o "/usr/local/lib/docker/cli-plugins/docker-compose" sudo chmod +x "/usr/local/lib/docker/cli-plugins/docker-compose" - name: Install ${{ env.LATEST_TAG }} run: ./install.sh - name: Checkout current ref uses: actions/checkout@v4 - name: Install current ref run: ./install.sh integration-test: if: github.repository_owner == 'getsentry' runs-on: ubuntu-22.04 name: integration test ${{ matrix.compose_version }} - customizations ${{ matrix.customizations }} strategy: fail-fast: false matrix: customizations: ["disabled", "enabled"] compose_version: ["v2.19.0", "v2.26.0"] include: - compose_version: "v2.19.0" compose_path: "/usr/local/lib/docker/cli-plugins" - compose_version: "v2.26.0" compose_path: "/usr/local/lib/docker/cli-plugins" env: COMPOSE_PROJECT_NAME: self-hosted-${{ strategy.job-index }} REPORT_SELF_HOSTED_ISSUES: 0 SELF_HOSTED_TESTING_DSN: ${{ vars.SELF_HOSTED_TESTING_DSN }} steps: - name: Checkout uses: actions/checkout@v4 - name: Setup dev environment run: | pip install -r requirements-dev.txt echo "PY_COLORS=1" >> "$GITHUB_ENV" ### pytest-sentry configuration ### if [ "$GITHUB_REPOSITORY" = "getsentry/self-hosted" ]; then echo "PYTEST_SENTRY_DSN=$SELF_HOSTED_TESTING_DSN" >> $GITHUB_ENV echo "PYTEST_SENTRY_TRACES_SAMPLE_RATE=0" >> $GITHUB_ENV # This records failures on master to sentry in order to detect flakey tests, as it's # expected that people have failing tests on their PRs if [ "$GITHUB_REF" = "refs/heads/master" ]; then echo "PYTEST_SENTRY_ALWAYS_REPORT=1" >> $GITHUB_ENV fi fi - name: Get Compose run: | # Always remove `docker compose` support as that's the newer version # and comes installed by default nowadays. sudo rm -f "/usr/local/lib/docker/cli-plugins/docker-compose" # Docker Compose v1 is installed here, remove it sudo rm -f "/usr/local/bin/docker-compose" sudo rm -f "${{ matrix.compose_path }}/docker-compose" sudo mkdir -p "${{ matrix.compose_path }}" sudo curl -L https://github.com/docker/compose/releases/download/${{ matrix.compose_version }}/docker-compose-`uname -s`-`uname -m` -o "${{ matrix.compose_path }}/docker-compose" sudo chmod +x "${{ matrix.compose_path }}/docker-compose" - name: Install self-hosted uses: nick-fields/retry@v3 with: timeout_minutes: 10 max_attempts: 3 command: ./install.sh - name: Integration Test run: | if [ "${{ matrix.compose_version }}" = "v2.19.0" ]; then pytest --reruns 3 --cov --junitxml=junit.xml _integration-test/ --customizations=${{ matrix.customizations }} else pytest --cov --junitxml=junit.xml _integration-test/ --customizations=${{ matrix.customizations }} fi - name: Inspect failure if: failure() run: | docker compose ps docker compose logs - name: Upload coverage to Codecov uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} slug: getsentry/self-hosted - name: Upload test results to Codecov if: ${{ !cancelled() }} uses: codecov/test-results-action@v1 with: token: ${{ secrets.CODECOV_TOKEN }}