Test ASReview extensions workflow (asreview/asreview)
The Test ASReview extensions workflow from asreview/asreview, explained and optimized by Latchkey.
CI health: D - needs work
Point runs-on at Latchkey and get caching, run de-duplication, job timeouts, self-healing for flaky steps, and up to 58% lower cost, applied automatically.
What it does
This is the Test ASReview extensions workflow from the asreview/asreview repository, a real project running GitHub Actions. It is shown here with attribution under its Apache-2.0 license.
Below, Latchkey shows a faster, safer version produced by its optimization engine.
The workflow
name: Test ASReview extensions
on: [push, pull_request]
jobs:
test-asreview-datatools:
name: test-asreview-datatools
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.13"
- name: Install packages
run: |
pip install pytest
pip install --no-cache-dir .
- name: Install extension
run: |
git clone https://github.com/asreview/asreview-datatools
cd asreview-datatools
latestTag=$(git describe --tags `git rev-list --tags --max-count=1`)
git checkout $latestTag
pip install .
- name: Run test on asreview-datatools
run: |
pytest asreview-datatools/tests/
test-asreview-insights:
name: test-asreview-insights
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.13"
- name: Install packages
run: |
pip install pytest
pip install --no-cache-dir .
- name: Install extension
run: |
git clone https://github.com/asreview/asreview-insights
cd asreview-insights
latestTag=$(git describe --tags `git rev-list --tags --max-count=1`)
git checkout $latestTag
pip install .
- name: Run test on asreview-insights
run: |
pytest asreview-insights/tests/
The same workflow, on Latchkey
Estimated ~20% faster on cache hits, plus fewer wasted runs and a safer supply chain. Added and changed lines are highlighted.
name: Test ASReview extensions on: [push, pull_request] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: test-asreview-datatools: timeout-minutes: 30 name: test-asreview-datatools runs-on: latchkey-small steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: cache: 'pip' python-version: "3.13" - name: Install packages run: | pip install pytest pip install --no-cache-dir . - name: Install extension run: | git clone https://github.com/asreview/asreview-datatools cd asreview-datatools latestTag=$(git describe --tags `git rev-list --tags --max-count=1`) git checkout $latestTag pip install . - name: Run test on asreview-datatools run: | pytest asreview-datatools/tests/ test-asreview-insights: timeout-minutes: 30 name: test-asreview-insights runs-on: latchkey-small steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: cache: 'pip' python-version: "3.13" - name: Install packages run: | pip install pytest pip install --no-cache-dir . - name: Install extension run: | git clone https://github.com/asreview/asreview-insights cd asreview-insights latestTag=$(git describe --tags `git rev-list --tags --max-count=1`) git checkout $latestTag pip install . - name: Run test on asreview-insights run: | pytest asreview-insights/tests/
What changed
- Run on Latchkey managed runners with one line (
runs-on), which apply the fixes below automatically and self-heal transient failures. This example useslatchkey-small; pick the runner size that fits the job. - Cancel superseded runs when a branch or PR gets a newer push.
- Cache dependency installs on the setup step so they are served from cache.
- Add a job timeout so a hung step cannot burn hours of runner time.
What Latchkey heals here
This workflow has steps that commonly fail on transient issues (network, registries, flaky browsers). On Latchkey managed runners they are detected, retried, and self-healed instead of failing your build:
- Dependency installs
This workflow runs 2 jobs per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.