sync with fsrs-rs #202
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: sync with fsrs-rs | |
on: | |
workflow_dispatch: {} | |
schedule: | |
- cron: "0 0 * * *" # once a day | |
env: | |
CARGO_TERM_COLOR: always | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check out | |
uses: actions/checkout@v4 | |
with: | |
submodules: true | |
ssh-key: "${{secrets.FSRS_BROWSER_COMMIT_KEY}}" # https://stackoverflow.com/a/75578028 | |
- name: Pull latest fsrs-rs | |
run: | | |
(cd fsrs-rs && git pull origin fsrs-browser) | |
changed=$(git status --porcelain | wc -l) | |
echo "changed=$changed" >> "$GITHUB_ENV" | |
- name: Cancelling due to no changes | |
uses: andymckay/[email protected] | |
if: env.changed == 0 | |
# needed since the run is not cancelled immediately | |
- name: Wait for run cancellation | |
if: env.changed == 0 | |
run: while true; do echo "Waiting for job to be cancelled"; sleep 5; done | |
- name: Bump fsrs-browser version | |
run: ./bumpVersion.sh | |
- name: Install Rust nightly | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: nightly-2024-07-26 | |
components: rustfmt,clippy | |
targets: wasm32-unknown-unknown | |
- name: Add rust-src | |
run: rustup component add rust-src --toolchain nightly-2024-07-26-x86_64-unknown-linux-gnu | |
- name: Set up cargo cache | |
uses: actions/cache@v3 | |
with: | |
path: | | |
~/.cargo/bin/ | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
target/ | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: ${{ runner.os }}-cargo- | |
- name: Run checks | |
run: ./check.sh | |
- name: Setup Node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: lts/* | |
- uses: pnpm/action-setup@v3 | |
name: Install pnpm | |
with: | |
version: 8 | |
run_install: false | |
package_json_file: sandbox/package.json | |
- name: Get pnpm store directory | |
shell: bash | |
run: | | |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV | |
- uses: actions/cache@v4 | |
name: Setup pnpm cache | |
with: | |
path: ${{ env.STORE_PATH }} | |
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: | | |
${{ runner.os }}-pnpm-store- | |
- name: Install dependencies | |
working-directory: ./sandbox | |
run: pnpm install | |
- name: Install Playwright Browsers | |
working-directory: ./sandbox | |
run: pnpm exec playwright install --with-deps | |
- name: Build Dev | |
run: ./dev.sh | |
- name: Run Playwright dev tests | |
working-directory: ./sandbox | |
run: pnpm exec playwright test dev.spec.ts | |
- name: Build Prod | |
run: ./prod.sh | |
- name: Run Playwright prod tests | |
working-directory: ./sandbox | |
run: pnpm exec playwright test prod.spec.ts | |
- uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: playwright-report | |
path: sandbox/playwright-report/ | |
retention-days: 30 | |
- name: Compute fsrs-rs version and setup git | |
if: always() | |
run: | | |
set -e | |
version=$(cd fsrs-rs && cat Cargo.toml \ | |
| grep --extended-regexp "^version =" \ | |
| grep --extended-regexp --only-matching "[0-9]+\.[0-9]+.[0-9]+[-\.\+a-zA-Z0-9]*" \ | |
| head --lines=1) | |
echo "rsVersion=$version" >> "$GITHUB_ENV" | |
git config --local user.email "[email protected]" | |
git config --local user.name "Github Actions" | |
git add . | |
- name: Autosync success | |
if: ${{ success() }} | |
run: | | |
git commit -m "auto update fsrs-rs to $rsVersion" | |
git push | |
- name: Autosync failure | |
if: ${{ failure() }} | |
run: | | |
git switch -c "fsrs-rs-v$rsVersion" | |
git commit -m "auto update fsrs-rs to $rsVersion" | |
git push --set-upstream origin "fsrs-rs-v$rsVersion" | |
# https://stackoverflow.com/a/71224444 | |
- name: Create PR for failed autosync | |
uses: actions/github-script@v7 | |
if: ${{ failure() }} | |
with: | |
script: | | |
const { repo, owner } = context.repo | |
const result = await github.rest.pulls.create({ | |
title: `Update fsrs-rs to v${process.env.rsVersion}`, | |
owner, | |
repo, | |
head: `fsrs-rs-v${process.env.rsVersion}`, | |
draft: true, | |
base: 'main', | |
body: 'Autosync failed: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}' | |
}) | |
github.rest.issues.addLabels({ | |
owner, | |
repo, | |
issue_number: result.data.number, | |
labels: ['automated pr'], | |
}) |