Reusable Workflow Repository Setup
A step-by-step guide for first-time users: create a dedicated reusable workflow repository, add workflow files, and connect caller workflows to it through ActionsManager.
Beta notice: ActionsManager Self-Hosted is currently a free beta preview. The setup below is self-hosted focused and does not reference paid, cloud, or Marketplace features that are not yet available.
What is a reusable workflow repository?
Section titled “What is a reusable workflow repository?”A reusable workflow repository is a regular GitHub repository whose only job is to store shared GitHub Actions workflow files. Other repositories call those workflows using the uses: directive instead of copying the same YAML into every repo. ActionsManager manages the repository as a Reusable Workflow Project (the producer side).
Should I create a dedicated repository?
Section titled “Should I create a dedicated repository?”Yes. Keeping reusable workflows in their own repository makes versioning, access control, and rollout easier. Do not store reusable workflows alongside your application code — a dedicated repository keeps the surface area small and the ownership clear.
Recommended repository names
Section titled “Recommended repository names”Pick a name that makes the purpose obvious. Common conventions:
reusable-workflowsactions-workflowsplatform-workflowsgithub-actions-templates
There is no required name. Choose whatever fits your organization’s naming standards.
Required repository structure
Section titled “Required repository structure”Reusable workflows must live under .github/workflows/ in the repository. GitHub enforces this path — files stored elsewhere cannot be called with uses:.
reusable-workflows/└── .github/ └── workflows/ ├── reusable-node-ci.yml ├── reusable-python-ci.yml └── reusable-docker-build.ymlEvery reusable workflow file must include on: workflow_call — that is the trigger that makes it callable from another repository.
Example reusable workflow
Section titled “Example reusable workflow”File path: .github/workflows/reusable-node-ci.yml
name: Reusable Node CI
on: workflow_call: inputs: node-version: description: Node.js version to use required: false type: string default: "24" secrets: NPM_TOKEN: required: false
jobs: build: runs-on: ubuntu-latest
steps: - name: Checkout repository uses: actions/checkout@v6
- name: Setup Node.js uses: actions/setup-node@v6 with: node-version: ${{ inputs.node-version }} cache: npm
- name: Install dependencies run: npm ci
- name: Run tests run: npm test -- --watch=false
- name: Build run: npm run buildExample caller workflow
Section titled “Example caller workflow”Application repositories call the reusable workflow above with a caller workflow like this.
File path: .github/workflows/node-ci.yml
name: Node CI
on: pull_request: branches: - main push: branches: - main
jobs: node-ci: uses: YOUR_ORG_OR_USER/reusable-workflows/.github/workflows/reusable-node-ci.yml@main with: node-version: "24" secrets: inheritReplace YOUR_ORG_OR_USER with your actual GitHub owner (organization or personal account) and reusable-workflows with your actual repository name.
Choosing a reference: @main vs. a pinned tag
Section titled “Choosing a reference: @main vs. a pinned tag”| Reference | Best for | Trade-off |
|---|---|---|
@main |
Beta testing and rapid iteration | Caller workflows pick up every push to main automatically |
@v1.2.0 (tag) |
Production-style rollouts | Caller workflows only change when you explicitly update the tag |
@stable (branch) |
Controlled releases without semver | Middle ground — promote commits to the branch when ready |
For beta testing, @main is the simplest option. For production-style usage, prefer a version tag or a dedicated release branch so caller repositories do not change unexpectedly when you push to main.
Topic requirement: am-rwx
Section titled “Topic requirement: am-rwx”ActionsManager discovers reusable workflow repositories by looking for the am-rwx GitHub topic. Before selecting a repository as the source for a Reusable Workflow Project, add the am-rwx topic to it:
- Open the repository on GitHub
- Click the gear icon next to About
- Add
am-rwxto the Topics field and save
End-to-end setup walkthrough
Section titled “End-to-end setup walkthrough”- Create a GitHub repository — for example,
reusable-workflows. - Add the
am-rwxtopic to the repository (About → Topics). - Add reusable workflow files under
.github/workflows/. Each file must includeon: workflow_call. - In ActionsManager, click New Project and choose Reusable Workflow Project.
- Select the
reusable-workflowsrepository. - Add or import your reusable workflow YAML inside ActionsManager.
- Create a Caller Workflow Project for your application repositories.
- Link or reference the reusable workflow from the caller workflow project.
- Use PR-based delivery to roll the caller workflow into each target repository.
- Review and merge the generated pull requests before the changes take effect.
- Use drift detection to surface manual edits or outdated caller workflow references over time.
ActionsManager manages workflow definitions — you review the PRs
Section titled “ActionsManager manages workflow definitions — you review the PRs”ActionsManager generates and distributes workflow files, but it does not merge pull requests automatically. Every change lands as a pull request that your team reviews and merges. This keeps the standard GitHub review process intact.
Related topics
Section titled “Related topics”- Reusable Workflows — overview of the producer-consumer model
- Projects — Reusable Workflow Projects and Caller Workflow Projects
- PR Campaigns — roll out changes through reviewable pull requests
- Drift Detection — detect when consumers diverge from the producer
© 2026 ActionsManager. All rights reserved.