Release Workflow #64
Workflow file for this run
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
on: | |
push: | |
tags: | |
- "*-rc*" | |
permissions: | |
contents: write | |
packages: write | |
jobs: | |
build: | |
uses: ./.github/workflows/build_shared.yml | |
with: | |
ref: ${{ github.ref }} | |
tag: ${{ github.ref_name }} | |
strip_rc: true | |
test-e2e-server: | |
needs: [build] | |
runs-on: ubuntu-latest | |
env: | |
NODE_ENV: test | |
E2E_TEST: "true" | |
DATABASE_URL: postgres://root:postgres@localhost:5432/badger_test | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Use Node.js 18.x | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 18.x | |
cache: "yarn" | |
cache-dependency-path: "yarn.lock" | |
- name: Set ref in docker-compose | |
run: sed -i "s/__RC_REF__/${{ github.ref_name }}/g" docker-compose-rc-test.yml | |
- name: Start services | |
run: docker compose -f docker-compose.yml -f docker-compose-rc-test.yml up -d | |
- run: yarn install --immutable --inline-builds | |
- uses: ./.github/steps/setup-playwright | |
with: | |
working-directory: ./server | |
- name: Migrate database | |
run: | | |
yarn prisma:migrateProd | |
- name: Retart services | |
run: | | |
docker compose -f docker-compose.yml -f docker-compose-rc-test.yml restart server jobrunner | |
- name: Run Playwright tests | |
run: yarn ${{ runner.debug && 'test:e2e:debug' || 'test:e2e' }} | |
working-directory: ./server | |
env: | |
PLAYWRIGHT_HTML_REPORT: ${{ github.workspace }}/server/playwright-report | |
- uses: actions/upload-artifact@v3 | |
if: failure() | |
with: | |
name: playwright-report-server | |
path: ./server/playwright-report/ | |
retention-days: 30 | |
test-desktop: | |
runs-on: windows-latest | |
needs: [build] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Use Node.js 18.x | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 18.x | |
cache: "yarn" | |
cache-dependency-path: "yarn.lock" | |
- name: Download Desktop build | |
uses: actions/download-artifact@v4 | |
with: | |
name: badger-desktop-windows | |
- name: Install Badger | |
run: | | |
$version = "${{ github.ref_name }}" -replace "^v", "" -replace "-rc.*", "" | |
Start-Process -FilePath "Badger Desktop-$version.exe" -ArgumentList "/S","/D=${{ runner.temp }}\badger" -Wait | |
shell: pwsh | |
- run: yarn install --immutable --inline-builds | |
- name: Run tests | |
run: yarn test:e2e --project=standalone | |
working-directory: ./desktop | |
env: | |
TEST_APPLICATION_PATH: ${{ runner.temp }}\badger\Badger Desktop.exe | |
release: | |
needs: [test-e2e-server, test-desktop] | |
environment: release | |
runs-on: ubuntu-latest | |
steps: | |
- name: Determine version number | |
run: echo "VERSION=$(echo '${{ github.ref_name }}' | sed 's/-rc.*//')" >> $GITHUB_ENV | |
- name: Download Desktop build | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: badger-desktop-* | |
path: artifacts | |
- name: Re-tag and push Docker images | |
run: | | |
for img in server jobrunner; do | |
docker pull ghcr.io/ystv/badger/$img:${{ github.ref_name }} | |
docker tag ghcr.io/ystv/badger/$img:${{ github.ref_name }} ghcr.io/ystv/badger/$img:$VERSION | |
docker push ghcr.io/ystv/badger/$img:$VERSION | |
docker tag ghcr.io/ystv/badger/$img:${{ github.ref_name }} ghcr.io/ystv/badger/$img:latest | |
docker push ghcr.io/ystv/badger/$img:latest | |
done | |
shell: bash | |
- name: Create GitHub release | |
uses: actions/github-script@v7 | |
id: release | |
with: | |
script: | | |
const release = await github.rest.repos.createRelease({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
target_commitish: context.sha, | |
tag_name: process.env.VERSION, | |
name: process.env.VERSION, | |
draft: true, | |
generate_release_notes: true, | |
make_latest: true | |
}); | |
core.setOutput('id', release.data.id) | |
core.setOutput('tag_name', release.data.tag_name) | |
- name: Upload artifacts | |
run: | | |
find artifacts -type f -exec gh release upload ${{ steps.release.outputs.tag_name }} {} \; | |
- name: Publish release | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
await github.rest.repos.updateRelease({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
release_id: ${{ steps.release.outputs.id }}, | |
draft: false | |
}) |