Skip to content
Open
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
8 changes: 6 additions & 2 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@
# that have read access to the repository, otherwise the rule is ignored.
# - Multiple owners can be listed, separated by spaces.
#
# Recommended Branch Protection (Settings -> Branches -> Add rule):
# Recommended ruleset (Settings -> Rules -> Rulesets):
# - Require a pull request before merging
# - Require review from Code Owners
# - Require status checks to pass (select `build` and `lint` jobs from CI)
# - Require the stable checks documented in docs/guide/ci-maintenance.md

# Global fallback: every file is owned by the maintainers by default.
* @hittyt @libinfs
Expand All @@ -22,6 +22,10 @@

# CI / release configuration.
/.github/ @hittyt @libinfs
/.github/workflows/ @hittyt @libinfs
/.github/dependabot.yml @hittyt @libinfs
/action.yml @hittyt @libinfs
/action/ @hittyt @libinfs
/Makefile @hittyt @libinfs
/.goreleaser.yaml @hittyt @libinfs

Expand Down
5 changes: 5 additions & 0 deletions .github/actionlint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Custom labels provisioned on the repository's self-hosted runners.
self-hosted-runner:
labels:
- docker
- trusted
39 changes: 39 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ updates:
schedule:
interval: "weekly"
day: "monday"
# Delay newly published versions long enough for early regressions or
# compromised releases to be detected. Security updates are unaffected.
cooldown:
default-days: 7
open-pull-requests-limit: 5
labels:
- "dependencies"
Expand All @@ -18,6 +22,8 @@ updates:
schedule:
interval: "weekly"
day: "monday"
cooldown:
default-days: 7
open-pull-requests-limit: 1
groups:
github-actions:
Expand All @@ -28,3 +34,36 @@ updates:
- "ci"
commit-message:
prefix: "ci"

# Documentation toolchain dependencies.
- package-ecosystem: "npm"
Comment thread
github-advanced-security[bot] marked this conversation as resolved.
Fixed
directory: "/"
schedule:
interval: "weekly"
day: "monday"
cooldown:
default-days: 7
open-pull-requests-limit: 3
groups:
documentation:
patterns:
- "*"
labels:
- "dependencies"
commit-message:
prefix: "chore"

# Runner image base images and Dockerfile dependencies.
- package-ecosystem: "docker"
Comment thread
github-advanced-security[bot] marked this conversation as resolved.
Fixed
directory: "/action"
schedule:
interval: "weekly"
day: "monday"
cooldown:
default-days: 7
open-pull-requests-limit: 2
labels:
- "dependencies"
- "ci"
commit-message:
prefix: "ci"
53 changes: 38 additions & 15 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,25 +13,34 @@ on:
- 'docs/**'
- '*.md'
- '.github/workflows/docs.yml'
# Required checks must also run for commits synthesized by Merge Queue.
merge_group:

# Keep the default gate small and cancel superseded work on both PRs and main.
# Keep the default gate small and cancel only superseded pull-request work.
# Expensive engine, sandbox, Windows and release checks live in extended-ci.yml.
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

permissions:
contents: read
permissions: {}

jobs:
build:
name: Build & Test
runs-on: self-hosted
# Pull requests can contain untrusted code. Use an ephemeral GitHub-hosted
# runner instead of a persistent self-hosted machine.
runs-on: ubuntu-24.04
timeout-minutes: 10
permissions:
contents: read
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Checkout source
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false

- uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
- name: Set up Go
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
with:
go-version: "1.25.x"
cache: true
Expand All @@ -47,6 +56,7 @@ jobs:

- name: Report coverage
run: |
set -euo pipefail
pct=$(go tool cover -func=coverage.out | awk '/^total:/ {gsub("%","",$3); print $3}')
if [ -z "$pct" ]; then
echo "could not parse total coverage" >&2
Expand All @@ -56,12 +66,18 @@ jobs:

e2e-smoke:
name: E2E Smoke
runs-on: self-hosted
runs-on: ubuntu-24.04
timeout-minutes: 15
permissions:
contents: read
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Checkout source
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false

- uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
- name: Set up Go
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
with:
go-version: "1.25.x"
cache: true
Expand All @@ -82,32 +98,39 @@ jobs:

