DevantlerTech GitHub Reusable Workflows ๐Ÿš€

April 20, 2026 ยท View on GitHub

Note

To see DevantlerTech's Actions, please visit the devantler-tech/actions repository.

Welcome to the DevantlerTech GitHub Reusable Workflows repository! This repository contains reusable workflows designed to streamline your CI/CD processes. These actions are used across all DevantlerTech projects, ensuring consistency and efficiency.

The below diagram illustrates the relationship between GitHub Workflows and GitHub Actions.

---
title: GitHub Actions Relationship Diagram
---
flowchart TD
  A[Workflows] --> B[Jobs]
  B --> C([***Reusable Workflows***])
  B --> D[Steps]
  C --> D
  C --> B
  D --> E[Actions]
  E -.- F([Composite Actions])
  F --> D
  E -.- G([JavaScript Actions])
  E -.- H([Docker Container Actions])

Reusable Workflows

Reusable workflows are designed to encapsulate common CI/CD patterns that can be shared across multiple repositories. They allow you to define a workflow once and reuse it in the job-scope of other workflows. This reduces duplication and enables building generic workflows for common tasks.

๐ŸŽ‰ Create Release

Click to expand

.github/workflows/create-release.yaml is a workflow used to create releases using semantic-release.

Usage

jobs:
  release:
    uses: devantler-tech/reusable-workflows/.github/workflows/create-release.yaml@{ref} # ref
    secrets:
      APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}

Secrets and Inputs

KeyTypeDefaultRequiredDescription
APP_PRIVATE_KEYSecret-YesGitHub App private key
dry-runInput (boolean)falseNoRun semantic-release in dry-run mode (no tags or publishes)

๐Ÿ—‘๏ธ Delete Workflow Runs

Click to expand

.github/workflows/delete-workflow-runs.yaml is a workflow used to clean up old workflow runs from a repository.

Usage

jobs:
  delete-runs:
    uses: devantler-tech/reusable-workflows/.github/workflows/delete-workflow-runs.yaml@{ref} # ref
    permissions:
      actions: write
      contents: read
    with:
      days: 30 # optional
      minimum-runs: 6 # optional
      dry-run: false # required to perform actual deletions (defaults to true)

Secrets and Inputs

KeyTypeDefaultRequiredDescription
repositoryInput (string)Calling repoNoRepository to target for workflow run deletion
daysInput (number)30NoDays-worth of runs to keep for each workflow
minimum-runsInput (number)6NoMinimum runs to keep for each workflow
delete-workflow-patternInput (string)-NoName or filename of the workflow to target
delete-workflow-by-state-patternInput (string)ALLNoFilter workflows by state (comma-separated)
delete-run-by-conclusion-patternInput (string)ALLNoRemove runs based on conclusion (comma-separated)
dry-runInput (boolean)trueNoLogs simulated changes, no deletions are performed

Note: The calling workflow must grant actions: write and contents: read permissions.

๐Ÿš€ Deploy GitHub Pages

Click to expand

.github/workflows/deploy-github-pages.yaml is a workflow used to build and deploy a Jekyll site to GitHub Pages.

Usage

jobs:
  pages:
    uses: devantler-tech/reusable-workflows/.github/workflows/deploy-github-pages.yaml@{ref} # ref
    with:
      ruby-version: "3.3" # optional
      jekyll-env: production # optional
      extra-build-args: "" # optional, e.g. '--future'
      working-directory: "." # optional, e.g. 'docs' if Jekyll site is in a subdirectory

Secrets and Inputs

KeyTypeDefaultRequiredDescription
dry-runInput (boolean)falseNoSkip build and deploy (validate workflow interface only)
ruby-versionInput (string)3.3NoRuby version to install
jekyll-envInput (string)productionNoJekyll environment
extra-build-argsInput (string)""NoExtra args appended before the automatically supplied --baseurl
working-directoryInput (string)"."NoWorking directory for the Jekyll site (e.g., 'docs')

Outputs

KeyDescription
page-urlDeployed Pages site URL

๐Ÿ”€ Enable Auto-Merge

Click to expand

.github/workflows/enable-auto-merge.yaml is a workflow that approves and enables auto-merge on pull requests from trusted bots and maintainers.

Usage

jobs:
  auto-merge:
    uses: devantler-tech/reusable-workflows/.github/workflows/enable-auto-merge.yaml@{ref} # ref
    secrets:
      APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}

Secrets and Inputs

KeyTypeDefaultRequiredDescription
APP_PRIVATE_KEYSecret-YesGitHub App private key

๐Ÿงน Lint Documentation

Click to expand

.github/workflows/lint-documentation.yaml is a workflow used to lint documentation files using the MegaLinter documentation flavor.

Usage

jobs:
  docs-lint:
    uses: devantler-tech/reusable-workflows/.github/workflows/lint-documentation.yaml@{ref} # ref
    secrets:
      APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}

Secrets and Inputs

KeyTypeDefaultRequiredDescription
APP_PRIVATE_KEYSecret-YesGitHub App private key

๐Ÿ“ฆ Publish .NET Library

Click to expand

.github/workflows/publish-dotnet-library.yaml is a workflow used to publish .NET libraries to NuGet and GHCR.

Usage

jobs:
  publish-library:
    uses: devantler-tech/reusable-workflows/.github/workflows/publish-dotnet-library.yaml@{ref} # ref
    secrets:
      NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}

