mirror of
https://github.com/supabase/supabase.git
synced 2026-10-05 09:25:06 +03:00
Workflow for external lints still not working quite right. 1. The lint workflow should fail if linting fails, to block merge. Right now the exit status of the linter is ignored; added a step to fix that. 2. The workflow_run event is not triggered by completion of the first workflow. Couldn't find an obvious problem with the two, but saw online that some people had problems with a quoted workflow name, so tried renaming the workflows to avoid having to quote the names.
108 lines
4.1 KiB
YAML
108 lines
4.1 KiB
YAML
name: docs_lint
|
|
|
|
# Runs the docs linter on PRs that edit docs content.
|
|
# There are two branches of this workflow for internal and external PRs, due
|
|
# to the security design of GitHub Actions.
|
|
#
|
|
# Internal PRs:
|
|
# Have write permissions, so comments are written directly by reviewdog.
|
|
#
|
|
# External PRs:
|
|
# Have read-only permissions, so lint results are uploaded as an artifact, to
|
|
# be written to the PR in a subsequent workflow_run action that has write
|
|
# permissions. See ./docs/lint-v2-comment.yml.
|
|
#
|
|
# See https://securitylab.github.com/resources/github-actions-preventing-pwn-requests/
|
|
|
|
on:
|
|
pull_request:
|
|
|
|
env:
|
|
CARGO_NET_GIT_FETCH_WITH_CLI: true
|
|
|
|
permissions:
|
|
pull-requests: write
|
|
|
|
jobs:
|
|
supa-mdx-lint:
|
|
name: supa-mdx-lint
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
sparse-checkout: |
|
|
supa-mdx-lint.config.toml
|
|
supa-mdx-lint
|
|
apps/docs/content
|
|
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 #v3.0.2
|
|
id: filter
|
|
with:
|
|
filters: |
|
|
docs:
|
|
- 'apps/docs/content/**'
|
|
- 'supa-mdx-lint/**'
|
|
- 'supa-mdx-lint.config.toml'
|
|
- name: cache cargo
|
|
id: cache-cargo
|
|
if: steps.filter.outputs.docs == 'true'
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
~/.cargo/bin/
|
|
~/.cargo/registry/index/
|
|
~/.cargo/registry/cache/
|
|
~/.cargo/git/db/
|
|
key: b848086c298be920a40aa9b26c65c7575ae8deca
|
|
- name: install linter
|
|
if: steps.filter.outputs.docs == 'true' && steps.cache-cargo.outputs.cache-hit != 'true'
|
|
run: cargo install --locked --git https://github.com/supabase-community/supa-mdx-lint --rev b848086c298be920a40aa9b26c65c7575ae8deca
|
|
- name: install reviewdog
|
|
if: steps.filter.outputs.docs == 'true'
|
|
uses: reviewdog/action-setup@3f401fe1d58fe77e10d665ab713057375e39b887 # v1.3.0
|
|
with:
|
|
reviewdog_version: v0.20.2
|
|
- name: run linter (internal)
|
|
if: steps.filter.outputs.docs == 'true' && github.event.pull_request.head.repo.full_name == github.repository
|
|
env:
|
|
BASE_REF: ${{ github.base_ref }}
|
|
REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
set -o pipefail
|
|
git diff --name-only "origin/$BASE_REF" HEAD \
|
|
| { grep -E "^apps/docs/content/" || test $? = 1; } \
|
|
| xargs -r supa-mdx-lint --format rdf \
|
|
| reviewdog -f=rdjsonl -reporter=github-pr-review -tee
|
|
- id: external_lint
|
|
name: run linter (external)
|
|
if: steps.filter.outputs.docs == 'true' && github.event.pull_request.head.repo.full_name != github.repository
|
|
env:
|
|
BASE_REF: ${{ github.base_ref }}
|
|
PR_NUMBER: ${{ github.event.pull_request.number }}
|
|
run: |
|
|
set -o pipefail
|
|
run_lints() {
|
|
git diff --name-only "origin/$BASE_REF" HEAD \
|
|
| { grep -E "^apps/docs/content/" || test $? = 1; } \
|
|
| xargs -rx -n 1000000000 supa-mdx-lint --format markdown
|
|
}
|
|
set +e
|
|
LINT_RESULTS=$(run_lints)
|
|
LINT_EXIT_CODE=$?
|
|
set -e
|
|
echo "LINT_EXIT_CODE=$LINT_EXIT_CODE" >> $GITHUB_OUTPUT
|
|
if [[ $LINT_EXIT_CODE -ne 0 ]]; then
|
|
mkdir -p ./__github_actions__pr
|
|
echo "${{ github.event.number }}" > ./__github_actions__pr/pr_number.txt
|
|
echo "$LINT_RESULTS" > ./__github_actions__pr/lint_results.txt
|
|
fi
|
|
- name: save results as artifact (external)
|
|
if: steps.filter.outputs.docs == 'true' && github.event.pull_request.head.repo.full_name != github.repository && steps.external_lint.outputs.LINT_EXIT_CODE != 0
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: lint_results
|
|
path: __github_actions__pr/
|
|
- name: fail if linter fails (external)
|
|
if: steps.filter.outputs.docs == 'true' && github.event.pull_request.head.repo.full_name != github.repository && steps.external_lint.outputs.LINT_EXIT_CODE != 0
|
|
run: exit 1
|