Skip to content

Merge pull request #198 from davwheat/main #927

Merge pull request #198 from davwheat/main

Merge pull request #198 from davwheat/main #927

Workflow file for this run

name: Smoketest
on:
push:
branches:
- main
- deploy
# Triggers the workflow on pull request event, but only for pull request from not forked repo
pull_request:
types:
- opened
- synchronize
# Triggers the workflow on pull request event, but only for pull request opened or pull request labeled with "🚀 request deploy" (from forked repo)
# pull_request is not allowed to use secrets, so we use pull_request_target instead (in forked repos)
pull_request_target:
types:
# When a labeled '🚀 request deploy' pull request from forked repo, it will be deploy to Cloudflare Pages
- labeled
workflow_dispatch:
permissions:
# default contents: read & write (in forked repos, only read)
contents: write
# default deployments: read & write (in forked repos, only read)
deployments: write
# default pull-requests: read & write (in forked repos, only read)
pull-requests: write
env:
NODE_VERSION: 20.x
CF_PAGES_PROJECT_NAME: rail-announcements
jobs:
smoketest:
runs-on: ubuntu-latest
name: Test, build and deploy
if:
${{ !contains(github.event_name, 'pull_request') || ((github.event_name == 'pull_request' && !github.event.pull_request.head.repo.fork) ||
(github.event_name == 'pull_request_target' && github.event.pull_request.head.repo.fork && contains(github.event.label.name, '🚀 request
deploy'))) }}
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.head.ref || github.ref }}
cancel-in-progress: true
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha || github.ref }}
- name: Find existing build status comment
continue-on-error: true
uses: peter-evans/find-comment@v3
if:
${{ github.event_name == 'pull_request' || github.event_name == 'pull_request_target' && contains(github.event.label.name, '🚀 request
deploy') }}
id: find_status_comment
with:
issue-number: ${{ github.event.pull_request.number }}
comment-author: 'github-actions[bot]'
body-includes: Deploying with
- name: Create or update comment
continue-on-error: true
uses: peter-evans/create-or-update-comment@v4
if:
${{ github.event_name == 'pull_request' || github.event_name == 'pull_request_target' && contains(github.event.label.name, '🚀 request
deploy') }}
with:
issue-number: ${{ github.event.pull_request.number }}
comment-id: ${{ steps.find_status_comment.outputs.comment-id }}
edit-mode: replace
body: |
## Deploying with &nbsp;<a href="https://pages.dev"><img alt="Cloudflare Pages" src="https://user-images.githubusercontent.com/23264/106598434-9e719e00-654f-11eb-9e59-6167043cfa01.png" width="16"></a> &nbsp;Cloudflare Pages
<table><tr><td><strong>Latest commit:</strong> </td><td>
<code>${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}</code>
</td></tr>
<tr><td><strong>Status:</strong></td><td>
&nbsp;⚡️&nbsp; Build in progress...
</td></tr>
</table>
- name: Use Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'yarn'
- name: Install dependencies
run: |
yarn install --immutable
- name: Verify formatting
run: yarn format:check
- name: Restore Gatsby cache
uses: actions/cache@v4
id: gatsbyCache
with:
path: ./.cache
key: ${{ runner.os }}-gatsby-cache-${{ secrets.CACHE_VERSION }}-${{ hashFiles('public') }}
restore-keys: |
${{ runner.os }}-gatsby-cache-${{ secrets.CACHE_VERSION }}-
- name: Build site
run: yarn build:ci
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
- name: Publish Sentry release
if: github.ref == 'refs/heads/deploy' && github.event_name == 'push'
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: davw-network
SENTRY_PROJECT: rail-announcements-web
continue-on-error: true
run: |
VERSION=`yarn sentry-cli --url https://sentry.service.davw.network releases propose-version`
yarn sentry-cli --url https://sentry.service.davw.network releases new "$VERSION"
yarn sentry-cli --url https://sentry.service.davw.network releases set-commits "$VERSION" --auto
yarn sentry-cli --url https://sentry.service.davw.network releases finalize "$VERSION"
- name: Run D1 migrations
if: github.ref == 'refs/heads/deploy' && github.event_name == 'push'
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
command: d1 migrations apply rail-announcements
- name: Setup Rclone
uses: AnimMouse/setup-rclone@v1
with:
rclone_config: ${{ secrets.RCLONE_CONFIG }}
- name: Upload audio files to Cloudflare R2
# If it's a PR, only run if the PR head is not a fork
if: ${{ github.event_name != 'pull_request' || !github.event.pull_request.head.repo.fork }}
run: |
rclone --fast-list -v --transfers=128 --checkers=256 --progress copy "./audio" "Cloudflare R2:/rail-announcements-audio"
env:
RCLONE_CONFIG_PASS: ${{ secrets.RCLONE_CONFIG_PASSWORD }}
- name: Publish to Cloudflare Pages
uses: cloudflare/pages-action@1
if: ${{ github.event_name != 'pull_request_target' || contains(github.event.label.name, '🚀 request deploy') }}
id: cf-pages-upload
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
projectName: ${{ env.CF_PAGES_PROJECT_NAME }}
directory: public # e.g. 'dist'
gitHubToken: ${{ secrets.GITHUB_TOKEN }}
wranglerVersion: '3'
# Use PR head branch if available, otherwise use the current branch
branch: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.ref || github.ref_name }}
- name: Remove deploy label
if: ${{ github.event_name == 'pull_request_target' && contains(github.event.label.name, '🚀 request deploy') }}
uses: actions/github-script@v6
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
github.rest.issues.removeLabel({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
name: ['🚀 request deploy']
})
- name: Find existing build status comment
continue-on-error: true
uses: peter-evans/find-comment@v3
if:
${{ github.event_name == 'pull_request' || github.event_name == 'pull_request_target' && contains(github.event.label.name, '🚀 request
deploy') }}
id: find_current_status_comment
with:
issue-number: ${{ github.event.pull_request.number }}
comment-author: 'github-actions[bot]'
body-includes: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
- name: Update comment
continue-on-error: true
if:
${{ (github.event_name == 'pull_request' || github.event_name == 'pull_request_target' && contains(github.event.label.name, '🚀 request
deploy')) && steps.find_current_status_comment.outputs.comment-id != '' }}
uses: peter-evans/create-or-update-comment@v4
with:
comment-id: ${{ steps.find_current_status_comment.outputs.comment-id }}
edit-mode: replace
body: |
## Deploying with &nbsp;<a href="https://pages.dev"><img alt="Cloudflare Pages" src="https://user-images.githubusercontent.com/23264/106598434-9e719e00-654f-11eb-9e59-6167043cfa01.png" width="16"></a> &nbsp;Cloudflare Pages
<table><tr><td><strong>Latest commit:</strong> </td><td>
<code>${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}</code>
</td></tr>
<tr><td><strong>Status:</strong></td><td>
&nbsp;✅&nbsp; Deploy successful!
</td></tr>
<tr><td><strong>Preview URL:</strong></td><td>
<a href='${{ steps.cf-pages-upload.outputs.url }}'>${{ steps.cf-pages-upload.outputs.url }}</a>
</td></tr>
<tr><td><strong>Branch Preview URL:</strong></td><td>
<a href='${{ steps.cf-pages-upload.outputs.alias }}'>${{ steps.cf-pages-upload.outputs.alias }}</a>
</td></tr>
</table>