Repository navigation
fix(linux): make the Confirm Before Deleting Rows switch take effect #2167
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Repo Hygiene | |
| # Checks that need no Mac: workflows, shell, release tooling and repo invariants. Ubuntu minutes are | |
| # free on a public repo, so it runs on every pull request and needs no change filter. | |
| on: | |
| pull_request: | |
| push: | |
| branches: [main] | |
| workflow_dispatch: | |
| concurrency: | |
| group: repo-hygiene-${{ github.event_name == 'pull_request' && github.ref || github.sha }} | |
| cancel-in-progress: ${{ github.event_name == 'pull_request' }} | |
| permissions: | |
| contents: read | |
| jobs: | |
| hygiene: | |
| name: Repo Hygiene | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| fetch-depth: 0 | |
| - name: Install shellcheck, PyYAML and actionlint | |
| run: | | |
| sudo apt-get update -qq | |
| sudo apt-get install -y -qq shellcheck python3-yaml | |
| bash <(curl -sSL https://raw.githubusercontent.com/rhysd/actionlint/v1.7.12/scripts/download-actionlint.bash) 1.7.12 | |
| # actionlint runs shellcheck over every inline run: block, which nothing else sees. | |
| - name: Lint workflows | |
| run: ./actionlint -color | |
| - name: Lint scripts | |
| run: | | |
| set -euo pipefail | |
| mapfile -t SCRIPTS < <(find scripts .claude/skills -name '*.sh' | sort) | |
| shellcheck --severity=warning "${SCRIPTS[@]}" | |
| # update-registry's tests are plain functions, which unittest discovery would skip. | |
| - name: Test the CI and release tooling | |
| run: | | |
| set -euo pipefail | |
| python3 -m unittest discover -s scripts/ci -p 'test_*.py' | |
| python3 -m unittest discover -s scripts -p 'test_localization.py' | |
| python3 .github/scripts/test_update_registry.py | |
| bash scripts/ci/test_create_dmg_args.sh | |
| bash scripts/ci/test_draft_release.sh | |
| # shellcheck cannot tell a library function from a command, so a missing source is exit 127 | |
| # at release time (v0.67.1). | |
| - name: Check every script sources the libraries it calls into | |
| run: python3 scripts/ci/check-lib-sourcing.py | |
| - name: Check the plugin manifest against the plugin classes | |
| run: python3 scripts/ci/check-plugin-manifest.py | |
| - name: Check no build script hardcodes the deployment target | |
| run: bash scripts/ci/check-deployment-target.sh | |
| # iOS alone defaults to MainActor isolation, so a shared plugin file must state its own. | |
| - name: Check shared plugin sources are explicitly isolated for iOS | |
| run: python3 scripts/ci/check-ios-shared-isolation.py | |
| # A plugin's or package's String(localized:) resolves against the host app's bundle, so its | |
| # strings live in each app's catalog by hand. | |
| - name: Check plugin and package strings reach the string catalogs | |
| run: | | |
| set -euo pipefail | |
| python3 scripts/localization.py plugins | |
| python3 scripts/localization.py plugins --target ios | |
| # xcstringstool accepts a %lld retyped as %@ or a dropped argument, and String(format:) then | |
| # formats the wrong value at run time. | |
| - name: Check the string catalogs | |
| run: python3 scripts/ci/check-string-catalogs.py | |
| - name: Check the license inventory against what the build ships | |
| run: python3 scripts/ci/check-license-inventory.py | |
| - name: Check both apps pin the Production CloudKit environment | |
| run: python3 scripts/ci/check-entitlements.py | |
| - name: Check every test target is in its test plan | |
| run: python3 scripts/ci/check-test-plans.py | |
| - name: Check currentPluginKitVersion moved at most once since the last release | |
| run: python3 scripts/ci/check-pluginkit-bump-cadence.py --remote origin | |
| - name: Check the Sparkle version agrees everywhere | |
| run: python3 scripts/ci/check-sparkle-version.py | |
| - name: Check the shared-contract drift gates | |
| run: scripts/audit-refactor-health.sh --check | |
| - name: Check no hub grew past its recorded size | |
| run: python3 scripts/ci/check-hub-ratchet.py | |
| - name: Decide whether the SAP HANA helper changed | |
| id: native | |
| env: | |
| BASE: ${{ github.event.pull_request.base.sha || github.event.before }} | |
| run: | | |
| set -euo pipefail | |
| hana=$(scripts/ci/detect-changed-paths.sh --base "$BASE" hana) | |
| echo "hana=$hana" >> "$GITHUB_OUTPUT" | |
| - name: Set up Go | |
| if: steps.native.outputs.hana == 'true' | |
| uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 | |
| with: | |
| go-version-file: Native/HanaBridge/go.mod | |
| cache: false | |
| # The helper is pure Go, so Linux analyses it as well as the Mac that builds it. govulncheck | |
| # runs in build-plugin.yml, before a HANA plugin ships. | |
| - name: Check the SAP HANA helper | |
| if: steps.native.outputs.hana == 'true' | |
| working-directory: Native/HanaBridge | |
| run: | | |
| set -euo pipefail | |
| unformatted="$(gofmt -l .)" | |
| if [ -n "$unformatted" ]; then | |
| echo "::error::gofmt would rewrite: $unformatted" | |
| exit 1 | |
| fi | |
| go mod verify | |
| go mod tidy -diff | |
| GOOS=darwin go vet ./... | |
| # go tool would build staticcheck for GOOS too, and Linux cannot run a darwin binary. | |
| go build -modfile=tools.mod -o "$RUNNER_TEMP/staticcheck" honnef.co/go/tools/cmd/staticcheck | |
| GOOS=darwin "$RUNNER_TEMP/staticcheck" ./... |