From ec8ae3fc659bd6ff4e0954b8b1be1f84603ff265 Mon Sep 17 00:00:00 2001 From: Gerhard Schlager Date: Fri, 13 Oct 2023 15:44:11 +0200 Subject: [PATCH] DEV: Add GitHub Actions workflow for testing migrations This workflow runs only for code underneath the `migrations/` directory. The usual test workflow is skipped for migrations because running frontend and backend tests is a waste of time and resources when only migrations are changed. --- .github/workflows/migration-tests.yml | 126 ++++++++++++++++++++++++++ .github/workflows/tests.yml | 4 + 2 files changed, 130 insertions(+) create mode 100644 .github/workflows/migration-tests.yml diff --git a/.github/workflows/migration-tests.yml b/.github/workflows/migration-tests.yml new file mode 100644 index 00000000000..2e8a0486aa3 --- /dev/null +++ b/.github/workflows/migration-tests.yml @@ -0,0 +1,126 @@ +name: Migration Tests + +on: + pull_request: + paths: + - "migrations/**" + push: + branches: + - main + - stable + paths: + - "migrations/**" + +concurrency: + group: migration-tests-${{ format('{0}-{1}', github.head_ref || github.run_number, github.job) }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + tests: + name: Ruby ${{ matrix.ruby }} + runs-on: 'ubuntu-latest' + container: discourse/discourse_test:slim + timeout-minutes: 20 + + env: + RAILS_ENV: test + PGUSER: discourse + PGPASSWORD: discourse + + strategy: + fail-fast: false + + matrix: + ruby: ["3.2"] + + steps: + - name: Set working directory owner + run: chown root:root . + + - uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - name: Setup Git + run: | + git config --global user.email "ci@ci.invalid" + git config --global user.name "Discourse CI" + + - name: Start redis + run: | + redis-server /etc/redis/redis.conf & + + - name: Start Postgres + run: | + chown -R postgres /var/run/postgresql + sudo -E -u postgres script/start_test_db.rb + sudo -u postgres psql -c "CREATE ROLE $PGUSER LOGIN SUPERUSER PASSWORD '$PGPASSWORD';" + + - name: Bundler cache + uses: actions/cache@v3 + with: + path: vendor/bundle + key: ${{ runner.os }}-${{ matrix.ruby }}-gem-${{ hashFiles('**/Gemfile.lock') }} + restore-keys: ${{ runner.os }}-${{ matrix.ruby }}-gem- + + - name: Setup gems + run: | + gem install bundler --conservative -v $(awk '/BUNDLED WITH/ { getline; gsub(/ /,""); print $0 }' Gemfile.lock) + bundle config --local path vendor/bundle + bundle config --local deployment true + bundle config --local without development + bundle install --jobs 4 + bundle clean + + - name: Get yarn cache directory + id: yarn-cache-dir + run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT + + - name: Yarn cache + uses: actions/cache@v3 + id: yarn-cache + with: + path: ${{ steps.yarn-cache-dir.outputs.dir }} + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: ${{ runner.os }}-yarn- + + - name: Yarn install + run: yarn install --frozen-lockfile + + - name: Fetch app state cache + uses: actions/cache@v3 + id: app-cache + with: + path: tmp/app-cache + key: >- + ${{ runner.os }}- + ${{ hashFiles('.github/workflows/tests.yml') }}- + ${{ hashFiles('db/**/*', 'plugins/**/db/**/*') }}- + + - name: Restore database from cache + if: steps.app-cache.outputs.cache-hit == 'true' + run: psql --quiet -o /dev/null -f tmp/app-cache/cache.sql postgres + + - name: Restore uploads from cache + if: steps.app-cache.outputs.cache-hit == 'true' + run: rm -rf public/uploads && cp -r tmp/app-cache/uploads public/uploads + + - name: Create and migrate database + if: steps.app-cache.outputs.cache-hit != 'true' + run: | + bin/rake db:create + bin/rake db:migrate + + - name: Dump database for cache + if: steps.app-cache.outputs.cache-hit != 'true' + run: mkdir -p tmp/app-cache && pg_dumpall > tmp/app-cache/cache.sql + + - name: Dump uploads for cache + if: steps.app-cache.outputs.cache-hit != 'true' + run: rm -rf tmp/app-cache/uploads && cp -r public/uploads tmp/app-cache/uploads + + - name: RSpec + run: bin/rspec migrations/spec/ diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 24c9f9a7cb6..035c4962fe2 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -2,11 +2,15 @@ name: Tests on: pull_request: + paths-ignore: + - "migrations/**" push: branches: - main - beta - stable + paths-ignore: + - "migrations/**" concurrency: group: tests-${{ format('{0}-{1}', github.head_ref || github.run_number, github.job) }}