Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

To simplify CI across several small repositories, move genuinely repeated work into a shared unit that fits the job: a custom action for a reusable workflow step, or a reusable workflow for shared job-level structure. Then choose deliberately where that shared code lives and how repositories pin its version.

The title mentions EasyAction, but no specific repository, product, or documentation is identified. The guidance here therefore covers GitHub Actions generally; it does not assume EasyAction provides any particular feature.

Find the repetition before extracting it

Start with the workflows you already maintain. Compare recurring tasks such as setting up a language runtime, linting, running tests, packaging, releasing, or deploying. Extract behavior only when it is stable and genuinely shared; similar-looking steps may still need different commands, permissions, or deployment conditions.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Keep repository-specific configuration at the caller boundary where practical. A shared component should make its required inputs, outputs, secrets, and environment variables clear, rather than concealing assumptions about one repository. GitHub recommends documenting those requirements and including an example in an action’s README. GitHub’s custom actions documentation explains the options for creating and sharing actions.

Choose an action or a reusable workflow

GitHub describes actions as “the building blocks that power your workflow.” The distinction that matters when reducing duplication is where the reusable logic sits: actions are called as steps, while reusable workflows are invoked at the job level. GitHub’s reusable workflows documentation describes reusing workflow logic to avoid duplication.

Choose Best fit How callers use it
Custom action A discrete operation that belongs inside a workflow step, such as a shared setup or packaging task. As a step in a job.
Reusable workflow A larger shared job or workflow structure, including the sequence and configuration of jobs. At the job level; the reusable workflow file must be in .github/workflows and declare workflow_call.

A useful test: if callers should retain control of the surrounding job and simply invoke one operation, make an action. If they should share the job or workflow arrangement itself, make a reusable workflow.

Decide where shared code belongs

Use a dedicated repository for a broadly shared action

For an action intended for multiple repositories or other users, a separate repository supports discovery, a narrower code scope, and independent versioning. It also creates a release responsibility: someone must maintain the shared interface and coordinate changes with callers. GitHub recommends a separate repository when developing a custom action for other people. Its guidance on custom actions also covers publishing and documentation.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Keep an application-specific action with its application

If the operation is private and specific to one application, storing it in that repository avoids distribution overhead. GitHub gives .github/actions as an example location for an action used only within its repository. This can make changes easier to coordinate, but does not provide the same independent release path as a dedicated repository.

Keep reusable workflows in the required directory

Reusable workflow files belong in .github/workflows and must include workflow_call. Keep the caller’s repository-specific choices explicit when invoking them, especially for secrets and configuration that should not become hidden shared assumptions.

Set a reference and release policy

A shared component is only useful if callers can consume updates without losing control of what runs. GitHub distinguishes the trade-off: a full commit SHA identifies an immutable revision, while tags and branches are easier to follow but can be moved. Its documentation recommends managing releases and using major versions for breaking changes. Review GitHub’s action versioning guidance when defining the convention for your organization.

  • Full commit SHA: pins a caller to an exact revision and is the strongest option for preventing a reference from being moved accidentally. Updating requires changing the pin.
  • Release or major-version tag: provides a managed update path that is easier for callers to follow. Teams must manage releases consistently, and tags can be moved.
  • Branch reference: can follow ongoing development, but can also change as the branch moves. Use it only when that update behavior is intentional.

Apply one documented policy across repositories where possible, and account for the team’s compatibility and security requirements. For breaking changes, publish a new major version rather than silently changing the behavior callers expect.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Use same-repository references when they fit

On GitHub.com, the newer $/ syntax can reference an action or reusable workflow in the same repository at the exact commit currently running. For this reference, a separate checkout is not required. GitHub announced the feature on July 30, 2026, and says it requires Actions runner version 2.336.0 or newer. Read GitHub’s announcement for the syntax and requirements.

This is relevant when a repository keeps its own shared components alongside its workflows; it is not a replacement for a cross-repository release policy. The announcement establishes the requirement for GitHub.com. Check platform compatibility before relying on this syntax with GitHub Enterprise Server.

Put the pieces together

  1. Inventory current workflows. List recurring tasks across repositories and note differences in commands, permissions, secrets, and conditions.
  2. Group only stable common behavior. Separate truly shared logic from repository-specific configuration.
  3. Choose the shared unit. Package a step-sized operation as an action; use a reusable workflow for shared job or workflow structure.
  4. Choose where it lives. Use a dedicated repository for an action shared broadly, or keep an application-specific action with its application. Put reusable workflow files in .github/workflows and include workflow_call.
  5. Document the interface. State inputs, outputs, secrets, environment variables, and a working caller example.
  6. Pin and release deliberately. Choose a full SHA or a managed tag strategy, document how updates happen, and introduce a new major version for breaking changes.
  7. For same-repository composition on GitHub.com, check runner support. Use the $/ reference only if the repository’s runner version meets GitHub’s 2.336.0-or-newer requirement.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.