![Luc Georges](/assets/img/avatar_default.png)
* feat: parallelise at hole level * fix(ci): move strategy to testbed job * feat: output json results file * fix(ci): install jq * fix(ci): add missing `runs-on` * fix(ci): add dependency to testbed job * fix(ci): invalid artifact key name * fix(ci): add missing i in fastapi key * feat(ci): make CI run different # of threads per repo * fix(ci): results.json not in markdown * feat: round output values * fix: avoid creating zombie processes * fix: check on word instead of line * feat: recreate holes for long CI
209 lines
6.5 KiB
YAML
209 lines
6.5 KiB
YAML
name: test
|
|
on:
|
|
workflow_dispatch:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
testbed:
|
|
strategy:
|
|
matrix:
|
|
repo:
|
|
- { name: simple, key: simple, parallel: 8 }
|
|
- { name: mmaitre314/picklescan, key: picklescan, parallel: 8 }
|
|
- { name: huggingface/huggingface_hub, key: huggingface_hub, parallel: 8 }
|
|
- { name: tiangolo/fastapi, key: fastapi, parallel: 8 }
|
|
- { name: encode/starlette, key: starlette, parallel: 8 }
|
|
- { name: lancedb/lancedb, key: lancedb, parallel: 2 }
|
|
- { name: lancedb/lance, key: lance, parallel: 2 }
|
|
- { name: tkaitchuck/constrandom, key: constrandom, parallel: 8 }
|
|
- { name: jaemk/cached, key: cached, parallel: 4 }
|
|
- { name: smol-rs/async-executor, key: async-executor, parallel: 4 }
|
|
- { name: gcanti/io-ts, key: io-ts, parallel: 8 }
|
|
- { name: colinhacks/zod, key: zod, parallel: 8 }
|
|
- { name: helix-editor/helix, key: helix, parallel: 2 }
|
|
runs-on: [self-hosted, intel-cpu, 8-cpu, ci]
|
|
container:
|
|
image: ubuntu:22.04
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
apt update
|
|
DEBIAN_FRONTEND=noninteractive apt install -y pkg-config protobuf-compiler libssl-dev curl build-essential git-all gfortran
|
|
|
|
- name: Install Rust toolchain
|
|
uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
with:
|
|
rustflags: ''
|
|
toolchain: nightly
|
|
|
|
- name: Install Python 3.10
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: '3.10'
|
|
|
|
- name: Install node 18
|
|
uses: actions/setup-node@v3
|
|
with:
|
|
node-version: 18
|
|
|
|
- name: Install yarn
|
|
run: |
|
|
npm i -g yarn
|
|
|
|
- name: Set up cargo cache
|
|
uses: actions/cache@v3
|
|
continue-on-error: false
|
|
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-${{ hashFiles('Cargo.lock') }}
|
|
|
|
- name: Build project
|
|
run: cargo build -r
|
|
|
|
- name: Run testbed
|
|
run: 'cargo run --bin testbed -r -- --api-token $API_TOKEN -r `pwd`/crates/testbed/repositories-ci.yaml -f ${{ matrix.repo.name }} -p ${{ matrix.repo.parallel }}'
|
|
if: github.event_name == 'push' || github.event_name == 'pull_request'
|
|
env:
|
|
API_TOKEN: ${{ secrets.API_TOKEN }}
|
|
|
|
- name: Run testbed
|
|
run: 'cargo run --bin testbed -r -- --api-token $API_TOKEN -f ${{ matrix.repo.name }} -p ${{ matrix.repo.parallel }}'
|
|
if: github.event_name == 'workflow_dispatch'
|
|
env:
|
|
API_TOKEN: ${{ secrets.API_TOKEN }}
|
|
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v1
|
|
with:
|
|
name: results-${{ matrix.repo.key }}
|
|
path: ./results.json
|
|
|
|
comment_results:
|
|
needs: [testbed]
|
|
runs-on: [self-hosted, intel-cpu, 8-cpu, ci]
|
|
container:
|
|
image: ubuntu:22.04
|
|
steps:
|
|
- name: Install dependencies
|
|
run: |
|
|
apt update
|
|
apt install -y jq
|
|
|
|
- uses: actions/download-artifact@v1
|
|
with:
|
|
name: results-simple
|
|
path: results-simple
|
|
|
|
- uses: actions/download-artifact@v1
|
|
with:
|
|
name: results-picklescan
|
|
path: results-picklescan
|
|
|
|
- uses: actions/download-artifact@v1
|
|
with:
|
|
name: results-huggingface_hub
|
|
path: results-huggingface_hub
|
|
|
|
- uses: actions/download-artifact@v1
|
|
with:
|
|
name: results-fastapi
|
|
path: results-fastapi
|
|
|
|
- uses: actions/download-artifact@v1
|
|
with:
|
|
name: results-starlette
|
|
path: results-starlette
|
|
|
|
- uses: actions/download-artifact@v1
|
|
with:
|
|
name: results-lancedb
|
|
path: results-lancedb
|
|
|
|
- uses: actions/download-artifact@v1
|
|
with:
|
|
name: results-lance
|
|
path: results-lance
|
|
|
|
- uses: actions/download-artifact@v1
|
|
with:
|
|
name: results-constrandom
|
|
path: results-constrandom
|
|
|
|
- uses: actions/download-artifact@v1
|
|
with:
|
|
name: results-cached
|
|
path: results-cached
|
|
|
|
- uses: actions/download-artifact@v1
|
|
with:
|
|
name: results-async-executor
|
|
path: results-async-executor
|
|
|
|
- uses: actions/download-artifact@v1
|
|
with:
|
|
name: results-io-ts
|
|
path: results-io-ts
|
|
|
|
- uses: actions/download-artifact@v1
|
|
with:
|
|
name: results-zod
|
|
path: results-zod
|
|
|
|
- uses: actions/download-artifact@v1
|
|
with:
|
|
name: results-helix
|
|
path: results-helix
|
|
|
|
- name: Display structure of downloaded files
|
|
run: ls -R
|
|
|
|
- name: output to markdown
|
|
run: |
|
|
cat > results.md <<EOF
|
|
| Repository name | Source type | Average hole completion time (s) | Pass percentage |
|
|
| :-------------- | :---------- | -------------------------------: | --------------: |
|
|
EOF
|
|
cat **/results.json | jq -r '"| \(.[0].repo_name) | \(.[0].source_type) | \(.[0].avg_hole_completion_time_ms) | \(.[0].pass_percentage)% |"' >> results.md
|
|
cat >> results.md <<EOF
|
|
|
|
**Note:** The "hole completion time" represents the full process of:
|
|
- copying files from the setup cache directory
|
|
- replacing the code from the file with a completion from the model
|
|
- building the project
|
|
- running the tests
|
|
EOF
|
|
|
|
- name: Find Comment
|
|
uses: peter-evans/find-comment@v2
|
|
id: fc
|
|
if: github.event_name == 'pull_request'
|
|
with:
|
|
issue-number: ${{ github.event.pull_request.number }}
|
|
comment-author: 'github-actions[bot]'
|
|
body-includes: '| Repository name | Source type | Average hole completion time (s) | Pass percentage |'
|
|
|
|
- name: Create or update comment
|
|
if: github.event_name == 'pull_request'
|
|
uses: peter-evans/create-or-update-comment@v3
|
|
with:
|
|
comment-id: ${{ steps.fc.outputs.comment-id }}
|
|
issue-number: ${{ github.event.pull_request.number }}
|
|
body-path: results.md
|
|
edit-mode: replace
|
|
|