Secrets and Inputs

KeyTypeDefaultRequiredDescription
NUGET_API_KEYSecret-NoNuGet API key (required when dry-run is false)
dry-runInput (boolean)falseNoSkip publish (validate workflow interface only)

๐Ÿงช Run .NET Tests

Click to expand

.github/workflows/run-dotnet-tests.yaml is a workflow used to test .NET solutions or projects across multiple operating systems.

Usage

jobs:
  dotnet-test:
    uses: devantler-tech/reusable-workflows/.github/workflows/run-dotnet-tests.yaml@{ref} # ref
    secrets:
      CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
      APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}

Secrets and Inputs

KeyTypeDefaultRequiredDescription
CODECOV_TOKENSecret-YesCodecov token
APP_PRIVATE_KEYSecret-YesGitHub App private key

๐Ÿ“ Scan for TODO Comments

Click to expand

.github/workflows/scan-for-todo-comments.yaml is a workflow used to scan for TODOs in code and create GitHub issues.

Usage

jobs:
  todos:
    uses: devantler-tech/reusable-workflows/.github/workflows/scan-for-todo-comments.yaml@{ref} # ref
    secrets:
      APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}

Secrets and Inputs

KeyTypeDefaultRequiredDescription
APP_PRIVATE_KEYSecret-YesGitHub App private key
dry-runInput (boolean)falseNoSkip issue creation (validate workflow interface only)

๐Ÿ” Scan for Workflow Vulnerabilities

Click to expand

.github/workflows/scan-for-workflow-vulnerabilities.yaml is a workflow used to perform static analysis on GitHub Actions workflows using Zizmor.

Usage

jobs:
  zizmor:
    uses: devantler-tech/reusable-workflows/.github/workflows/scan-for-workflow-vulnerabilities.yaml@{ref} # ref

๐Ÿ”„ Sync Cluster Policies

Click to expand

.github/workflows/sync-cluster-policies.yaml is a workflow used to sync upstream Kyverno policies to a target directory.

Usage

jobs:
  sync-cluster-policies:
    uses: devantler-tech/reusable-workflows/.github/workflows/sync-cluster-policies.yaml@{ref} # ref
    secrets:
      APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}
    with:
      kyverno-policies-dir: policies/kyverno

Secrets and Inputs

KeyTypeDefaultRequiredDescription
APP_PRIVATE_KEYSecret-YesGitHub App private key
kyverno-policies-dirInput (string)-YesDirectory to sync Kyverno policies to
dry-runInput (boolean)falseNoSkip sync and PR creation (validate workflow interface only)

๐Ÿ”„ Update Copilot Skills

Click to expand

.github/workflows/update-copilot-skills.yaml is a workflow used to keep installed Copilot / agent skills up-to-date via gh skill update --all, opening a PR with any changes. Each installed SKILL.md's metadata.github-* frontmatter is the source of truth โ€” no lockfile is required. Works with any mix of gh skill-compatible upstreams.

Usage

on:
  schedule:
    - cron: "0 6 * * *"
  workflow_dispatch:

jobs:
  update-copilot-skills:
    uses: devantler-tech/reusable-workflows/.github/workflows/update-copilot-skills.yaml@{ref} # ref
    permissions:
      contents: write
      pull-requests: write
    with:
      dir: .agents/skills

The workflow assumes skills were previously installed with devantler-tech/actions/setup-copilot-skills (or gh skill install directly) โ€” the committed SKILL.md files carry the upstream pointers.

Secrets and Inputs

KeyTypeDefaultRequiredDescription
dirInput (string).NoDirectory to scan for installed skills (passed to gh skill update --dir)
unpinInput (boolean)falseNoWhen true, pass --unpin (clear pinned versions)
gh-versionInput (string)2.90.0NoMinimum required gh version (must support gh skill)
pr-branchInput (string)deps/copilot-skills-updateNoBranch the update PR is opened from
pr-titleInput (string)chore(deps): update copilot skillsNoTitle of the update PR
pr-labelsInput (string)dependencies,automationNoComma-separated labels for the update PR
commit-messageInput (string)chore(deps): update copilot skillsNoCommit message for the update PR
dry-runInput (boolean)falseNoSkip update and PR creation (validate workflow interface only)

Note: The calling workflow must grant contents: write and pull-requests: write permissions.

โœ… Validate Go Project

Click to expand

.github/workflows/validate-go-project.yaml is a workflow used to lint and test Go projects across multiple operating systems.

Features

  • Automated Linting: Runs golangci-lint and mega-linter to ensure code quality
  • Auto-fix: Automatically applies linter fixes and commits them
  • Copilot Integration: When linting fails, automatically prompts Copilot on the PR to fix the remaining issues

Usage

jobs:
  go-test:
    uses: devantler-tech/reusable-workflows/.github/workflows/validate-go-project.yaml@{ref} # ref
    secrets:
      CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
      APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}
    with:
      pr-owner: ${{ github.event.pull_request.user.login }} # optional

Secrets and Inputs

KeyTypeDefaultRequiredDescription
CODECOV_TOKENSecret-NoCodecov token for uploading coverage reports
APP_PRIVATE_KEYSecret-NoGitHub App private key for authenticating the workflow
pr-ownerInput (string)-NoPull request author login (used to disable auto-commit for bot PRs)