lint:
name: Lint
runs-on: self-hosted
runs-on: ubuntu-24.04
timeout-minutes: 10
permissions:
contents: read
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Checkout source
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false

- uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
- name: Set up Go
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
with:
go-version: "1.25.x"
cache: true

- name: Check formatting
run: |
set -euo pipefail
files=$(gofmt -l .)
if [ -n "$files" ]; then
echo "Following files are not formatted:"
echo "$files"
exit 1
fi

- name: golangci-lint
- name: Run golangci-lint
uses: golangci/golangci-lint-action@ba0d7d2ec06a0ea1cb5fa41b2e4a3ab91d21278a # v9
with:
version: v2.11.4

- name: Install revive
run: go install github.com/mgechev/revive@v1.10.0

- name: revive
- name: Run revive
run: revive -config revive.toml ./...
27 changes: 15 additions & 12 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,12 @@ on:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
merge_group:
schedule:
- cron: '27 3 * * 6'

permissions: {}

jobs:
analyze:
name: Analyze (${{ matrix.language }})
Expand All @@ -27,16 +30,12 @@ jobs:
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners (GitHub.com only)
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
runs-on: self-hosted
# This workflow executes pull-request code during autobuild. Keep it off
# persistent self-hosted runners.
runs-on: ubuntu-24.04
timeout-minutes: 45
permissions:
# required for all workflows
security-events: write

# required to fetch internal or private CodeQL packs
packages: read

# only required for workflows in private repositories
actions: read
contents: read

strategy:
Expand All @@ -59,7 +58,9 @@ jobs:
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
steps:
- name: Checkout repository
uses: actions/checkout@v7
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false

# Add any setup steps before running the `github/codeql-action/init` action.
# This includes steps like installing compilers or runtimes (`actions/setup-node`
Expand All @@ -68,16 +69,17 @@ jobs:
# uses: actions/setup-example@v1
- name: Set up Python
if: matrix.language == 'python'
uses: actions/setup-python@v6
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
with:
python-version: '3.12'

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
uses: github/codeql-action/init@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
queries: security-extended
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
Expand All @@ -95,6 +97,7 @@ jobs:
if: matrix.build-mode == 'manual'
shell: bash
run: |
set -euo pipefail
echo 'If you are using a "manual" build mode for one or more of the' \
'languages you are analyzing, replace this with the commands to build' \
'your code, for example:'
Expand All @@ -103,6 +106,6 @@ jobs:
exit 1

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4
uses: github/codeql-action/analyze@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
with:
category: "/language:${{matrix.language}}"
49 changes: 33 additions & 16 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,30 +10,40 @@ on:
- 'package.json'
- 'package-lock.json'
- '.github/workflows/docs.yml'
pull_request:
branches: [main]
paths:
- 'docs/**'
- 'package.json'
- 'package-lock.json'
- '.github/workflows/docs.yml'
workflow_dispatch:

# Required for GitHub Pages deployment via actions/deploy-pages.
permissions:
contents: read
pages: write
id-token: write
# Jobs opt into only the permissions they need.
permissions: {}

# Allow only one concurrent deployment, but do not cancel in-progress runs.
concurrency:
group: pages
cancel-in-progress: false
group: docs-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
build:
runs-on: self-hosted
name: Build
# Documentation dependencies and build scripts are pull-request code.
runs-on: ubuntu-24.04
timeout-minutes: 15
permissions:
contents: read
Comment thread
roark47 marked this conversation as resolved.
steps:
- name: Checkout
- name: Checkout source
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 0
persist-credentials: false

- name: Setup Node
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
- name: Set up Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: '20'
cache: 'npm'
Expand All @@ -44,21 +54,28 @@ jobs:
- name: Build VitePress site
run: npm run docs:build

- name: Setup Pages
uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6

- name: Upload artifact
- name: Upload GitHub Pages artifact
if: github.event_name != 'pull_request'
uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5
with:
path: docs/.vitepress/dist

deploy:
name: Deploy
if: github.event_name != 'pull_request'
needs: build
runs-on: self-hosted
runs-on: ubuntu-24.04
timeout-minutes: 10
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Configure GitHub Pages
uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6

- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5
Loading
Loading