Skip to content

ODK Web Forms CI

ODK Web Forms CI #41

Workflow file for this run

name: 'ci'
run-name: 'ODK Web Forms CI'
on:
workflow_dispatch:
push:
merge_group:
pull_request:
paths-ignore:
- ".vscode/**"
- "**/*.md"
- ".github/ISSUE_TEMPLATE/**"
# Automatically cancel older in-progress jobs on the same branch
concurrency:
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request_target' && github.head_ref || github.ref }}
cancel-in-progress: true
defaults:
run:
shell: bash
env:
TZ: 'America/Phoenix'
jobs:
changes:
runs-on: 'ubuntu-latest'
outputs:
root: ${{ steps.changes.outputs.root }}
odk-web-forms: ${{ steps.changes.outputs.odk-web-forms }}
odk-xpath: ${{ steps.changes.outputs.odk-xpath }}
tree-sitter-xpath: ${{ steps.changes.outputs.tree-sitter-xpath }}
steps:
- uses: 'actions/checkout@v3'
- uses: dorny/paths-filter@v2
id: changes
with:
filters: |
root:
- '*'
- '.github/workflows/*'
odk-web-forms:
- 'packages/odk-web-forms/**'
odk-xpath:
- 'packages/odk-xpath/**'
tree-sitter-xpath:
- 'packages/tree-sitter-xpath/grammar.ts'
- 'packages/tree-sitter-xpath/scripts/**'
- 'packages/tree-sitter-xpath/test/**'
# So the `paths-filter` action doesn't attempt to use the GitHub API
# when run on pull requests
token: ''
install-and-build:
runs-on: 'ubuntu-latest'
strategy:
matrix:
node-version: ['18.18.1', '20.8.0']
steps:
- uses: 'actions/checkout@v3'
- uses: 'volta-cli/action@v4'
with:
node-version: '${{ matrix.node-version }}'
yarn-version: '1.22.19'
- uses: 'actions/cache@v3'
id: cache-install
with:
path: |
node_modules
**/node_modules
key: install-${{ matrix.node-version }}-${{ hashFiles('yarn.lock', 'examples/*/yarn.lock', 'packages/*/yarn.lock') }}
- uses: 'actions/cache@v3'
id: cache-build
with:
# Note: the tree-sitter-xpath .js and .wasm paths are standard for
# tree-sitter's build output. They also litter a bunch of other files
# in various build phases, several under `src` (which is why the
# grammar's TypeScript source is not there).
path: |
examples/*/dist
packages/*/dist
packages/tree-sitter-xpath/grammar.js
packages/tree-sitter-xpath/src/grammar.json
packages/tree-sitter-xpath/src/parser.c
packages/tree-sitter-xpath/src/tree_sitter/parser.h
packages/tree-sitter-xpath/tree-sitter-xpath.wasm
packages/tree-sitter-xpath/types
key: build-${{ matrix.node-version }}-${{ github.sha }}
# `@odk/xpath` tests (currently) expect this time zone
- uses: szenius/[email protected]
with:
timezoneLinux: ${{ env.TZ }}
timezoneMacos: ${{ env.TZ }}
timezoneWindows: ${{ env.TZ }}
- run: 'yarn install --frozen-lockfile'
- run: 'yarn build --force'
lint:
needs: ['install-and-build', 'changes']
runs-on: 'ubuntu-latest'
strategy:
matrix:
node-version: ['20.8.0']
steps:
- uses: 'actions/checkout@v3'
- uses: 'volta-cli/action@v4'
with:
node-version: '${{ matrix.node-version }}'
yarn-version: '1.22.19'
- uses: 'actions/cache@v3'
id: cache-install
with:
path: |
node_modules
**/node_modules
key: install-${{ matrix.node-version }}-${{ hashFiles('yarn.lock', 'examples/*/yarn.lock', 'packages/*/yarn.lock') }}
fail-on-cache-miss: true
- uses: 'actions/cache@v3'
id: cache-build
with:
path: |
examples/*/dist
packages/*/dist
packages/tree-sitter-xpath/grammar.js
packages/tree-sitter-xpath/src/grammar.json
packages/tree-sitter-xpath/src/parser.c
packages/tree-sitter-xpath/src/tree_sitter/parser.h
packages/tree-sitter-xpath/tree-sitter-xpath.wasm
packages/tree-sitter-xpath/types
key: build-${{ matrix.node-version }}-${{ github.sha }}
fail-on-cache-miss: true
- run: 'yarn lint'
test-odk-web-forms:
needs: ['install-and-build', 'changes']
if: needs.changes.outputs.root == 'true' || needs.changes.outputs.odk-web-forms == 'true'
runs-on: 'ubuntu-latest'
strategy:
matrix:
node-version: ['18.18.1', '20.8.0']
steps:
- uses: 'actions/checkout@v3'
- uses: 'volta-cli/action@v4'
with:
node-version: '${{ matrix.node-version }}'
yarn-version: '1.22.19'
- uses: 'actions/cache@v3'
id: cache-install
with:
path: |
node_modules
**/node_modules
key: install-${{ matrix.node-version }}-${{ hashFiles('yarn.lock', 'examples/*/yarn.lock', 'packages/*/yarn.lock') }}
fail-on-cache-miss: true
- uses: 'actions/cache@v3'
id: cache-build
with:
path: |
examples/*/dist
packages/*/dist
packages/tree-sitter-xpath/grammar.js
packages/tree-sitter-xpath/src/grammar.json
packages/tree-sitter-xpath/src/parser.c
packages/tree-sitter-xpath/src/tree_sitter/parser.h
packages/tree-sitter-xpath/tree-sitter-xpath.wasm
packages/tree-sitter-xpath/types
key: build-${{ matrix.node-version }}-${{ github.sha }}
fail-on-cache-miss: true
- run: 'yarn workspace @odk/web-forms test'
test-odk-xpath:
needs: ['install-and-build', 'changes']
if: needs.changes.outputs.root == 'true' || needs.changes.outputs.tree-sitter-xpath == 'true' || needs.changes.outputs.odk-xpath == 'true'
runs-on: 'ubuntu-latest'
strategy:
matrix:
node-version: ['18.18.1', '20.8.0']
steps:
- uses: 'actions/checkout@v3'
- uses: 'volta-cli/action@v4'
with:
node-version: '${{ matrix.node-version }}'
yarn-version: '1.22.19'
- uses: 'actions/cache@v3'
id: cache-install
with:
path: |
node_modules
**/node_modules
key: install-${{ matrix.node-version }}-${{ hashFiles('yarn.lock', 'examples/*/yarn.lock', 'packages/*/yarn.lock') }}
fail-on-cache-miss: true
- uses: 'actions/cache@v3'
id: cache-build
with:
path: |
examples/*/dist
packages/*/dist
packages/tree-sitter-xpath/grammar.js
packages/tree-sitter-xpath/src/grammar.json
packages/tree-sitter-xpath/src/parser.c
packages/tree-sitter-xpath/src/tree_sitter/parser.h
packages/tree-sitter-xpath/tree-sitter-xpath.wasm
packages/tree-sitter-xpath/types
key: build-${{ matrix.node-version }}-${{ github.sha }}
fail-on-cache-miss: true
- uses: szenius/[email protected]
with:
timezoneLinux: ${{ env.TZ }}
timezoneMacos: ${{ env.TZ }}
timezoneWindows: ${{ env.TZ }}
- run: 'yarn playwright install chromium firefox webkit && yarn playwright install-deps'
# TODO: Browser/Node matrix
- run: 'yarn workspace @odk/xpath test'
test-tree-sitter-xpath:
needs: ['install-and-build', 'changes']
if: needs.changes.outputs.root == 'true' || needs.changes.outputs.tree-sitter-xpath == 'true'
runs-on: 'ubuntu-latest'
strategy:
matrix:
node-version: ['18.18.1', '20.8.0']
steps:
- uses: 'actions/checkout@v3'
- uses: 'volta-cli/action@v4'
with:
node-version: '${{ matrix.node-version }}'
yarn-version: '1.22.19'
- uses: 'actions/cache@v3'
id: cache-install
with:
path: |
node_modules
**/node_modules
key: install-${{ matrix.node-version }}-${{ hashFiles('yarn.lock', 'examples/*/yarn.lock', 'packages/*/yarn.lock') }}
fail-on-cache-miss: true
- uses: 'actions/cache@v3'
id: cache-build
with:
path: |
examples/*/dist
packages/*/dist
packages/tree-sitter-xpath/grammar.js
packages/tree-sitter-xpath/src/grammar.json
packages/tree-sitter-xpath/src/parser.c
packages/tree-sitter-xpath/src/tree_sitter/parser.h
packages/tree-sitter-xpath/tree-sitter-xpath.wasm
packages/tree-sitter-xpath/types
key: build-${{ matrix.node-version }}-${{ github.sha }}
fail-on-cache-miss: true
- run: 'yarn workspace tree-sitter-xpath test'