A curated library of reusable GitHub Actions, workflows, and helpers maintained by Diogo Ribeiro (ESMAD — Instituto Politécnico do Porto). This repository stores a collection of reusable GitHub Actions, and the goal is to centralize workflows, composite actions, and utilities so they can be shared across multiple projects.
- Composite actions for Python, Java, Node.js, R, Gradle, security scanning, dependency governance, and environment setup stored in
.github/actions/
. - Reusable workflows covering CI for popular stacks, artifact publishing, infrastructure automation, security checks, and release orchestration in
.github/workflows/
. - Reference documentation for the most feature-rich workflows under
docs/
with step-by-step usage notes and configuration guides. - Example projects in
examples/
demonstrating how to consume the composite actions and workflows in real repositories. - Utility scripts and tests in
scripts/
andtests/
to keep the collection up to date and verifiable.
Path | Purpose |
---|---|
.github/actions/ |
Composite actions written in YAML that can be consumed from any repository. |
.github/workflows/ |
Reusable workflows invokable through workflow_call plus local automation for this repository. |
docs/ |
Extended documentation for complex workflows (API testing, multi-cloud deploy, PyPI trusted publishing, etc.). |
examples/ |
Sample repositories showcasing how to wire the actions and workflows together. |
scripts/ |
Python utilities used by composite actions and migration helpers. |
tests/ |
Pytest suite covering helper scripts and workflow generators. |
requirements-dev.txt |
Development dependencies required to run scripts and tests locally. |
Example layout:
.github/
├── actions/
│ ├── lint-python/
│ │ └── action.yml
│ └── check-imports/
│ └── action.yml
└── workflows/
├── release.yml
└── security-scan.yml
Call any reusable workflow directly from another repository via the uses:
keyword:
name: Reuse Example
on:
push:
branches: [ main ]
jobs:
call-workflow:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/release.yml@main
Reference a composite action inside an existing workflow:
steps:
- uses: actions/checkout@v4
- name: Check Imports
uses: DiogoRibeiro7/gh-actions-collection/.github/actions/check-imports@main
Tip: Replace
@main
with a tagged release for reproducible pipelines.
This repository includes helper scripts and example workflows that rely on a small Python toolchain. Install the development requirements in an isolated environment before running the utilities or the test suite:
python -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements-dev.txt
Run the automated checks locally with:
pytest
The scripts/migrate_starter_workflows.py
CLI uses PyYAML to parse GitHub workflow manifests.
Installing the development dependencies ensures the converter and its tests run successfully.
Each complex workflow is paired with a dedicated guide under docs/
, and the examples/
directory contains minimal repositories ready to copy-paste into your projects:
- API testing contract checks (
docs/api-testing.md
,examples/api-testing/
) - Multi-cloud infrastructure deployments (
docs/multi-cloud-deploy.md
,examples/multi-cloud-deploy/
) - Trusted PyPI releases (
docs/pypi-trusted-publishing.md
,examples/python-package/
) - Smart dependency management (
docs/smart-dependency-update.md
,examples/smart-dependency-update/
) - Vercel Next.js deployments (
docs/vercel-nextjs.md
)
Browse the remaining guides for workflows covering artifact management, database migrations, Deno projects, PyTorch training, and more.
The security-scan
workflow audits Python dependencies and runs static analysis.
It uploads SARIF results to GitHub code scanning and saves them as build artifacts while retaining least privilege.
permissions:
contents: read
security-events: write
id-token: write
attestations: write
jobs:
scan:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/security-scan.yml@main
For a full example see examples/python-package/.github/workflows/security.yml
.
Additional security helpers:
secret-scan
composite action runs gitleaks to block secret leaks.codeql-analysis
workflow runs CodeQL for Python, JavaScript, and Go.dependency-review
workflow warns about vulnerable dependency changes.multi-cloud-deploy
workflow deploys Terraform, Pulumi, or Bicep stacks to AWS, Azure, and GCP with OIDC authentication, drift detection, and cost estimates.apm-integration
composite action sends deployment events and custom metrics to Datadog, New Relic, or Application Insights.artifact-management
workflow cleans stale build artifacts, package versions, and container images.
Action | Path | Inputs & outputs | Summary |
---|---|---|---|
APM Integration | .github/actions/apm-integration |
Required inputs: provider , api-key ; optional: app-id , environment , deployment-id , metrics-file . |
Sends deployment markers and optional custom metrics to Datadog, New Relic, or Azure Application Insights. |
AWS Lambda Build (Python) | .github/actions/aws-lambda-build |
Optional inputs: src , output-zip , python-version , pip-version . |
Packages a Python Lambda with dependency vendoring and reproducible ZIP output. |
Benchmark Smoke | .github/actions/benchmark-smoke |
Optional inputs: python-version , working-directory , pytest-args , pip-version . |
Runs pytest-benchmark , captures JSON output, and uploads the results as an artifact. |
Check Imports vs pyproject | .github/actions/check-imports |
Optional inputs: paths , fail-on , format , update-pyproject , create-pr , pr-branch , python-version , pip-version , smart-update . |
Compares imports to pyproject.toml , optionally amends dependencies, and can open PRs with fixes. |
Gradle Build | .github/actions/gradle-build |
Optional inputs: java-version , tasks , gradle-args , working-directory . |
Executes Gradle tasks with setup-java and setup-gradle caching support. |
Markdown Lint | .github/actions/markdown-lint |
Optional inputs: paths , config-file , node-version . |
Installs markdownlint-cli and enforces Markdown conventions. |
PR Template Enforcer | .github/actions/pr-template-enforcer |
No inputs. | Fails a workflow if pull requests omit required summary and testing sections. |
Python Lint & Type Check | .github/actions/python-lint |
Optional inputs: python-version , enable-mypy , pip-version . |
Runs Ruff linting and optionally mypy with pip caching. |
Python Type Check | .github/actions/python-type-check |
Optional inputs: python-version , working-directory , requirements-file , extra-dependencies , mypy-args , pip-version . |
Installs dependencies and executes mypy across a repository or subdirectory. |
R Lint | .github/actions/r-lint |
Optional inputs: r-version , cran-mirror , use-public-rspm , targets , config-file , additional-packages , working-directory . |
Provisions R (via setup-r ) and runs lintr against provided targets. |
R Testthat | .github/actions/r-testthat |
Optional inputs: r-version , cran-mirror , use-public-rspm , test-directory , install-dependencies , additional-packages , working-directory , use-devtools . |
Installs dependencies and runs testthat or devtools::test() suites. |
Secret Scan | .github/actions/secret-scan |
Optional input: args . |
Wraps the official gitleaks action to scan repositories for leaked credentials. |
Setup Poetry (with cache) | .github/actions/setup-poetry |
Optional inputs: python-version , install-deps , pip-version . |
Installs Poetry, primes pip/Poetry caches, and optionally runs poetry install . |
Setup R Environment | .github/actions/setup-r |
Optional inputs: r-version , cran-mirror , use-public-rspm , packages , working-directory . |
Installs R with optional package bootstrapping and RSPM acceleration. |
Setup Yarn (Corepack) | .github/actions/setup-yarn |
Optional inputs: node-version , working-directory . |
Enables Corepack, caches Yarn artifacts, and runs yarn install --immutable when a lockfile exists. |
Smart Dependency Update | .github/actions/smart-dependency-update |
Required input: manifests ; optional: apply , batch-size , dependabot , repo , github-token , pip-version . Outputs: report . |
Batches dependency upgrades, optionally consults Dependabot alerts, and emits a JSON report. |
Python tooling upgrade policy: Python-based composite actions default to the latest pip release that has been validated in this repository (
24.3.1
). Consumers can override thepip-version
input (set it tolatest
to follow upstream automatically) and upgrades are reviewed quarterly or when security advisories require it. Each release bump is tested in CI before updating the default to prevent supply-chain breakages.
Workflow | Path | Requirements | Summary |
---|---|---|---|
API Testing | .github/workflows/api-testing.yml |
Inputs: openapi-spec , contract-path , base-url ; Secrets: —. |
Validates OpenAPI specs, runs Postman or Pact contract checks, and optionally executes k6 load tests, GraphQL linting, and OWASP ZAP scans (contract-type , load-script , graphql-schema , auth-command , run-zap , zap-token ). |
CI Monorepo by Path | .github/workflows/ci-monorepo-matrix.yml |
Inputs: groups ; Secrets: —. |
Splits monorepos into path-based job groups by delegating to other reusable workflows. |
Concurrency and Caching Template | .github/workflows/concurrency-caching.yml |
Inputs: —; Secrets: —. | Starter template demonstrating default permissions, concurrency groups, and cache sharing patterns. |
Deno CI | .github/workflows/deno-ci.yml |
Inputs: —; Secrets: —. | Lints, formats, and tests Deno apps with optional matrix (deno-version , os-matrix ) and deploy support (deploy , project , deno-deploy-token ). |
.NET CI | .github/workflows/dotnet-ci.yml |
Inputs: —; Secrets: —. | Restores, builds, and tests .NET solutions with configurable SDKs, frameworks, and test toggles. |
Go CI | .github/workflows/go-ci.yml |
Inputs: —; Secrets: —. | Performs Go module linting, testing, and coverage with configurable Go versions. |
Java CI | .github/workflows/java-ci.yml |
Inputs: —; Secrets: —. | Builds and tests Maven or Gradle projects with configurable build tool selection. |
Node CI | .github/workflows/node-ci.yml |
Inputs: —; Secrets: —. | Handles npm/Yarn install, lint, and test jobs with optional OS/Python matrices. |
Python Lint | .github/workflows/python-lint.yml |
Inputs: python-version , enable-mypy , pip-version ; Secrets: —. |
Wraps the composite Python lint action with configurable Python version, pip bootstrap, and mypy toggle. |
Python Test Matrix | .github/workflows/python-test-matrix.yml |
Inputs: python-versions , os-matrix , test-command , pip-version ; Secrets: —. |
Executes tests across custom OS and Python matrices with governed pip upgrades and supports arbitrary test commands. |
PyTorch Train and Deploy | .github/workflows/pytorch-train-deploy.yml |
Inputs: —; Secrets: —. | Trains PyTorch models, publishes artifacts, optionally benchmarks/deploys, and can push to MLflow (hf-token , deploy , mlflow-uri ). |
Ruby CI | .github/workflows/ruby-ci.yml |
Inputs: —; Secrets: —. | Bundles, lints, and tests Ruby projects with multi-version matrices and optional Rubygems auth (rubygems-token ). |
Rust CI | .github/workflows/rust-ci.yml |
Inputs: —; Secrets: —. | Builds, tests, and runs clippy , fmt , and cargo audit with sensible caching defaults. |
Coverage Report | .github/workflows/coverage-report.yml |
Inputs: python-version , test-command , pip-version ; Secrets: —. |
Runs Python tests and publishes HTML coverage artifacts with configurable interpreter, pip bootstrap, and test command. |
Canary Release | .github/workflows/canary-release.yml |
Inputs: project-type ; Secrets: —. |
Creates canary builds for Python, npm, or Docker projects; supports custom working directories and build backends (working-directory , build-backend , image , NPM_TOKEN ). |
Conventions: Conventional Commits | .github/workflows/conventional-commits.yml |
Inputs: —; Secrets: —. | Enforces the Conventional Commits spec across PRs. |
Examples Smoke | .github/workflows/examples-smoke.yml |
Inputs: —; Secrets: —. | Validates that the example projects in this repository continue to build and test successfully. |
Permissions Hardened Template | .github/workflows/permissions-template.yml |
Inputs: —; Secrets: —. | Opinionated starter that applies least-privilege permissions, concurrency, and cache patterns. |
Test Python Test Matrix | .github/workflows/test-python-test-matrix.yml |
Inputs: —; Secrets: —. | Regression workflow demonstrating expected behavior for the reusable Python test matrix. |
Workflow | Path | Requirements | Summary |
---|---|---|---|
Artifact Management | .github/workflows/artifact-management.yml |
Inputs: —; Secrets: GH_TOKEN . |
Cleans up build artifacts, packages, and container images with retention, size, and registry filters. |
Changelog Auto PR | .github/workflows/changelog-auto-pr.yml |
Inputs: —; Secrets: —. | Opens automated PRs with changelog updates using configurable commit messages and branches. |
Docker Build & Push | .github/workflows/docker-build-push.yml |
Inputs: image ; Secrets: —. |
Builds and pushes multi-platform container images with optional registry credentials and AWS ECR role assumption. |
Publish Docker on Tag | .github/workflows/publish-docker-on-tag.yml |
Inputs: —; Secrets: —. | Builds and publishes Docker images on tag events with optional registry credentials and build args. |
Release Container | .github/workflows/release-container.yml |
Inputs: —; Secrets: —. | Publishes versioned container images on semantic tags with provenance attestation. |
Release Drafter | .github/workflows/release-drafter.yml |
Inputs: —; Secrets: —. | Generates draft release notes using configurable categories and templates. |
Semantic Release | .github/workflows/release.yml |
Inputs: —; Secrets: —. | Automates semantic-release for Node.js projects with configurable Node runtime. |
Publish to npm (simple) | .github/workflows/publish-to-npm.yml |
Inputs: —; Secrets: —. | Publishes npm packages from a single job with configurable Node version. |
Publish to npm (advanced) | .github/workflows/npm-publish.yml |
Inputs: —; Secrets: NPM_TOKEN . |
Handles advanced npm publication scenarios including subdirectories and dist-tags. |
Publish to PyPI (simple) | .github/workflows/publish-to-pypi.yml |
Inputs: python-version , pip-version ; Secrets: —. |
Publishes Python packages with API tokens, configurable Python versions, and governed pip upgrades. |
Publish to PyPI (trusted publishing) | .github/workflows/pypi-publish.yml |
Inputs: python-version , build-backend , environment , pre-release , pip-version ; Secrets: —. |
Uses OIDC trusted publishing with optional pre-release tagging, build backend selection, environment protection, and pip upgrade policy alignment. |
Vercel Next.js Deploy | .github/workflows/vercel-nextjs.yml |
Inputs: vercel-org-id , vercel-project-id ; Secrets: vercel-token . |
Builds and deploys Next.js apps to Vercel with optional preview/production selection and custom Node versions. |
Workflow | Path | Requirements | Summary |
---|---|---|---|
AWS Lambda Deploy | .github/workflows/aws-lambda-deploy.yml |
Inputs: aws-role , functions , pip-version ; Secrets: —. |
Deploys serverless functions via OIDC role assumption with region overrides, structured function definitions, and configurable pip bootstrapping for Python runtimes. |
Database Migration | .github/workflows/database-migration.yml |
Inputs: tool , migration-dir , environments , pip-version ; Secrets: —. |
Runs Flyway, Liquibase, or Alembic migrations across multiple environments with optional dry-run mode, Flyway license support, and governed pip upgrades for Alembic. |
Helm Chart Lint & Test | .github/workflows/helm-chart-lint-test.yml |
Inputs: —; Secrets: —. | Lints and optionally tests Helm charts, including OCI registry publishing when requested. |
Infra Lint | .github/workflows/infra-lint.yml |
Inputs: —; Secrets: —. | Lints Terraform, CloudFormation, and related IaC code with optional path targeting. |
Kubernetes Manifests Lint | .github/workflows/k8s-manifests-lint.yml |
Inputs: —; Secrets: —. | Validates Kubernetes manifests with kubeval, kube-score, and policy checks with configurable paths. |
Multi-Cloud Deploy | .github/workflows/multi-cloud-deploy.yml |
Inputs: tool , environment ; Secrets: —. |
Orchestrates Terraform, Pulumi, or Bicep deployments across AWS, Azure, and GCP with OIDC and backend configuration options (aws-role-arn , azure-* , gcp-* , env-file , backend-config , pulumi-backend , azure-credentials ). |
Terraform Apply (AWS OIDC) | .github/workflows/terraform-aws.yml |
Inputs: aws-role ; Secrets: —. |
Plans and applies Terraform using GitHub OIDC with toggles for region, version, apply mode, and failure rollback. |
Terraform Plan (PR comment) | .github/workflows/terraform-plan-comment.yml |
Inputs: —; Secrets: —. | Generates Terraform plans and posts summaries back to pull requests with optional working directory selection. |
Workflow | Path | Requirements | Summary |
---|---|---|---|
CodeQL Analysis | .github/workflows/codeql-analysis.yml |
Inputs: —; Secrets: —. | Runs CodeQL analysis for Python, JavaScript, and Go with upload permissions preconfigured. |
Conventional Commits | .github/workflows/conventional-commits.yml |
Inputs: —; Secrets: —. | Checks commit messages for the Conventional Commits specification. |
Dependency Review | .github/workflows/dependency-review.yml |
Inputs: —; Secrets: —. | Annotates pull requests with dependency vulnerability information using GitHub's dependency-review action. |
Lockfile Consistency | .github/workflows/lockfile-consistency.yml |
Inputs: pip-version ; Secrets: —. |
Validates that npm, Yarn, pip, and Poetry lockfiles match their manifests with configurable pip bootstrapping. |
PR Policy | .github/workflows/pr-policy.yml |
Inputs: —; Secrets: —. | Applies repository policy checks such as title formatting and draft status enforcement. |
Security Scan | .github/workflows/security-scan.yml |
Inputs: paths , skip-trivy , pip-version ; Secrets: —. |
Runs Trivy, pip-audit, Bandit, and dependency checks with configurable pip bootstrapping plus optional path targeting and Trivy skip flag. |
These workflows run locally in this repository to keep the collection healthy and demonstrate expected behavior.
Workflow | Path | Triggers | Purpose |
---|---|---|---|
Examples Smoke | .github/workflows/examples-smoke.yml |
push , pull_request |
Builds and tests each project under examples/ to ensure the samples stay runnable. |
Python Type Check | .github/workflows/python-type-check.yml |
push , pull_request , workflow_dispatch |
Runs mypy across repository scripts to guard helper utilities. |
R Package Check | .github/workflows/r-cmd-check.yml |
push , pull_request , workflow_dispatch |
Executes R CMD check across supported operating systems for the R examples. |
R Lint | .github/workflows/r-lint.yml |
push , pull_request , workflow_dispatch |
Lints R sources and examples using the composite R lint action. |
R Tests (testthat) | .github/workflows/r-testthat.yml |
push , pull_request , workflow_dispatch |
Runs testthat suites for the R example projects. |
Test Python Test Matrix Workflow | .github/workflows/test-python-test-matrix.yml |
workflow_dispatch , push |
Verifies the reusable Python matrix workflow against known scenarios. |
Name | Type | Path | Inputs | Outputs | Example |
---|---|---|---|---|---|
Python Lint & Type Check | composite | .github/actions/python-lint |
python-version , enable-mypy , pip-version |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/actions/python-lint@main |
Python Type Check (mypy) | composite | .github/actions/python-type-check |
python-version , working-directory , requirements-file , extra-dependencies , mypy-args , pip-version |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/actions/python-type-check@main |
Check Imports vs pyproject | composite | .github/actions/check-imports |
paths , fail-on , format , update-pyproject , create-pr , pr-branch , python-version , pip-version , smart-update |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/actions/check-imports@main |
Smart Dependency Update | composite | .github/actions/smart-dependency-update |
manifests , apply , batch-size , dependabot , repo , github-token , pip-version |
report |
uses: DiogoRibeiro7/gh-actions-collection/.github/actions/smart-dependency-update@main |
APM Integration | composite | .github/actions/apm-integration |
provider , api-key , app-id , environment , deployment-id , metrics-file |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/actions/apm-integration@main |
AWS Lambda Build (Python) | composite | .github/actions/aws-lambda-build |
src , output-zip , python-version , pip-version |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/actions/aws-lambda-build@main |
Setup Poetry (with cache) | composite | .github/actions/setup-poetry |
python-version , install-deps , pip-version |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/actions/setup-poetry@main |
Setup R Environment | composite | .github/actions/setup-r |
r-version , cran-mirror , use-public-rspm , packages , working-directory |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/actions/setup-r@main |
R Lint | composite | .github/actions/r-lint |
r-version , cran-mirror , use-public-rspm , targets , config-file , additional-packages , working-directory |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/actions/r-lint@main |
R Testthat | composite | .github/actions/r-testthat |
r-version , test-directory , install-dependencies , use-devtools , additional-packages , working-directory |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/actions/r-testthat@main |
Setup Yarn (Corepack) with cache | composite | .github/actions/setup-yarn |
node-version , working-directory |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/actions/setup-yarn@main |
Secret Scan | composite | .github/actions/secret-scan |
args |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/actions/secret-scan@main |
Benchmark Smoke | composite | .github/actions/benchmark-smoke |
python-version , working-directory , pytest-args , pip-version |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/actions/benchmark-smoke@main |
PR Template Enforcer | composite | .github/actions/pr-template-enforcer |
– | – | uses: DiogoRibeiro7/gh-actions-collection/.github/actions/pr-template-enforcer@main |
Name | Type | Path | Inputs | Outputs | Example |
---|---|---|---|---|---|
CI Monorepo by Path | reusable | .github/workflows/ci-monorepo-matrix.yml |
groups |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/ci-monorepo-matrix.yml@main |
Infra Lint | reusable | .github/workflows/infra-lint.yml |
paths |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/infra-lint.yml@main |
Kubernetes Manifests Lint | reusable | .github/workflows/k8s-manifests-lint.yml |
paths |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/k8s-manifests-lint.yml@main |
Helm Chart Lint & Test | reusable | .github/workflows/helm-chart-lint-test.yml |
chart-path , publish , oci-registry |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/helm-chart-lint-test.yml@main |
Publish to npm (simple) | reusable | .github/workflows/publish-to-npm.yml |
node-version |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/publish-to-npm.yml@main |
Python Test Matrix | reusable | .github/workflows/python-test-matrix.yml |
python-versions , os-matrix , test-command , pip-version |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/python-test-matrix.yml@main |
Python Type Check | reusable | .github/workflows/python-type-check.yml |
– | – | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/python-type-check.yml@main |
R Lint | reusable | .github/workflows/r-lint.yml |
– | – | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/r-lint.yml@main |
R Tests (testthat) | reusable | .github/workflows/r-testthat.yml |
– | – | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/r-testthat.yml@main |
R Package Check | reusable | .github/workflows/r-cmd-check.yml |
– | – | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/r-cmd-check.yml@main |
Terraform Plan (PR comment) | reusable | .github/workflows/terraform-plan-comment.yml |
working-directory |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/terraform-plan-comment.yml@main |
Terraform Apply (AWS OIDC) | reusable | .github/workflows/terraform-aws.yml |
aws-role , aws-region , terraform-version , working-directory , apply , destroy-on-failure |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/terraform-aws.yml@main |
Multi-Cloud Deploy | reusable | .github/workflows/multi-cloud-deploy.yml |
tool , environment , provider creds |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/multi-cloud-deploy.yml@main |
AWS Lambda Deploy | reusable | .github/workflows/aws-lambda-deploy.yml |
aws-role , aws-region , functions , pip-version |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/aws-lambda-deploy.yml@main |
API Testing | reusable | .github/workflows/api-testing.yml |
openapi-spec , contract-path , base-url , contract-type , load-script , run-zap |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/api-testing.yml@main |
Artifact Management | reusable | .github/workflows/artifact-management.yml |
retention-days , keep-latest , max-size-mb , package-name , registry |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/artifact-management.yml@main |
Database Migration | reusable | .github/workflows/database-migration.yml |
tool , migration-dir , environments , dry-run , pip-version |
flyway-license-key |
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/database-migration.yml@main |
Conventional Commits | reusable | .github/workflows/conventional-commits.yml |
– | – | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/conventional-commits.yml@main |
Publish to npm (advanced) | reusable | .github/workflows/npm-publish.yml |
node-version , working-directory , tag |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/npm-publish.yml@main |
Publish to PyPI (simple) | reusable | .github/workflows/publish-to-pypi.yml |
python-version , pip-version |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/publish-to-pypi.yml@main |
Release Container | reusable | .github/workflows/release-container.yml |
– | – | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/release-container.yml@main |
Python Tests & Coverage | reusable | .github/workflows/coverage-report.yml |
python-version , test-command , pip-version |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/coverage-report.yml@main |
PR Policy | reusable | .github/workflows/pr-policy.yml |
– | – | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/pr-policy.yml@main |
Publish to PyPI (trusted publishing) | reusable | .github/workflows/pypi-publish.yml |
python-version , build-backend , environment , pre-release , pip-version |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/pypi-publish.yml@main |
Semantic Release | reusable | .github/workflows/release.yml |
node-version |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/release.yml@main |
Docker Build & Push | reusable | .github/workflows/docker-build-push.yml |
image , context , dockerfile , platforms , tags , aws-role , aws-region |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/docker-build-push.yml@main |
Publish Docker (Reusable + Tag Trigger) | reusable | .github/workflows/publish-docker-on-tag.yml |
image , context , dockerfile , platforms , build-args , target , labels , registry |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/publish-docker-on-tag.yml@main |
Python Lint | reusable | .github/workflows/python-lint.yml |
python-version , enable-mypy , pip-version |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/python-lint.yml@main |
Security Scan | reusable | .github/workflows/security-scan.yml |
paths , skip-trivy , pip-version |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/security-scan.yml@main |
CodeQL Analysis | reusable | .github/workflows/codeql-analysis.yml |
– | – | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/codeql-analysis.yml@main |
Dependency Review | reusable | .github/workflows/dependency-review.yml |
– | – | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/dependency-review.yml@main |
Lockfile Consistency | reusable | .github/workflows/lockfile-consistency.yml |
pip-version |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/lockfile-consistency.yml@main |
Canary Release | reusable | .github/workflows/canary-release.yml |
project-type , working-directory , build-backend , image |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/canary-release.yml@main |
Java CI | reusable | .github/workflows/java-ci.yml |
build-tool |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/java-ci.yml@main |
Deno CI | reusable | .github/workflows/deno-ci.yml |
deno-version , os-matrix , run-tests , deploy , project |
deno-deploy-token |
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/deno-ci.yml@main |
Node CI | reusable | .github/workflows/node-ci.yml |
node-version , os-matrix |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/node-ci.yml@main |
Rust CI | reusable | .github/workflows/rust-ci.yml |
– | – | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/rust-ci.yml@main |
Go CI | reusable | .github/workflows/go-ci.yml |
go-version |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/go-ci.yml@main |
PyTorch Train & Deploy | reusable | .github/workflows/pytorch-train-deploy.yml |
python-version , train-script , benchmark-script , model-artifact , deploy , mlflow-uri |
hf-token |
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/pytorch-train-deploy.yml@main |
Ruby CI | reusable | .github/workflows/ruby-ci.yml |
ruby-versions , test-command , run-tests |
rubygems-token |
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/ruby-ci.yml@main |
Vercel Next.js Deploy | reusable | .github/workflows/vercel-nextjs.yml |
vercel-org-id , vercel-project-id , node-version , working-directory , prod |
vercel-token |
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/vercel-nextjs.yml@main |
Changelog Auto PR | reusable | .github/workflows/changelog-auto-pr.yml |
commit-message , branch |
– | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/changelog-auto-pr.yml@main |
Release Drafter | reusable | .github/workflows/release-drafter.yml |
– | – | uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/release-drafter.yml@main |
Install a requested R toolchain, configure a CRAN mirror or Posit Public Package Manager, and optionally pre-install packages so subsequent jobs can reuse the library cache.
Inputs
r-version
(defaultrelease
)cran-mirror
(defaulthttps://cloud.r-project.org
)use-public-rspm
(defaulttrue
)packages
(comma-separated list of CRAN packages, default empty)working-directory
(default.
)
Example
steps:
- name: Prepare R runtime
uses: DiogoRibeiro7/gh-actions-collection/.github/actions/setup-r@main
with:
r-version: '4.3'
packages: 'tidyverse,lintr'
Provision R with lintr
, optionally install additional dependencies, and lint selected files or directories using lintr::lint
and lintr::lint_dir
depending on the target type.
Inputs
r-version
(defaultrelease
)targets
(defaultR
)config-file
(default empty)additional-packages
(comma-separated list)working-directory
(default.
)
Example
steps:
- name: Lint R sources
uses: DiogoRibeiro7/gh-actions-collection/.github/actions/r-lint@main
with:
targets: 'R,tests/testthat'
config-file: '.lintr'
Install dependencies via remotes
, optionally leverage devtools
, and execute the project tests with rich summaries suitable for CI logs.
Inputs
r-version
(defaultrelease
)test-directory
(defaulttests/testthat
)install-dependencies
(defaulttrue
)use-devtools
(defaulttrue
)additional-packages
(comma-separated list)working-directory
(default.
)
Example
steps:
- name: Run unit tests
uses: DiogoRibeiro7/gh-actions-collection/.github/actions/r-testthat@main
with:
test-directory: 'tests'
use-devtools: true
Dispatch workflows only for changed top-level folders.
Inputs
groups
: JSON mapping of folder to workflow path.
Example
jobs:
ci:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/ci-monorepo-matrix.yml@main
with:
groups: '{"pkg": ".github/workflows/python-lint.yml"}'
Run Terraform and CloudFormation linters with optional security scanners (Checkov, tfsec, KICS).
Inputs
paths
(default.
)
Example
jobs:
lint:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/infra-lint.yml@main
Validate Kubernetes YAML with kubeconform.
Inputs
paths
(default.
)
Example
jobs:
lint:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/k8s-manifests-lint.yml@main
Run helm lint
and helm template --dry-run
with optional publishing to GitHub Pages or an OCI registry.
Inputs
chart-path
(default.
)publish
(defaultfalse
)oci-registry
(default''
)
Example
jobs:
lint:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/helm-chart-lint-test.yml@main
with:
chart-path: chart
Install dependencies, run tests, and publish to npm with provenance.
Inputs
node-version
(default20
)
Example
jobs:
publish:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/publish-to-npm.yml@main
secrets:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
Run tests across multiple Python versions and operating systems.
Inputs
python-versions
(JSON array)os-matrix
(JSON array)test-command
Example
jobs:
test:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/python-test-matrix.yml@main
Run mypy
against a project using the Python type-check composite action with sensible defaults.
Example
jobs:
type-check:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/python-type-check.yml@main
Trigger lintr
against R scripts, R Markdown files, and package sources. The workflow reuses the r-lint
composite action and watches for changes to .lintr
configuration files.
Example
jobs:
lint:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/r-lint.yml@main
Install dependencies (including optional devtools
) and execute testthat
suites, automatically detecting package structures versus standalone test directories.
Example
jobs:
tests:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/r-testthat.yml@main
Provision R, install remotes
and rcmdcheck
, restore package dependencies, and run R CMD check --no-manual
for package validation.
Example
jobs:
check:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/r-cmd-check.yml@main
Generate a Terraform plan and comment on pull requests.
Inputs
working-directory
(default.
)
Example
jobs:
plan:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/terraform-plan-comment.yml@main
Run Terraform plan and apply using AWS credentials from GitHub's OIDC provider with optional automatic rollback.
Inputs
aws-role
(required)aws-region
(defaultus-east-1
)terraform-version
(default1.8.5
)working-directory
(default.
)apply
(defaultfalse
)destroy-on-failure
(defaultfalse
)
Example
jobs:
apply:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/terraform-aws.yml@main
with:
aws-role: arn:aws:iam::123456789012:role/GitHubActionsRole
apply: true
Deploy zip or container-based Lambda functions across multiple runtimes with optional layers, environment variables, and alias management.
Inputs
aws-role
(required)aws-region
(defaultus-east-1
)functions
(JSON array, required)
Example
jobs:
deploy:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/aws-lambda-deploy.yml@main
with:
aws-role: arn:aws:iam::123456789012:role/GitHubActions
functions: '[{"name":"py-fn","runtime":"python3.12","path":"lambda/python"}]'
Validate OpenAPI specs, run contract tests with Postman or Pact, perform k6 load testing, and optionally scan with OWASP ZAP.
Inputs
openapi-spec
(required)contract-path
(required)base-url
(required)contract-type
(defaultpostman
)load-script
(optional)run-zap
(defaultfalse
)
Example
jobs:
api-tests:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/api-testing.yml@main
with:
openapi-spec: openapi.yaml
contract-path: postman-collection.json
base-url: https://example.com
load-script: k6-script.js
run-zap: true
Run database schema migrations for PostgreSQL, MySQL, or SQL Server using Flyway, Liquibase, or Alembic with automatic rollback and migration history tracking.
Inputs
tool
(required)migration-dir
(required)environments
(required JSON array)dry-run
(defaultfalse
)
Example
jobs:
migrate:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/database-migration.yml@main
with:
tool: flyway
migration-dir: db/migrations
environments: '["dev"]'
secrets:
DEV_DATABASE_URL: ${{ secrets.DEV_DATABASE_URL }}
DEV_DB_USER: ${{ secrets.DEV_DB_USER }}
DEV_DB_PASSWORD: ${{ secrets.DEV_DB_PASSWORD }}
Check that commit messages follow Conventional Commits.
Example
jobs:
lint:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/conventional-commits.yml@main
Build and publish an npm package using yarn or npm.
Inputs
node-version
(default20
)working-directory
(default.
)tag
(defaultlatest
)
Example
jobs:
publish:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/npm-publish.yml@main
with:
working-directory: .
tag: next
secrets:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
Build a package and publish to PyPI.
Inputs
python-version
(default3.12
)
Example
jobs:
publish:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/publish-to-pypi.yml@main
Use python scripts/pypi_trusted_publishing_wizard.py
for an interactive setup
that generates this workflow and provides PyPI configuration steps. A VS Code
snippet (pypi-publish
) is also available for quick insertion. See
PyPI Trusted Publishing Setup Guide for
troubleshooting tips.
Generate starter workflows for Python or Node projects with pinned actions.
python scripts/workflow_generator.py python
Override the branch or output file if required:
python scripts/workflow_generator.py node --branch develop --output .github/workflows/ci.yml
Convert GitHub's starter workflows to reuse this collection's hardened workflows:
python scripts/migrate_starter_workflows.py .github/workflows/python-package.yml --output .github/workflows/ci.yml
See the migration guide for comparisons and gradual rollout strategies.
Publish a container image on tag or manual trigger.
Example
jobs:
publish:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/release-container.yml@main
Publish staged artifacts from the develop
branch or *-rc
tags.
Inputs
project-type
(python
,npm
, ordocker
)working-directory
(default.
)build-backend
(Python only; defaultpoetry
)image
(Docker image name)
Example
jobs:
canary:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/canary-release.yml@main
with:
project-type: python
build-backend: poetry
Run tests and upload a coverage report.
Inputs
python-version
(default3.12
)test-command
Example
jobs:
test:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/coverage-report.yml@main
Label pull requests by size and path.
Path rules live in .github/labeler.yml
.
Example
jobs:
policy:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/pr-policy.yml@main
Build and publish to PyPI with optional Poetry backend.
Inputs
python-version
(default3.12
)build-backend
(defaultbuild
)environment
(defaultpypi
)pre-release
(defaultfalse
)
Example
jobs:
publish:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/pypi-publish.yml@main
For a full example see examples/python-package/.github/workflows/release-pypi.yml
.
Run semantic-release to publish releases and changelogs.
Inputs
node-version
(default20
)
Example
jobs:
release:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/release.yml@main
Build and push multi-platform Docker images with optional ECR authentication via OIDC, GitHub Actions cache-based layer caching, and post-build vulnerability scanning. QEMU setup is skipped for single-architecture (linux/amd64
) builds to reduce overhead.
Inputs
image
context
dockerfile
platforms
tags
aws-role
aws-region
Example
jobs:
docker:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/docker-build-push.yml@main
with:
image: ghcr.io/diogoribeiro7/image
aws-role: arn:aws:iam::123456789012:role/GitHubActions
Build and push a Docker image when tagging or via workflow call.
Inputs
image
context
dockerfile
platforms
build-args
target
labels
registry
Example
jobs:
docker:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/publish-docker-on-tag.yml@main
Run ruff and optional mypy via the python-lint action.
Inputs
python-version
(default3.12
)enable-mypy
(defaultfalse
)
Example
jobs:
lint:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/python-lint.yml@main
Audit dependencies, verify package signatures, and run static analysis with SARIF output. The workflow caches vulnerability databases, generates SLSA Level 2 attestations for reports, and archives logs for compliance frameworks (e.g., SOC 2, GDPR); see the Security Scan Compliance Guide.
Inputs
paths
(default.
)skip-trivy
(defaulttrue
)
Example
permissions:
contents: read
security-events: write
id-token: write
attestations: write
jobs:
scan:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/security-scan.yml@main
with:
paths: '.'
skip-trivy: true
Run GitHub's CodeQL analysis across Python, JavaScript, and Go.
Example
jobs:
analyze:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/codeql-analysis.yml@main
Check dependency diffs for known vulnerabilities on pull requests.
Example
jobs:
review:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/dependency-review.yml@main
Validate that poetry.lock
or yarn.lock
match their manifests.
Example
jobs:
lockfile:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/lockfile-consistency.yml@main
Install Temurin JDK and run Maven or Gradle tests.
Inputs
build-tool
(defaultmaven
)
Example
jobs:
test:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/java-ci.yml@main
with:
build-tool: maven
For a full example see examples/java-app/.github/workflows/ci.yml
.
Run deno lint
and deno test
across Linux, macOS, and Windows runners. Optionally deploy to Deno Deploy using deployctl
.
Inputs
deno-version
(default1.x
)os-matrix
(default["ubuntu-latest","windows-latest","macos-latest"]
)run-tests
(defaulttrue
)deploy
(defaultfalse
)project
(default''
)
Example
jobs:
deno:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/deno-ci.yml@main
with:
deploy: false
Run Yarn lint and test commands across Linux, macOS, and Windows runners using Corepack.
Inputs
node-version
(default20
)os-matrix
(default["ubuntu-latest","windows-latest","macos-latest"]
)
Example
jobs:
build:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/node-ci.yml@main
with:
os-matrix: '["ubuntu-latest","windows-latest","macos-latest"]'
Platform notes
- Steps run in Bash so path separators behave consistently on all platforms.
- Windows runners rely on the Git Bash environment included with the runner image.
actions/setup-node
installs Node.js and enables Corepack for Yarn.
Run cargo fmt
, cargo check
, and cargo clippy
.
Example
jobs:
build:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/rust-ci.yml@main
See examples/rust-crate/.github/workflows/ci.yml
for a working sample.
Run go test
and golangci-lint
.
Inputs
go-version
(default1.22
)
Example
jobs:
build:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/go-ci.yml@main
The examples/go-module/.github/workflows/ci.yml
workflow shows a complete setup.
Run tests across multiple Ruby versions with Bundler caching.
Inputs
ruby-versions
(default["3.1","3.2"]
)test-command
(defaultbundle exec rake test
)run-tests
(defaulttrue
)
Secrets
rubygems-token
(optional)
Example
jobs:
test:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/ruby-ci.yml@main
Build and deploy a Next.js application to Vercel with retry logic for rate limits.
Inputs
vercel-org-id
vercel-project-id
node-version
(default20
)working-directory
(default.
)prod
(defaulttrue
)
Secrets
vercel-token
Example
jobs:
deploy:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/vercel-nextjs.yml@main
with:
vercel-org-id: ${{ vars.VERCEL_ORG_ID }}
vercel-project-id: ${{ vars.VERCEL_PROJECT_ID }}
secrets:
vercel-token: ${{ secrets.VERCEL_TOKEN }}
Generate CHANGELOG.md
and open a pull request with the updates.
Inputs
commit-message
(defaultchore: update changelog
)branch
(defaultchore/update-changelog
)
Example
jobs:
changelog:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/changelog-auto-pr.yml@main
Draft release notes based on merged pull requests.
Example
jobs:
draft:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/release-drafter.yml@main
- Keep each action self-contained with a clear
README.md
. - Prefer composite actions unless JavaScript/TypeScript is required.
- Document inputs, outputs, and environment variables.
- Add tests or example workflows where applicable.
The first milestones focus on high‑leverage, broadly reusable workflows and composite actions. Each item links to a suggested path (inputs/outputs, minimal example, and security notes).
-
Python Lint & Type Check (composite)
- Tools:
ruff
,flake8
(optional),pyproject.toml
discovery,mypy
(optional toggle). - Inputs:
paths
,python-version
,enable-mypy
. - Outputs: annotations.
- Example reusable workflow:
.github/workflows/python-lint.yml
.
- Tools:
-
Security Scan (reusable workflow)
- Steps:
pip-audit --strict
,bandit -r
,trivy fs
(opt-in), SARIF upload. - Inputs:
paths
,skip-trivy
.
- Steps:
-
Check Imports vs pyproject (composite)
- Script to parse imports and compare with
pyproject.toml
. - Inputs:
fail-on
(missing
,unused
,both
),format
(text
,json
),update-pyproject
,create-pr
,pip-version
(override the validated pip release or setlatest
). - Output: machine-readable JSON artifact or auto-updated
pyproject.toml
.
- Script to parse imports and compare with
-
Python Test Matrix (reusable)
- Matrix over
os: [ubuntu-latest, windows-latest, macos-latest]
andpython: [3.10, 3.11, 3.12]
. - Built-in caching for pip/poetry (
actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065
cache,poetry cache
),pytest -q
and coverage upload.
- Matrix over
-
Node/TS Lint + Test (reusable)
corepack enable
,yarn install --immutable
,yarn lint
,yarn test
.
-
Docker Build & Push (reusable)
- Login via OIDC →
docker/build-push-action
withcache-from/to
and SBOM (syft
) as artifact.
- Login via OIDC →
-
Semver Tagging & Release Notes (reusable)
- Conventional Commits check →
semantic-release
(Node) orpython-semantic-release
. - GitHub Release, changelog update, version bump PR.
- Conventional Commits check →
-
Publish to PyPI (reusable)
- Build with
pipx run build
orpoetry build
; publish via PyPI OIDC token. - Inputs:
environment
(protect releases),pre-release
flag.
- Build with
-
Publish to npm (reusable)
npm publish --provenance
; provenance enabled via OIDC andid-token: write
.
-
AWS Lambda Build & Package (composite)
- Layer or container image build,
docker buildx
, slim wheels, artifact upload.
- Layer or container image build,
-
Infra Lint (reusable)
cfn-lint
,tflint
,checkov
(opt-in), SARIF upload.
-
PR Policy (reusable)
- Auto‑label, size labels, codeowners check, required status checks, stale bot.
-
Permissions Hardening (template)
- Opinionated defaults: least‑privilege
permissions: read-all
, job‑scoped writes.
- Opinionated defaults: least‑privilege
-
Concurrency & Caching Templates
concurrency: { group: ${{ github.workflow }}-${{ github.ref }}, cancel-in-progress: true }
.- Cache keys with
hashFiles()
—document stable vs rolling keys.
jobs:
security:
uses: DiogoRibeiro7/gh-actions-collection/.github/workflows/security-scan.yml@main
with:
paths: src/**
steps:
- uses: actions/checkout@v4
- name: Lint & Type Check
uses: DiogoRibeiro7/gh-actions-collection/.github/actions/python-lint@main
with:
python-version: '3.12'
enable-mypy: true
- Default to
permissions: read-all
; elevate per‑job only when needed (e.g.,id-token: write
for OIDC). - Pin third‑party actions by commit SHA where feasible.
- Validate all user inputs; avoid shell injection via
shell: bash -euxo pipefail
and quoted vars.
Maintained by Diogo Ribeiro
Affiliation: ESMAD - Instituto Politécnico do Porto
Contact: diogo.debastos.ribeiro@gmail.com / dfr@esmad.ipp.pt
ORCID: https://orcid.org/0009-0001-2022-7072
If you use this repository, please cite it as described in CITATION.cff.
MIT