{"id":22725654,"url":"https://github.com/maremare/try-github-reusable-workflows","last_synced_at":"2025-04-13T20:43:40.133Z","repository":{"id":103684655,"uuid":"554100917","full_name":"MareMare/try-github-reusable-workflows","owner":"MareMare","description":"🧪 Reusing workflows のおためし","archived":false,"fork":false,"pushed_at":"2024-07-09T01:19:06.000Z","size":41,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-07-09T05:03:54.092Z","etag":null,"topics":["actions","github-actions"],"latest_commit_sha":null,"homepage":"","language":null,"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/MareMare.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-19T08:50:58.000Z","updated_at":"2024-07-09T05:03:56.021Z","dependencies_parsed_at":"2023-12-07T21:23:42.619Z","dependency_job_id":"14abf064-b684-4ba3-a159-e4c69b326249","html_url":"https://github.com/MareMare/try-github-reusable-workflows","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MareMare%2Ftry-github-reusable-workflows","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MareMare%2Ftry-github-reusable-workflows/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MareMare%2Ftry-github-reusable-workflows/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MareMare%2Ftry-github-reusable-workflows/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MareMare","download_url":"https://codeload.github.com/MareMare/try-github-reusable-workflows/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229089187,"owners_count":18018391,"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"],"created_at":"2024-12-10T16:13:28.176Z","updated_at":"2024-12-10T16:13:28.966Z","avatar_url":"https://github.com/MareMare.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# try-github-reusable-workflows\n 🧪 Reusing workflows のおためし\n\n## カスタムな GitHub Actions を使用する方法\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003ejobs.\u003cjob_id\u003e.steps[*].uses\u003c/code\u003e で指定する例：\u003c/summary\u003e\n\n「[jobs\\.\u003cjob\\_id\u003e\\.steps\\[\\*\\]\\.uses]」には、次の記載があります。\n\u003e ジョブのステップの一部として実行するアクションを選択します。アクションは、再利用可能なコードの単位です。**ワークフローと同じリポジトリ、パブリック リポジトリ**、または**公開された Docker コンテナ イメージ**で定義されたアクションを使用できます。\n\n1. [Example: Using a public action] `{owner}/{repo}@{ref}`\n    ```yml\n    jobs:\n      my_first_job:\n        steps:\n        - name: My first step\n          # Uses the default branch of a public repository\n          uses: actions/heroku@main\n        - name: My second step\n          # Uses a specific version tag of a public repository\n          uses: actions/aws@v2.0.1\n    ```\n2. [Example: Using a public action in a subdirectory] `{owner}/{repo}/{path}@{ref}`\n    ```yml\n    jobs:\n      my_first_job:\n        steps:\n        - name: My first step\n          uses: actions/aws/ec2@main\n    ```\n3. [Example: Using an action in the same repository as the workflow] `./path/to/dir`\n    ```yml\n    jobs:\n      my_first_job:\n        steps:\n        - name: Check out repository\n          uses: actions/checkout@v3\n        - name: Use local my-action\n          uses: ./.github/actions/my-action\n    ```\n4. [Example: Using a Docker Hub action] `docker://{image}:{tag}`\n    ```yml\n    jobs:\n      my_first_job:\n        steps:\n        - name: My first step\n          uses: docker://alpine:3.8\n    ```\n5. [Example: Using the GitHub Packages Container registry] `docker://{host}/{image}:{tag}`\n    ```yml\n    jobs:\n      my_first_job:\n        steps:\n        - name: My first step\n          uses: docker://ghcr.io/OWNER/IMAGE_NAME\n    ```\n6. [Example: Using a Docker public registry action] `docker://{host}/{image}:{tag}`\n    ```yml\n    jobs:\n      my_first_job:\n        steps:\n        - name: My first step\n          uses: docker://gcr.io/cloud-builders/gradle\n    ```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eワークフローとは異なる private リポジトリ内のアクションを使用する例：\u003c/summary\u003e\n\nどうやら、ワークフローのリポジトリに private リポジトリを取り込んで action を使用する模様。\n* [Example: Using an action inside a different private repository than the workflow]\n    \u003e ワークフローでは、プライベートリポジトリをチェックアウトし、アクションをローカルで参照する必要があります。個人用アクセストークンを生成し、そのトークンを暗号化されたシークレットとして追加します。詳しい情報については「[個人用アクセストークンの作成]」および「[暗号化されたシークレット]」を参照してください。\n    ```yml\n    jobs:\n      my_first_job:\n        steps:\n        - name: Check out repository\n          uses: actions/checkout@v3\n          with:\n            repository: octocat/my-private-repo\n            ref: v1.0\n            token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}\n            path: ./.github/actions/my-private-repo\n        - name: Run my action\n          uses: ./.github/actions/my-private-repo/my-action\n    ```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eワークフローとは異なる public リポジトリ内の reusable workflow を使用する例：\u003c/summary\u003e\n\n[Reusing workflows \\- GitHub Docs](https://docs.github.com/en/actions/using-workflows/reusing-workflows) によると再利用可能なワークフローを纏めたリポジトリから直接使用することができるらしい。\n\n* 再利用可能なワークフローの例\n  ```yml\n  name: Reusable workflow example\n\n  on:\n    workflow_call:\n      inputs:\n        config-path:\n          required: true\n          type: string\n      secrets:\n        token:\n          required: true\n\n  jobs:\n    triage:\n      runs-on: ubuntu-latest\n      steps:\n      - uses: actions/labeler@v4\n        with:\n          repo-token: ${{ secrets.token }}\n          configuration-path: ${{ inputs.config-path }}\n  ```\n\n* 再利用可能なワークフローの呼び出し例\n  ```yml\n  name: Call a reusable workflow\n\n  on:\n    pull_request:\n      branches:\n        - main\n\n  jobs:\n    call-workflow:\n      uses: octo-org/example-repo/.github/workflows/workflow-A.yml@v1\n\n    call-workflow-passing-data:\n      permissions:\n        contents: read\n        pull-requests: write\n      uses: octo-org/example-repo/.github/workflows/workflow-B.yml@main\n      with:\n        config-path: .github/labeler.yml\n      secrets:\n        token: ${{ secrets.GITHUB_TOKEN }}\n  ```\n\n\u003c/details\u003e\n\n\u003c!-- リンク --\u003e\n[jobs\\.\u003cjob\\_id\u003e\\.steps\\[\\*\\]\\.uses]: https://docs.github.com/ja/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsuses\n\n[Example: Using a public action]: https://docs.github.com/ja/actions/using-workflows/workflow-syntax-for-github-actions#example-using-a-public-action\n\n[Example: Using a public action in a subdirectory]: https://docs.github.com/ja/actions/using-workflows/workflow-syntax-for-github-actions#example-using-a-public-action-in-a-subdirectory\n\n[Example: Using an action in the same repository as the workflow]: https://docs.github.com/ja/actions/using-workflows/workflow-syntax-for-github-actions#example-using-an-action-in-the-same-repository-as-the-workflow\n\n[Example: Using a Docker Hub action]: https://docs.github.com/ja/actions/using-workflows/workflow-syntax-for-github-actions#example-using-a-docker-hub-action\n\n[Example: Using the GitHub Packages Container registry]: https://docs.github.com/ja/actions/using-workflows/workflow-syntax-for-github-actions#example-using-the-github-packages-container-registry\n\n[Example: Using a Docker public registry action]: https://docs.github.com/ja/actions/using-workflows/workflow-syntax-for-github-actions#example-using-a-docker-public-registry-action\n\n[Example: Using an action inside a different private repository than the workflow]: https://docs.github.com/ja/actions/using-workflows/workflow-syntax-for-github-actions#example-using-an-action-inside-a-different-private-repository-than-the-workflow\n\n[個人用アクセストークンの作成]: https://docs.github.com/ja/github/authenticating-to-github/creating-a-personal-access-token\n[暗号化されたシークレット]: https://docs.github.com/ja/actions/reference/encrypted-secrets\n\n## Deprecating save-state and set-output commands な件\n\n2022/10/11 から非推奨になったみたい。\n* [GitHub Actions: Deprecating save\\-state and set\\-output commands \\| GitHub Changelog](https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/)\n\n❌ いままで\n```yml\n- name: Save state\n  run: echo \"::save-state name={name}::{value}\"\n\n- name: Set output\n  run: echo \"::set-output name={name}::{value}\"\n```\n\n✅ これから\n```yml\n- name: Save state\n  run: echo \"{name}={value}\" \u003e\u003e $GITHUB_STATE\n\n- name: Set output\n  run: echo \"{name}={value}\" \u003e\u003e $GITHUB_OUTPUT\n```\n\n## 条件に応じて [jobs.\u003cjob_id\u003e.runs-on] を指定する方法\n\n❌ `runs-on: ${{ inputs.runs-on }}` などと指定できない\n\n\u003cdetails\u003e\n\u003csummary\u003esyntax errorになるワークフローの例:\u003c/summary\u003e\n\u003cdiv\u003e\n\n```yml\nname: 09.choice-runner-os\non:\n  workflow_dispatch:\n    inputs:\n      runs-on:\n        description: 'OS'\n        required: true\n        defaults: \"ubuntu-latest\"\n        type: choice\n        options:\n          - \"ubuntu-latest\"\n          - \"windows-latest\"\njobs:\n  sample:\n  runs-on: ${{ inputs.runs-on }} # ❌ `Invalid workflow file. You have an error in your yaml syntax on line 15`\n  steps:\n    - name: おためし\n      run: echo \"runs on ${{ inputs.runs-on }}\"\n```\n\n\u003c/details\u003e\n\n✅ `runs-on: ${{ needs.setup.outputs.runner }}` などで指定できる\n\n[Specify runner to be used depending on condition in a GitHub Actions workflow \\- Stack Overflow](https://stackoverflow.com/questions/71961921/specify-runner-to-be-used-depending-on-condition-in-a-github-actions-workflow/71973229#71973229) \n\n\u003cdetails\u003e\n\u003csummary\u003e回避策を施したワークフローの例:\u003c/summary\u003e\n\u003cdiv\u003e\n\n```yml\nname: 09.choice-runner-os\non:\n  workflow_dispatch:\n    inputs:\n      runs-on:\n        description: 'OS'\n        required: true\n        defaults: \"ubuntu-latest\"\n        type: choice\n        options:\n          - \"ubuntu-latest\"\n          - \"windows-latest\"\njobs:\n  setup:\n    runs-on: ubuntu-latest\n    outputs:\n      runner: ${{ steps.step1.outputs.os }}\n    steps:\n    - name: 🎯 Determine OS\n      id: step1\n      run: |\n        if [[ '${{ inputs.runs-on }}' == windows* ]]; then\n          echo \"os=windows-latest\" \u003e\u003e $GITHUB_OUTPUT\n        elif [[ '${{ inputs.runs-on }}' == macos* ]]; then\n          echo \"os=macos-latest\" \u003e\u003e $GITHUB_OUTPUT\n        else\n          echo \"os=ubuntu-latest\" \u003e\u003e $GITHUB_OUTPUT\n        fi\n    - name: Determine OS結果 - '${{ steps.step1.outputs.os }}'\n      run: echo \"Determine OS結果 - '${{ steps.step1.outputs.os }}'\"\n\n  sample:\n    needs: setup\n    runs-on: ${{ needs.setup.outputs.runner }}\n    steps:\n    - name: おためし\n      run: |\n          echo \"💡 This workflow on ${{ github.repository }} was started by ${{ github.actor }}\"\n          echo \"\"\n          echo \"📝 The runner context is:\"\n          echo \"${{ toJson(runner) }}\"\n          echo \"\"\n```\n\n\u003c/details\u003e\n\n\u003c!-- リンク --\u003e\n[jobs.\u003cjob_id\u003e.runs-on]: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on\n\n\n## 環境変数を渡せるのか？\n直では無理ポイ。[jobs.\u003cjob_id\u003e.outputs] に一度格納してからだと行けるらしい…\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ca ref='https://stackoverflow.com/a/73305536/3363518'\u003eStack Overflow\u003c/a\u003e 記載の回答例:\u003c/summary\u003e\n\u003cdiv\u003e\n\n```yml\nenv:\n  SOME_VAR: bla_bla_bla\n  ANOTHER_VAR: stuff_stuff\n\njobs:\n  print:\n    runs-on: ubuntu-latest\n    outputs:\n      some_var: ${{ steps.step1.outputs.some_var }}\n      another_var: ${{ steps.step1.outputs.another_var }}   \n    steps:\n      - name: Print inputs passed to the reusable workflow\n        id: step1\n        run: |\n          echo \"some var: $SOME_VAR\"\n          echo \"::set-output name=some_var::$SOME_VAR\"\n          echo \"another var: $ANOTHER_VAR\"\n          echo \"::set-output name=another_var::$ANOTHER_VAR\"\n  \n  call_reusable:\n    needs:\n      - print\n    uses: ...\n    with:\n      input_var: ${{ needs.print.outputs.some_var }}\n      another_input_var: ${{ needs.print.outputs.another_var }}\n```\n\n\u003c/details\u003e\n\n### 参考\n* [Passing Environment Variables to Reusable Workflow · Discussion \\#26671 · community](https://github.com/orgs/community/discussions/26671)\n* [github actions \\- Passing env variable inputs to a reusable workflow \\- Stack Overflow](https://stackoverflow.com/a/73305536/3363518)\n\n\u003c!-- リンク --\u003e\n[jobs.\u003cjob_id\u003e.outputs]: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idoutputs\n\n## あとで試そう\n\n\u003e **Note**\n\u003e \n\u003e どうやら private repo 内のワークフローやアクションを利用できるようになったみたい。\n\u003e * [GitHub Actions \\- Sharing actions and reusable workflows from private repositories is now GA \\| GitHub Changelog](https://github.blog/changelog/2022-12-14-github-actions-sharing-actions-and-reusable-workflows-from-private-repositories-is-now-ga/)\n\u003e * [リポジトリの GitHub Actions の設定を管理する \\- GitHub Docs](https://docs.github.com/ja/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository)\n\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaremare%2Ftry-github-reusable-workflows","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaremare%2Ftry-github-reusable-workflows","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaremare%2Ftry-github-reusable-workflows/lists"}