ci: Use generic Docker volume cache action #4791
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: 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 * * *" | |
concurrency: | |
group: ${{ github.ref_name || github.sha }} | |
cancel-in-progress: true | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
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: Compute Docker Volume Cache Key | |
id: cache_key | |
run: | | |
source .env | |
SENTRY_IMAGE_SHA=$(docker buildx imagetools inspect $SENTRY_IMAGE --format "{{println .Manifest.Digest}}") | |
echo "SENTRY_IMAGE_SHA=$SENTRY_IMAGE_SHA" >> $GITHUB_OUTPUT | |
SNUBA_IMAGE_SHA=$(docker buildx imagetools inspect $SNUBA_IMAGE --format "{{println .Manifest.Digest}}") | |
echo "SNUBA_IMAGE_SHA=$SNUBA_IMAGE_SHA" >> $GITHUB_OUTPUT | |
- name: Restore DB Volumes Cache | |
id: restore_cache | |
uses: BYK/docker-volume-cache-action/restore@main | |
with: | |
key: db-volumes-v4-${{ steps.cache_key.outputs.SENTRY_IMAGE_SHA }}-${{ steps.cache_key.outputs.SNUBA_IMAGE_SHA }} | |
restore-keys: | | |
db-volumes-v4-${{ steps.cache_key.outputs.SENTRY_IMAGE_SHA }} | |
db-volumes-v4- | |
volumes: | | |
sentry-postgres | |
sentry-clickhouse | |
sentry-kafka | |
- name: Install ${{ env.LATEST_TAG }} | |
env: | |
SKIP_DB_MIGRATIONS: ${{ steps.restore_cache.outputs.cache-hit == 'true' && '1' || '' }} | |
run: | | |
# This is to compensate for a bug in upgrade-clickhouse where | |
# if we have sentry-clickhouse volume without the rest, it fails | |
# We may get sentry-clickhouse from the cache step above | |
source install/create-docker-volumes.sh | |
./install.sh | |
- name: Save DB Volumes Cache | |
if: steps.restore_cache.outputs.cache-hit != 'true' | |
uses: BYK/docker-volume-cache-action/save@main | |
with: | |
key: ${{ steps.restore_cache.outputs.cache-primary-key }} | |
volumes: | | |
sentry-postgres | |
sentry-clickhouse | |
sentry-kafka | |
- name: Checkout current ref | |
uses: actions/checkout@v4 | |
- name: Install current ref | |
run: | | |
# This is for the cache restore on Kafka to work in older releases | |
docker run --rm -v "sentry-kafka:/data" busybox chown -R 1000:1000 /data | |
./install.sh | |
- name: Inspect failure | |
if: failure() | |
run: | | |
docker compose ps | |
docker compose logs | |
integration-test: | |
if: github.repository_owner == 'getsentry' | |
runs-on: ubuntu-22.04 | |
name: integration test | |
env: | |
REPORT_SELF_HOSTED_ISSUES: 0 | |
SELF_HOSTED_TESTING_DSN: ${{ vars.SELF_HOSTED_TESTING_DSN }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Use action from local checkout | |
uses: './' | |
with: | |
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
- name: Inspect failure | |
if: failure() | |
run: | | |
docker compose ps | |
docker compose logs |