Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 11 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,19 @@ on:
pull_request:
push:
branches: [main]
permissions:
contents: read
concurrency:
# Cancel superseded runs on PRs only; pushes to main always run to completion.
group: ci-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
app:
runs-on: ubuntu-latest
defaults: { run: { working-directory: app } }
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with: { node-version: 22, cache: npm, cache-dependency-path: app/package-lock.json }
- run: npm ci
- run: npm run lint
Expand All @@ -26,13 +32,13 @@ jobs:
runs-on: ubuntu-latest
defaults: { run: { working-directory: app } }
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with: { node-version: 22, cache: npm, cache-dependency-path: app/package-lock.json }
- run: npm ci
- run: npx playwright install --with-deps chromium
- run: npm run e2e
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: failure()
with:
name: playwright-report
Expand Down
13 changes: 7 additions & 6 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,27 @@ on:
branches: [main]
permissions:
contents: read
pages: write
id-token: write
concurrency: { group: pages, cancel-in-progress: true }
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with: { node-version: 22, cache: npm, cache-dependency-path: app/package-lock.json }
- run: npm ci
working-directory: app
- run: npm run build
working-directory: app
- uses: actions/upload-pages-artifact@v3
- uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
with: { path: app/dist }
deploy:
needs: build
runs-on: ubuntu-latest
permissions:
pages: write
id-token: write
environment: { name: github-pages, url: "${{ steps.deployment.outputs.page_url }}" }
steps:
- id: deployment
uses: actions/deploy-pages@v4
uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0
31 changes: 31 additions & 0 deletions .github/workflows/scorecard.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Scorecard
on:
push:
branches: [main]
schedule:
- cron: '30 3 * * 1' # weekly, Monday 03:30 UTC
branch_protection_rule:
permissions: read-all
jobs:
analysis:
runs-on: ubuntu-latest
permissions:
security-events: write # upload SARIF to code scanning
id-token: write # publish_results signed attestation
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3
with:
results_file: results.sarif
results_format: sarif
publish_results: true
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: scorecard-results
path: results.sarif
retention-days: 5
- uses: github/codeql-action/upload-sarif@7188fc363630916deb702c7fdcf4e481b751f97a # v4
with:
sarif_file: results.sarif
27 changes: 27 additions & 0 deletions .github/workflows/verify-mask.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Mask integrity
on:
pull_request:
paths:
- 'pipeline/**'
- 'app/public/data/**'
- '.github/workflows/verify-mask.yml'
push:
branches: [main]
paths:
- 'pipeline/**'
- 'app/public/data/**'
- '.github/workflows/verify-mask.yml'
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-latest
defaults: { run: { working-directory: pipeline } }
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
with: { python-version: '3.12' }
# Slim on purpose: verify_mask.py flood-fills the COMMITTED mask
# (app/public/data/mask.bin) — no rebuild, no geo stack.
- run: pip install numpy==2.5.1 scipy==1.18.0
- run: python verify_mask.py
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
[![CI](https://github.com/DocGerd/sail_command/actions/workflows/ci.yml/badge.svg)](https://github.com/DocGerd/sail_command/actions/workflows/ci.yml)
[![CodeQL](https://github.com/DocGerd/sail_command/actions/workflows/codeql.yml/badge.svg)](https://github.com/DocGerd/sail_command/actions/workflows/codeql.yml)
[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/DocGerd/sail_command/badge)](https://scorecard.dev/viewer/?uri=github.com/DocGerd/sail_command)

![SailCommand](docs/brand/banner.svg)

# SailCommand
Expand Down