Githubアクションで現在プッシュされているタグを取得する


13

Githubアクションでプッシュされた現在のタグにアクセスする方法はありますか?CircleCIでは、$CIRCLE_TAG変数を使用してこの値にアクセスできます。

私のワークフローyamlは次のようなタグによってトリガーされています。

on:
  push:
    tags:
      - 'v*.*.*'

ワークフローの後半で、そのバージョン番号をファイルパスとして使用したいと思います。

以下の別の回答として、選択した回答に基づいて私の最終的なソリューションを含めました:https : //stackoverflow.com/a/58195087/756514

回答:


22

私の知る限り、タグ変数はありません。ただし、GITHUB_REFチェックアウトされた参照を含むものから抽出できます。たとえば、refs/tags/v1.2.3

このワークフローを試してください。抽出されたバージョンで新しい環境変数が作成され、後のステップで使用できます。

on:
  push:
    tags:
      - 'v*.*.*'
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Set env
        run: echo ::set-env name=RELEASE_VERSION::${GITHUB_REF:10}
      - name: Test
        run: |
          echo $RELEASE_VERSION
          echo ${{ env.RELEASE_VERSION }}

または、次を使用しますset-output

on:
  push:
    tags:
      - 'v*.*.*'
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Set output
        id: vars
        run: echo ::set-output name=tag::${GITHUB_REF:10}
      - name: Check output
        env:
          RELEASE_VERSION: ${{ steps.vars.outputs.tag }}
        run: |
          echo $RELEASE_VERSION
          echo ${{ steps.vars.outputs.tag }}

1
それは申し分なく感謝です、ただ一つの質問:10が何を指しているのですか?文字列の長さ?
Jon B

2
これは、10番目の位置から始まる部分文字列を抽出していることを意味します(0ベースのインデックス)。したがって、スキップrefs/tags/して文字列の最後の部分を返すだけです。
peterevans

もう1つ質問があります。申し訳ありません。$ RELEASE_VERSION変数を使用して、S3アクションの宛先パスを次のように作成したいと思いDEST_PATH: "${{ secrets.AWS_S3_BUCKET }}/$RELEASE_VERSION"ます。(これは後でyamlで使用するサードパーティアクションのENVにあります)
Jon B

1
許可される式については、こちらのドキュメントをご覧ください。help.github.com/en/articles/...
peterevans

4
${GITHUB_REF:10}タグの名前をフィルタリングするために使用する代わりに、パラメータ展開を使用することに注意してください${GITHUB_REF#refs/*/}。それは期待通りに拡張/refs/tags/v1.0.1v1.0.1れますが、ブランチ名でも機能します:/refs/heads/masterに拡張されmasterます。gnu.org/ software / bash / manual / html_node /…を
Stefan Haberl

2

以下は、GITHUB_REF環境変数に以下が含まれていることを示すワークフロー実行ですrefs/tags/v0.0.2

https://github.com/rmunn/Testing/runs/242676390

私は、タグを作成してそれを実行しましたgit push origin v0.0.2

そのログに表示されるワークフローのスニペットを次に示します。

steps:
- uses: actions/checkout@v1
- name: Dump GitHub context
  env:
    GITHUB_CONTEXT: ${{ toJson(github) }}
  run: echo "$GITHUB_CONTEXT"
  if: runner.os != 'Windows'
- name: Show GitHub ref
  run: echo "$GITHUB_REF"
  if: runner.os != 'Windows'
- name: Dump event JSON
  env:
    EVENT_JSON_FILENAME: ${{ github.event_path }}
  run: cat "$EVENT_JSON_FILENAME"
  if: runner.os != 'Windows'

そのログは最終的に削除されるため(Githubアクションログが保持される期間はわかりませんが、永久に保持されるわけではありません)、ここに証拠のスクリーンショットを示します。

ここに画像の説明を入力してください


1

だから@peterevansからのすべての助けのおかげで、私は私が望んだ結果を達成することができました:

  • コミットにタグを付ける
  • タグをプッシュしてgithubアクションをトリガーします
  • githubアクションはgitタグを環境変数として設定します
  • インストールとビルドを実行する
  • 使用chrislennon/action-aws-cliキーの秘密を使用してAWS CLIをインストールするためのアクション
  • タグenv varをディレクトリ名として使用して、ビルドを新しいS3バケットに同期するコマンドを実行します

以下は、Chris Lennonのアクションを使用して実行したものの例です。

on:
  push:
    tags:
      - 'v*.*.*'
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Set env
        run: echo ::set-env name=RELEASE_VERSION::$(echo ${GITHUB_REF:10})
      - name: yarn install & build
        run: |
          yarn install
          yarn build
      - uses: chrislennon/action-aws-cli@v1.1
      - name: Publish to AWS S3
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
        run: aws s3 sync dist s3://$AWS_S3_BUCKET/$RELEASE_VERSION/ --acl public-read
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.