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
52 changes: 52 additions & 0 deletions .github/workflows/tailscale-connect-reusable.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# SPDX-License-Identifier: MPL-2.0
# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
#
# tailscale-connect-reusable.yml — shared "join the tailnet" step for CI jobs that
# must reach private endpoints (internal servers, staging DBs, self-hosted
# registries) from a GitHub-hosted runner.
#
# Tailscale has no GitHub App; its GitHub integration is this Action plus a
# Tailscale OAuth client. The two secrets below must exist on the repo, org or
# environment that calls this workflow:
# TS_OAUTH_CLIENT_ID, TS_OAUTH_SECRET (Tailscale admin -> OAuth clients, scope auth_keys)
#
# Callers opt in per job; nothing here changes CI unless a workflow calls it.
name: Tailscale connect (reusable)

on:
workflow_call:
inputs:
tags:
description: 'Tailscale tags to apply to the ephemeral CI node'
required: false
type: string
default: 'tag:ci'
ping:
description: 'Comma-separated tailnet hosts to ping for readiness'
required: false
type: string
default: ''
version:
description: 'Tailscale client version pin (empty = action default)'
required: false
type: string
default: ''

permissions:
contents: read

jobs:
connect:
name: Join tailnet
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
# Pinned per estate policy (SHA pins everywhere); refresh with actions-lock.
- name: Connect to Tailscale
uses: tailscale/github-action@v4

Check failure on line 46 in .github/workflows/tailscale-connect-reusable.yml

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use full commit SHA hash for this dependency.

See more on https://sonarcloud.io/project/issues?id=hyperpolymath_standards&issues=AaDA6VwA1GRd1-oe9pTL&open=AaDA6VwA1GRd1-oe9pTL&pullRequest=870
with:
oauth-client-id: ${{ secrets.TS_OAUTH_CLIENT_ID }}
oauth-secret: ${{ secrets.TS_OAUTH_SECRET }}
tags: ${{ inputs.tags }}
version: ${{ inputs.version }}
ping: ${{ inputs.ping }}
3 changes: 2 additions & 1 deletion config/settings/actions-allowlist.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"github_owned_allowed": true,
"verified_allowed": true,
"patterns_allowed": [
"tailscale/github-action@*",
"8398a7/action-slack@*",
"actions-rust-lang/setup-rust-toolchain@*",
"ad-m/github-push-action@*",
Expand Down Expand Up @@ -121,5 +122,5 @@
"trufflesecurity/trufflehog@*",
"webfactory/ssh-agent@*"
],
"enforcement_note": "verified_allowed is TRUE, so Marketplace-verified creators (Snyk, Codecov, SonarSource, Semgrep, ...) run whether or not they appear in patterns_allowed. The 118→92 prune is therefore HYGIENE: R1 is enforced by deleting the workflows in the sweep, not by this list. Flipping verified_allowed to false is a separate decision (O12) taken only after a uses: census proves every verified-creator action still in use is on patterns_allowed."
"enforcement_note": "[2026-09-20 sweep] Workflow-side Codecov/Snyk references are now deleted across both estates, so the prune recorded above is safe to apply. Caveat unchanged: verified_allowed is TRUE, so Marketplace-verified creators (Snyk, Codecov, SonarSource, Semgrep, ...) run whether or not they appear in patterns_allowed. The 118→92 prune is therefore HYGIENE: R1 is enforced by deleting the workflows in the sweep, not by this list. Flipping verified_allowed to false is a separate decision (O12) taken only after a uses: census proves every verified-creator action still in use is on patterns_allowed."
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"github_owned_allowed": true,
"verified_allowed": true,
"patterns_allowed": [
"tailscale/github-action@*",
"8398a7/action-slack@*",
"actions-rust-lang/setup-rust-toolchain@*",
"ad-m/github-push-action@*",
Expand All @@ -18,7 +19,6 @@
"Bogdanp/setup-racket@*",
"cachix/install-nix-action@*",
"cbrgm/cleanup-stale-branches-action@*",
"codecov/codecov-action@*",
"cometkim/rclone-actions@*",
"DavidAnson/markdownlint-cli2-action@*",
"dawidd6/action-download-artifact@*",
Expand Down Expand Up @@ -83,7 +83,6 @@
"rustsec/audit-check@*",
"shivammathur/setup-php@*",
"slsa-framework/slsa-github-generator@*",
"snyk/actions@*",
"softprops/action-gh-release@*",
"SonarSource/sonarcloud-github-action@*",
"SonarSource/sonarqube-scan-action@*",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,5 +58,3 @@ jobs:
run: cargo install cargo-tarpaulin
- name: Generate coverage
run: cargo tarpaulin --out Xml
- name: Upload coverage
uses: codecov/codecov-action@v3
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,3 @@ jobs:
run: cargo install cargo-tarpaulin
- name: Generate coverage
run: cargo tarpaulin --out Xml
- uses: codecov/codecov-action@v5
with:
files: cobertura.xml
Loading