Skip to content

sync with fsrs-rs

sync with fsrs-rs #179

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
# 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}`,
base: 'main',
body: [
'This PR is auto-generated by',
'[actions/github-script](https://github.com/actions/github-script).',
].join('\n'),
})
github.rest.issues.addLabels({
owner,
repo,
issue_number: result.data.number,
labels: ['automated pr'],
})