Update the workflow file to follow the example of the main Comunica repository #1850
Workflow file for this run
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: CI | |
on: [push, pull_request] | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
DEFAULT_NODE_VERSION: 22.x | |
jobs: | |
misc: | |
name: Tooling checks | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- macos-latest | |
- ubuntu-latest | |
- windows-latest | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Ensure line endings are consistent | |
run: git config --global core.autocrlf input | |
- name: Check out repository | |
uses: actions/checkout@v4 | |
- name: Use Node.js ${{ env.DEFAULT_NODE_VERSION }} | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ env.DEFAULT_NODE_VERSION }} | |
- name: Load dependency cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
**/node_modules | |
key: ${{ runner.os }}-modules-${{ hashFiles('yarn.lock') }} | |
- name: Install dependencies | |
run: yarn install --frozen-lockfile --ignore-engines | |
- name: Build TypeScript with esModuleInterop flag | |
run: yarn run build:ts --esModuleInterop true | |
- name: Run linter | |
run: yarn run lint | |
- name: Run depcheck | |
run: yarn run depcheck | |
- name: Test clean script | |
run: yarn run clean | |
test: | |
name: Unit tests | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- macos-latest | |
- ubuntu-latest | |
- windows-latest | |
node-version: | |
- 18.x | |
- 20.x | |
- 22.x | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Ensure line endings are consistent | |
run: git config --global core.autocrlf input | |
- name: Check out repository | |
uses: actions/checkout@v4 | |
- name: Use Node.js ${{ matrix.node-version }} | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: Load dependency cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
**/node_modules | |
key: ${{ runner.os }}-modules-${{ hashFiles('yarn.lock') }} | |
- name: Install dependencies and build | |
run: yarn install --frozen-lockfile --ignore-engines | |
- name: Run unit tests | |
run: yarn run test-ci:unit | |
env: | |
NODE_OPTIONS: --max_old_space_size=4096 | |
- name: Submit coverage results | |
uses: coverallsapp/github-action@v2 | |
with: | |
github-token: ${{ secrets.github_token }} | |
flag-name: run-${{ matrix.node-version }} | |
parallel: true | |
systemtest: | |
name: System tests | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- macos-latest | |
- ubuntu-latest | |
- windows-latest | |
node-version: | |
- 18.x | |
- 20.x | |
- 22.x | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Ensure line endings are consistent | |
run: git config --global core.autocrlf input | |
- name: Check out repository | |
uses: actions/checkout@v4 | |
- name: Use Node.js ${{ matrix.node-version }} | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: Load dependency cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
**/node_modules | |
key: ${{ runner.os }}-modules-${{ hashFiles('yarn.lock') }} | |
- name: Install dependencies and build | |
run: yarn install --frozen-lockfile --ignore-engines | |
- name: Run system tests | |
run: yarn run test-ci:system | |
env: | |
NODE_OPTIONS: --max_old_space_size=4096 | |
browsertest: | |
name: Browser tests | |
strategy: | |
fail-fast: false | |
matrix: | |
node-version: | |
- 18.x | |
- 20.x | |
- 22.x | |
runs-on: ubuntu-latest | |
steps: | |
- name: Ensure line endings are consistent | |
run: git config --global core.autocrlf input | |
- name: Check out repository | |
uses: actions/checkout@v4 | |
- name: Use Node.js ${{ matrix.node-version }} | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: Load dependency cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
**/node_modules | |
key: ${{ runner.os }}-modules-${{ hashFiles('yarn.lock') }} | |
- name: Install dependencies and build | |
run: yarn install --frozen-lockfile --ignore-engines | |
- name: Run browser tests | |
uses: nick-fields/retry@v3 | |
with: | |
timeout_minutes: 3 | |
max_attempts: 3 | |
command: yarn run test-browser | |
coveralls: | |
name: Coverage check | |
needs: test | |
runs-on: ubuntu-latest | |
steps: | |
- name: Consolidate test coverage from different jobs | |
uses: coverallsapp/github-action@v2 | |
with: | |
github-token: ${{ secrets.github_token }} | |
parallel-finished: true | |
dockerimages: | |
name: Docker images | |
needs: | |
- misc | |
- test | |
- systemtest | |
- browsertest | |
env: | |
# TODO: remove this override once lerna-docker works with Node 18+ | |
DEFAULT_NODE_VERSION: 18.x | |
runs-on: ubuntu-latest | |
steps: | |
- name: Ensure line endings are consistent | |
run: git config --global core.autocrlf input | |
- name: Check out repository | |
uses: actions/checkout@v4 | |
- name: Use Node.js ${{ env.DEFAULT_NODE_VERSION }} | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ env.DEFAULT_NODE_VERSION }} | |
- name: Load dependency cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
**/node_modules | |
key: ${{ runner.os }}-modules-${{ hashFiles('yarn.lock') }} | |
- name: Install dependencies and build monorepo | |
run: yarn install --frozen-lockfile --ignore-engines | |
- name: Install Lerna Docker | |
run: sh -c "`curl -fsSl https://raw.githubusercontent.com/rubensworks/lerna-docker/master/install.sh`" | |
- name: Build Docker images | |
run: ~/.lerna-docker/bin/lerna-docker comunica build | |
- name: Deploy Docker images | |
if: startsWith(github.ref, 'refs/heads/master') || startsWith(github.ref, 'refs/tags/') | |
run: ~/.lerna-docker/bin/lerna-docker comunica push | |
env: | |
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} | |
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Deploy Docker images (next/major) | |
if: startsWith(github.ref, 'refs/heads/next') | |
run: ~/.lerna-docker/bin/lerna-docker comunica push next | |
env: | |
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} | |
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} | |
performance: | |
name: Performance benchmarks | |
if: startsWith(github.ref, 'refs/heads/master') || startsWith(github.ref, 'refs/tags/') || startsWith(github.ref, 'refs/heads/feature') || startsWith(github.ref, 'refs/heads/next') | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
benchmark: | |
- solidbench | |
steps: | |
- name: Ensure line endings are consistent | |
run: git config --global core.autocrlf input | |
- name: Check out repository | |
uses: actions/checkout@v4 | |
- name: Use Node.js ${{ env.DEFAULT_NODE_VERSION }} | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ env.DEFAULT_NODE_VERSION }} | |
- name: Load dependency cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
**/node_modules | |
key: ${{ runner.os }}-modules-${{ hashFiles('yarn.lock') }} | |
- name: Install dependencies and build monorepo | |
run: yarn install --frozen-lockfile --ignore-engines | |
- name: Run benchmarks | |
run: cd performance/benchmark-${{ matrix.benchmark }}/ && yarn run performance:ci | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: performance-benchmark-${{ matrix.benchmark }} | |
path: performance/benchmark-${{ matrix.benchmark }}/combinations/combination_0/output/ | |
- name: Print raw output | |
run: cat performance/benchmark-${{ matrix.benchmark }}/combinations/combination_0/output/query-times.csv | |
performance-consolidate: | |
name: Performance analysis | |
needs: | |
- misc | |
- test | |
- systemtest | |
- browsertest | |
- performance | |
runs-on: ubuntu-latest | |
steps: | |
- name: Ensure line endings are consistent | |
run: git config --global core.autocrlf input | |
- name: Check out repository | |
uses: actions/checkout@v4 | |
- name: Use Node.js ${{ env.DEFAULT_NODE_VERSION }} | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ env.DEFAULT_NODE_VERSION }} | |
- uses: actions/download-artifact@v4 | |
with: | |
name: performance-benchmark-solidbench | |
path: performance/benchmark-solidbench/combinations/combination_0/output/ | |
- name: Process benchmark detailed results | |
run: npx -p @rubensworks/process-sparql-benchmark-results psbr csv ghbench performance/benchmark-solidbench/combinations/combination_0/output/ --overrideCombinationLabels SolidBench --total false --detailed true --name ghbench-detail.json | |
- name: Process benchmark total results | |
run: npx -p @rubensworks/process-sparql-benchmark-results psbr csv ghbench performance/benchmark-solidbench/combinations/combination_0/output/ --overrideCombinationLabels SolidBench --total true --detailed false --name ghbench-total.json | |
- name: Determine benchmark detailed results target directory name | |
run: echo "BENCHMARK_DATA_DIR_PATH_DETAIL=comunica-feature-link-traversal/${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}/benchmarks-detail" >> $GITHUB_ENV | |
- name: Determine benchmarks total results target directory name | |
run: echo "BENCHMARK_DATA_DIR_PATH_TOTAL=comunica-feature-link-traversal/${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}/benchmarks-total" >> $GITHUB_ENV | |
- name: Finalize benchmarks detailed results | |
uses: benchmark-action/github-action-benchmark@v1 | |
with: | |
name: Benchmarks detailed results | |
tool: 'customSmallerIsBetter' | |
output-file-path: ghbench-detail.json | |
github-token: ${{ secrets.PAT }} | |
auto-push: true | |
alert-comment-cc-users: '@rubensworks' | |
gh-repository: 'github.com/comunica/comunica-performance-results' | |
gh-pages-branch: 'master' | |
benchmark-data-dir-path: ${{ env.BENCHMARK_DATA_DIR_PATH_DETAIL }} | |
- name: Cleanup benchmark-action data | |
run: rm -rf ./benchmark-data-repository | |
- name: Finalize benchmarks total results | |
uses: benchmark-action/github-action-benchmark@v1 | |
with: | |
name: Benchmarks total results | |
tool: 'customSmallerIsBetter' | |
output-file-path: ghbench-total.json | |
github-token: ${{ secrets.PAT }} | |
auto-push: true | |
alert-threshold: '150%' | |
comment-always: true | |
comment-on-alert: true | |
alert-comment-cc-users: '@rubensworks' | |
summary-always: true | |
gh-repository: 'github.com/comunica/comunica-performance-results' | |
gh-pages-branch: 'master' | |
benchmark-data-dir-path: ${{ env.BENCHMARK_DATA_DIR_PATH_TOTAL }} | |
- name: Prepare comment on commit with link to performance results | |
run: echo -e "Performance benchmarks succeeded! 🚀\n\n\[[Summarized results](https://comunica.github.io/comunica-performance-results/comunica-feature-link-traversal/${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}/benchmarks-total/)\] \[[Detailed results](https://comunica.github.io/comunica-performance-results/comunica-feature-link-traversal/${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}/benchmarks-detail/)\]" > ./commit-comment-body.txt | |
- name: Comment on commit with link to performance results | |
uses: peter-evans/commit-comment@v3 | |
with: | |
body-path: ./commit-comment-body.txt | |
documentation: | |
name: Prepare documentation | |
runs-on: ubuntu-latest | |
steps: | |
- name: Ensure line endings are consistent | |
run: git config --global core.autocrlf input | |
- name: Check out repository | |
uses: actions/checkout@v4 | |
- name: Use Node.js ${{ env.DEFAULT_NODE_VERSION }} | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ env.DEFAULT_NODE_VERSION }} | |
- name: Load dependency cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
**/node_modules | |
key: ${{ runner.os }}-modules-${{ hashFiles('yarn.lock') }} | |
- name: Install dependencies | |
run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts | |
- name: Build documentation | |
run: yarn run doc | |
- name: Prepare artifact | |
uses: actions/upload-pages-artifact@v3 | |
with: | |
path: documentation | |
name: documentation | |
documentation-publish: | |
name: Publish documentation | |
needs: | |
- misc | |
- test | |
- systemtest | |
- browsertest | |
- documentation | |
runs-on: ubuntu-latest | |
# The documentation is only published for master branch | |
if: startsWith(github.ref, 'refs/heads/master') | |
permissions: | |
pages: write | |
id-token: write | |
environment: | |
name: github-pages | |
url: ${{ steps.deployment.outputs.page_url }} | |
steps: | |
- name: Deploy to GitHub Pages | |
id: deployment | |
uses: actions/deploy-pages@v4 | |
with: | |
artifact_name: documentation | |
webclients: | |
name: Web clients | |
needs: | |
- misc | |
- test | |
- systemtest | |
- browsertest | |
runs-on: ubuntu-latest | |
steps: | |
- name: Ensure line endings are consistent | |
run: git config --global core.autocrlf input | |
- name: Check out repository | |
uses: actions/checkout@v4 | |
- name: Use Node.js ${{ matrix.node-version }} | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node-version }} | |
- name: Load dependency cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
**/node_modules | |
key: ${{ runner.os }}-modules-${{ hashFiles('yarn.lock') }} | |
- name: Install dependencies and build | |
run: yarn install --frozen-lockfile --ignore-engines | |
- name: Build web clients | |
run: ./web-clients/build-web-clients.sh | |
- name: Deploy web clients | |
if: startsWith(github.ref, 'refs/heads/master') | |
run: ./web-clients/deploy-web-clients.sh | |
env: | |
GH_TOKEN: ${{ secrets.PAT }} |