{"id":21664383,"url":"https://github.com/wayofdev/gh-actions","last_synced_at":"2025-09-01T20:05:47.451Z","repository":{"id":165928772,"uuid":"639351604","full_name":"wayofdev/gh-actions","owner":"wayofdev","description":"Shared github action workflows for usage in Wayofdev projects.","archived":false,"fork":false,"pushed_at":"2025-03-25T03:10:39.000Z","size":395,"stargazers_count":5,"open_issues_count":6,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-12T00:16:03.561Z","etag":null,"topics":["actions","github-actions","wayofdev","wod"],"latest_commit_sha":null,"homepage":"https://wayof.dev","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wayofdev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"wayofdev"}},"created_at":"2023-05-11T09:44:08.000Z","updated_at":"2025-02-27T15:58:46.000Z","dependencies_parsed_at":"2024-01-08T10:52:45.814Z","dependency_job_id":"56bb57c6-780d-413d-b666-70da0c94f643","html_url":"https://github.com/wayofdev/gh-actions","commit_stats":null,"previous_names":[],"tags_count":5,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wayofdev%2Fgh-actions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wayofdev%2Fgh-actions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wayofdev%2Fgh-actions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wayofdev%2Fgh-actions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wayofdev","download_url":"https://codeload.github.com/wayofdev/gh-actions/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248497818,"owners_count":21113984,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["actions","github-actions","wayofdev","wod"],"created_at":"2024-11-25T10:37:18.233Z","updated_at":"2025-04-12T00:16:11.643Z","avatar_url":"https://github.com/wayofdev.png","language":"Makefile","readme":"\u003cdiv align=\"center\"\u003e\n    \u003cbr\u003e\n    \u003ca href=\"https://wayof.dev\" target=\"_blank\"\u003e\n        \u003cpicture\u003e\n            \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/wayofdev/.github/master/assets/logo.gh-dark-mode-only.png\"\u003e\n            \u003cimg width=\"400\" src=\"https://raw.githubusercontent.com/wayofdev/.github/master/assets/logo.gh-light-mode-only.png\" alt=\"WayOfDev Logo\"\u003e\n        \u003c/picture\u003e\n    \u003c/a\u003e\n    \u003cbr\u003e\n    \u003cbr\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n\u003ca href=\"https://github.com/wayofdev/gh-actions/actions\" target=\"_blank\"\u003e\u003cimg alt=\"Build Status\" src=\"https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fwayofdev%2Fgh-actions%2Fbadge\u0026style=flat-square\u0026label=github%20actions\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/wayofdev/gh-actions\" target=\"_blank\"\u003e\u003cimg alt=\"Commits since latest release\" src=\"https://img.shields.io/github/commits-since/wayofdev/gh-actions/latest?style=flat-square\"\u003e\u003c/a\u003e\n\u003ca href=\"https://discord.gg/CE3TcCC5vr\" target=\"_blank\"\u003e\u003cimg alt=\"Codecov\" src=\"https://img.shields.io/discord/1228506758562058391?style=flat-square\u0026logo=discord\u0026labelColor=7289d9\u0026logoColor=white\u0026color=39456d\"\u003e\u003c/a\u003e\n\u003ca href=\"https://x.com/intent/follow?screen_name=wayofdev\" target=\"_blank\"\u003e\u003cimg alt=\"Follow on Twitter (X)\" src=\"https://img.shields.io/badge/-Follow-black?style=flat-square\u0026logo=X\"\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n# Shared GitHub Actions\n\nThis repository is a collection of [reusable workflows](https://docs.github.com/en/actions/using-workflows/reusing-workflows) and [composite actions](https://docs.github.com/en/actions/creating-actions/creating-a-composite-action), specifically designed for use in [wayofdev](https://github.com/wayofdev) projects.\n\nThese tools encapsulate common and repetitive tasks, allowing for easy integration into multiple projects. This approach not only reduces the need to rewrite code but also ensures standardized operations across all Wayofdev repositories.\n\n\u003cbr\u003e\n\n## 📋 Table of Contents\n\n- [Getting Started](#-getting-started)\n- [Composite Actions](#-composite-actions)\n- [Workflows](#-workflows)\n  - [Auto Label and Release Management](#-auto-label-and-release-management)\n  - [Docker Workflows](#-docker-workflows)\n  - [Code Architecture](#-code-architecture)\n  - [Static Analysis](#-static-analysis)\n- [Security Policy](#-security-policy)\n- [Contributing](#-want-to-contribute)\n- [Social Links](#-social-links)\n- [Contributors](#-contributors)\n- [Useful Resources](#-useful-resources)\n- [License](#%EF%B8%8F-license)\n\n\u003cbr\u003e\n\n## 🚀 Getting Started\n\nTo use these workflows and actions, reference them directly from your project's workflows. Detailed instructions for each are provided below.\n\n\u003cbr\u003e\n\n## 🔧 Composite Actions\n\nComposite Actions are a powerful feature of GitHub Actions that allow you to create reusable actions using a combination of other actions, shell commands, or both.\n\nThis enables you to encapsulate a sequence of steps into a single action, making your workflows more modular, easier to maintain, and reducing duplication across your projects.\n\nComposite Actions can accept inputs and use outputs, making them highly flexible and adaptable to various use cases.\n\nCheck each action's README file for detailed instructions on how to use it.\n\n| **Action**                                                                         | **Description**                                                                                    |\n|------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------|\n| [`composer/get-cache-directory`](./actions/composer/get-cache-directory/README.md) | Gets the Composer cache directory path and exports it as env variable.                             |\n| [`composer/get-root-version`](./actions/composer/get-root-version/README.md)       | determines the Composer root version based on the specified branch and exports it as env variable. |\n| [`composer/install`](./actions/composer/install/README.md)                         | Installs dependencies with Composer based on the specified dependency level.                       |\n| [`phive/install`](./actions/phive/install/README.md)                               | Install dependencies with [Phive](https://phar.io).                                                |\n| [`playwright/install`](./actions/playwright/install/README.md)                     | Installs [Playwright](https://playwright.dev/) along with its dependencies.                        |\n| [`pnpm/install`](./actions/pnpm/install/README.md)                                 | Installs mono-repository dependencies using [PNPM](https://pnpm.io/).                              |\n| [`s3/cache`](./actions/s3/cache/README.md)                                         | Cache artifacts, or restore them using S3.                                                         |\n\n\u003cbr\u003e\n\n## 🔧 Workflows\n\nRead more about [reusing workflows](https://docs.github.com/en/actions/using-workflows/reusing-workflows).\n\n### → Auto Label and Release Management\n\n#### `apply-labels.yml:`\n\nAutomatically applies labels to pull requests based on modified paths.\n\nThis workflow triages pull requests and applies labels based on the paths that are modified in the pull request. This can help to categorize your pull requests and make it easier to identify the type of changes included.\n\nTo use this workflow, set up a `.github/labeler.yml` file with your configuration in your project. For more information on how to configure the labeler, see: \u003chttps://github.com/actions/labeler/blob/master/README.md\u003e\n\nHere is an example of how to use this workflow:\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003e.github/workflows/apply-labels.yml\u003c/code\u003e\u003c/summary\u003e\n\n```yaml\n---\n\non:\n  pull_request:\n\nname: 🏷️ Add labels\n\njobs:\n  label:\n    uses: wayofdev/gh-actions/.github/workflows/apply-labels.yml@master\n    with:\n      os: ubuntu-latest\n    secrets:\n      token: ${{ secrets.GITHUB_TOKEN }}\n\n...\n```\n\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003e.github/labeler.yml\u003c/code\u003e\u003c/summary\u003e\n\n```yaml\n---\n\n\"type: bug\":\n    - head-branch: ['^bug', '^fix', 'bug', 'fix']\n\n\"type: enhancement\":\n    - head-branch: ['^feature', '^feat', 'feature']\n\n\"type: documentation\":\n    - changed-files:\n          - any-glob-to-any-file: ['assets/**/*', '.github/*', './*.md']\n\n\"type: maintenance\":\n    - changed-files:\n          - any-glob-to-any-file: ['tests/**/*', '.github/workflows/*']\n\n...\n```\n\n\u003c/details\u003e\n\nReal-world examples can be found in the [`wayofdev/laravel-package-tpl`](https://github.com/wayofdev/laravel-package-tpl/blob/master/.github/workflows/apply-labels.yml) repository.\n\n\u003cbr\u003e\n\n#### `auto-merge-release.yml:`\n\nThis workflow automatically merges releases. This workflow utilizes [peter-evans/enable-pull-request-automerge](https://github.com/peter-evans/enable-pull-request-automerge) to auto-merge releases that are created by [googleapis/release-please](https://github.com/googleapis/release-please).\n\nHere is an example of how to use this workflow:\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003e.github/workflows/auto-merge-release.yml\u003c/code\u003e\u003c/summary\u003e\n\n```yaml\n---\n\non:  # yamllint disable-line rule:truthy\n  pull_request:\n\npermissions:\n  pull-requests: write\n  contents: write\n\nname: 🤞 Auto merge release\n\njobs:\n  auto-merge:\n    uses: wayofdev/gh-actions/.github/workflows/auto-merge-release.yml@master\n    with:\n      os: ubuntu-latest\n      pull-request-number: ${{ github.event.pull_request.number }}\n      actor: lotyp\n      merge-method: merge\n    secrets:\n      # to trigger other workflows, pass PAT token instead of GITHUB_TOKEN\n      token: ${{ secrets.PERSONAL_GITHUB_TOKEN }}\n\n...\n```\n\n\u003c/details\u003e\n\nReal-world examples can be found in the [`wayofdev/laravel-package-tpl`](https://github.com/wayofdev/laravel-package-tpl/blob/master/.github/workflows/auto-merge-release.yml) repository.\n\n\u003cbr\u003e\n\n#### `create-changesets-release.yml:`\n\nThis workflow creates a release based on changesets. This workflow utilizes [changesets/action](https://github.com/changesets/action) to create a release based on changesets.\n\nHere is an example of how to use this workflow:\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003e.github/workflows/create-changesets-release.yml\u003c/code\u003e\u003c/summary\u003e\n\n```yaml\n---\non: # yamllint disable-line rule:truthy\n    push:\n        branches:\n            - master\n\nname: 🦋 Create release or publish to pnpm\n\njobs:\n    release:\n        uses: wayofdev/gh-actions/.github/workflows/create-changesets-release.yml@master\n        with:\n            node: 18\n            repository: wayofdev/next-starter-tpl\n        secrets:\n            # to trigger other workflows, pass PAT token instead of GITHUB_TOKEN\n            token: ${{ secrets.PERSONAL_GITHUB_TOKEN }}\n            npm_token: ${{ secrets.NPM_TOKEN }}\n\n...\n```\n\n\u003c/details\u003e\n\nReal-world examples can be found in the [`wayofdev/next-starter-tpl`](https://github.com/wayofdev/next-starter-tpl/blob/master/.github/workflows/create-changesets-release.yml) repository.\n\n\u003cbr\u003e\n\n### → Docker Workflows\n\n#### `build-image.yml:`\n\nThis workflow builds a docker image and pushes it to the Docker Container Registry.\n\nExample repositories, using this workflow:\n\n- [wayofdev/docker-node](https://github.com/wayofdev/docker-node)\n\n**Build image with \"release\" tag:**\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003e.github/workflows/build-release.yml\u003c/code\u003e\u003c/summary\u003e\n\n```yaml\n---\n\non:  # yamllint disable-line rule:truthy\n  release:\n    types:\n      - released\n\nname: 🚀 Build docker images with release tag\n\njobs:\n  prepare:\n    runs-on: \"ubuntu-latest\"\n    outputs:\n      matrix: ${{ steps.matrix.outputs.matrix }}\n      version: ${{ steps.version.outputs.version }}\n    steps:\n      - name: ⚙️ Generate matrix\n        id: matrix\n        run: |\n          echo 'matrix={\n            \"os_name\": [\"alpine\"],\n            \"php_version\": [\"8.1\", \"8.2\"],\n            \"php_type\": [\"fpm\", \"cli\", \"supervisord\"]\n          }' | tr -d '\\n' \u003e\u003e $GITHUB_OUTPUT\n\n      - name: ⚙️ Get version for image tag\n        id: version\n        run: |\n          version=${{ github.ref_name }}\n          version=${version#v}\n          echo \"version=$version\" \u003e\u003e $GITHUB_OUTPUT\n\n  build:\n    needs: prepare\n    strategy:\n      matrix: ${{ fromJson(needs.prepare.outputs.matrix )}}\n    uses: wayofdev/gh-actions/.github/workflows/build-image.yml@master\n    with:\n      os: \"ubuntu-latest\"\n      push-to-hub: true\n      image-namespace: \"wayofdev/php-base\"\n      image-template-path: \"./dist/base\"\n      image-template: ${{ matrix.php_version }}-${{ matrix.php_type }}-${{ matrix.os_name }}\n      image-version: ${{ needs.prepare.outputs.version }}\n    secrets:\n      docker-username: ${{ secrets.DOCKER_USERNAME }}\n      docker-password: ${{ secrets.DOCKER_TOKEN }}\n\n...\n```\n\n\u003c/details\u003e\n\nReal-world examples can be found in the [`wayofdev/docker-node`](https://github.com/wayofdev/docker-node/blob/master/.github/workflows/build-release.yml) repository.\n\n\u003cbr\u003e\n\n### → Code Architecture\n\n#### `create-arch-diagram.yml:`\n\nThis workflow leverages the [codesee-io/codesee-action](https://github.com/Codesee-io/codesee-action) action to automatically generate architecture diagrams for your codebase whenever a pull request is made.\n\nCodeSee is an open-source tool that helps visualize your codebase and its dependencies, making it easier for new contributors to understand the project or for maintaining a clear view of your project's architecture over time.\n\nHere is an example of how to use this workflow:\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003e.github/workflows/create-arch-diagram.yml\u003c/code\u003e\u003c/summary\u003e\n\n```yaml\n---\n\non:  # yamllint disable-line rule:truthy\n  push:\n    branches:\n      - develop\n  pull_request_target:\n    types:\n      - opened\n      - synchronize\n      - reopened\n\nname: 🤖 CodeSee\n\npermissions: read-all\n\njobs:\n  codesee:\n    uses: wayofdev/gh-actions/.github/workflows/create-arch-diagram.yml@master\n    with:\n      os: ubuntu-latest\n      continue-on-error: true\n    secrets:\n      codesee-token: ${{ secrets.CODESEE_ARCH_DIAG_API_TOKEN }}\n\n...\n```\n\n\u003c/details\u003e\n\nReal-world examples can be found in the [`wayofdev/laravel-package-tpl`](https://github.com/wayofdev/laravel-package-tpl/blob/master/.github/workflows/create-arch-diagram.yml) repository.\n\n\u003cbr\u003e\n\n### → Static Analysis\n\n#### `shellcheck.yml:`\n\nThis workflow uses [redhat-plumbers-in-action/differential-shellcheck](https://github.com/redhat-plumbers-in-action/differential-shellcheck) to run shell script analysis.\n\nHere is an example of how to use this workflow:\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003e.github/workflows/shellcheck.yml\u003c/code\u003e\u003c/summary\u003e\n\n```yaml\n---\n\non:  # yamllint disable-line rule:truthy\n  pull_request:\n\nname: 🐞 Differential shell-check\n\npermissions:\n  contents: read\n\njobs:\n  shellcheck:\n    uses: wayofdev/gh-actions/.github/workflows/shellcheck.yml@master\n    with:\n      os: ubuntu-latest\n      severity: warning\n    secrets:\n      token: ${{ secrets.GITHUB_TOKEN }}\n\n...\n```\n\n\u003c/details\u003e\n\nReal-world examples can be found in the [`wayofdev/laravel-package-tpl`](https://github.com/wayofdev/laravel-package-tpl/blob/master/.github/workflows/shellcheck.yml) repository.\n\n\u003cbr\u003e\n\n## 🔒 Security Policy\n\nThis project has a [security policy](.github/SECURITY.md).\n\n\u003cbr\u003e\n\n## 🙌 Want to Contribute?\n\nThank you for considering contributing to the wayofdev community! We are open to all kinds of contributions. If you want to:\n\n- 🤔 [Suggest a feature](https://github.com/wayofdev/gh-actions/issues/new?assignees=\u0026labels=type%3A+enhancement\u0026projects=\u0026template=2-feature-request.yml\u0026title=%5BFeature%5D%3A+)\n- 🐛 [Report an issue](https://github.com/wayofdev/gh-actions/issues/new?assignees=\u0026labels=type%3A+documentation%2Ctype%3A+maintenance\u0026projects=\u0026template=1-bug-report.yml\u0026title=%5BBug%5D%3A+)\n- 📖 [Improve documentation](https://github.com/wayofdev/gh-actions/issues/new?assignees=\u0026labels=type%3A+documentation%2Ctype%3A+maintenance\u0026projects=\u0026template=4-docs-bug-report.yml\u0026title=%5BDocs%5D%3A+)\n- 👨‍💻 Contribute to the code\n\nYou are more than welcome. Before contributing, kindly check our [contribution guidelines](.github/CONTRIBUTING.md).\n\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg?style=for-the-badge)](https://conventionalcommits.org)\n\n\u003cbr\u003e\n\n## 🌐 Social Links\n\n- **Twitter:** Follow our organization [@wayofdev](https://twitter.com/intent/follow?screen_name=wayofdev) and the author [@wlotyp](https://twitter.com/intent/follow?screen_name=wlotyp).\n- **Discord:** Join our community on [Discord](https://discord.gg/CE3TcCC5vr).\n\n\u003cbr\u003e\n\n## 🫡 Contributors\n\n\u003ca href=\"https://github.com/wayofdev/gh-actions/graphs/contributors\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/github/contributors-anon/wayofdev/gh-actions?style=for-the-badge\" alt=\"Contributors Badge\"/\u003e\u003c/a\u003e\n\n\u003cbr\u003e\n\n## 🧱 Useful Resources\n\n- [Composite Actions vs Reusable Workflows: what is the difference?](https://dev.to/n3wt0n/composite-actions-vs-reusable-workflows-what-is-the-difference-github-actions-11kd)\n\n- [cycle/gh-actions](https://github.com/cycle/gh-actions) — Downstream repository of reusable GitHub Actions for [Cycle](https://github.com/cycle) organization.\n\n- [ergebnis/.github](https://github.com/ergebnis/.github) — Shareable actions of the [@ergebnis](https://github.com/ergebnis) organization.\n\n- [skills/reusable-workflows](https://github.com/skills/reusable-workflows) — Reusable workflow examples\n\n\u003cbr\u003e\n\n## ⚖️ License\n\n[![Licence](https://img.shields.io/github/license/wayofdev/gh-actions?style=for-the-badge\u0026color=blue)](./LICENSE.md)\n\n\u003cbr\u003e\n","funding_links":["https://github.com/sponsors/wayofdev"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwayofdev%2Fgh-actions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwayofdev%2Fgh-actions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwayofdev%2Fgh-actions/lists"}