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
10 changes: 10 additions & 0 deletions .github/actionlint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# actionlint config
#
# Whitelist self-hosted runner labels used by the org's runners.
# Without this, actionlint reports "label 'oracle' is unknown" — a
# false positive for our `[self-hosted, linux, arm64, oracle]`
# runner pool. The other labels (self-hosted, linux, arm64) are
# already known to actionlint.
self-hosted-runner:
labels:
- oracle
53 changes: 53 additions & 0 deletions .github/workflows/actionlint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: actionlint
#
# Lints all workflow files in this repo on every PR + push to main.
#
# Why: today's marketplace-publish.yml had an `${{ }}` literal inside
# a shell `#` comment that GitHub Actions evaluated as an empty
# expression, failing the workflow at load-time with
# `referenced_workflows: []` — a frustrating "0 jobs ran" failure
# mode that took 4 canary attempts to diagnose. `actionlint`'s
# expression parser catches this class of bug at PR review time
# instead of post-merge tag-push.
#
# Coverage: `marketplace-publish.yml`, `plugin-ci.yml`,
# `validate-plugin-manifest.yml` (the three reusable workflows this
# repo owns) plus this `actionlint.yml` itself — actionlint
# auto-discovers all `.github/workflows/*.yml` from the repo root.
#
# Self-hosted runner labels (`oracle`, ...) are whitelisted
# in `.github/actionlint.yaml` so the linter doesn't flag them as
# unknown.

on:
pull_request:
push:
branches: [main]

permissions:
contents: read

jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Install actionlint
# Use the upstream installer script (rhysd/actionlint owner-
# maintained) rather than a third-party wrapper action — keeps
# the supply chain to one source of truth + a known-version
# binary. Both the script ref AND the binary version are
# pinned to v1.7.12 — `main` would let upstream silently
# rewrite the installer between runs.
run: |
curl -sL https://raw.githubusercontent.com/rhysd/actionlint/v1.7.12/scripts/download-actionlint.bash \
| bash -s -- 1.7.12
./actionlint -version

- name: Run actionlint
# `-no-color` for cleaner CI logs (actionlint's flag is
# boolean-style, not `-color=never`).
# actionlint auto-discovers `.github/actionlint.yaml` for
# self-hosted runner label whitelisting.
run: ./actionlint -no-color
4 changes: 4 additions & 0 deletions .github/workflows/marketplace-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,10 @@ jobs:
# protection — see "tag commit reachable from origin/main"
# step above.
run: |
# shellcheck disable=SC2016
# SC2016 false positive — `$` inside the single-quoted
# `node -e '...'` body is JS regex anchor (`/.../`) and
# `process.env.X` access, not shell variable interpolation.
node -e '
const fs = require("node:fs");
const path = require("node:path");
Expand Down
Loading