Dapatkan tag terdorong saat ini di Tindakan Github

13

Apakah ada cara untuk mengakses tag saat ini yang telah didorong dalam Tindakan Github? Di CircleCI Anda dapat mengakses nilai ini dengan $CIRCLE_TAGvariabel.

Yaml Workflow saya dipicu oleh tag seperti ini:

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

Dan saya ingin menggunakan nomor versi itu sebagai jalur file di alur kerja nanti.

Saya telah memasukkan solusi akhir saya berdasarkan jawaban yang dipilih sebagai jawaban lain di bawah ini: https://stackoverflow.com/a/58195087/756514

Jon B
sumber

Jawaban:

22

Sejauh yang saya tahu tidak ada variabel tag. Namun, dapat diekstraksi dari GITHUB_REFyang berisi referensi yang diperiksa, misalnyarefs/tags/v1.2.3

Coba alur kerja ini. Itu menciptakan variabel lingkungan baru dengan versi yang diekstraksi yang dapat Anda gunakan di langkah selanjutnya.

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 }}

Atau, gunakan 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 }}
peterevans
sumber
1
Itu sempurna terima kasih, hanya satu pertanyaan apa: 10 merujuk? panjang tali?
Jon B
2
Ini berarti mengekstraksi substring mulai dari posisi 10 (pengindeksan berbasis 0). Jadi melompati refs/tags/dan hanya mengembalikan bagian terakhir dari string.
peterevans
Oke, satu pertanyaan lagi, maaf, saya ingin menggunakan variabel $ RELEASE_VERSION untuk membuat jalur tujuan untuk tindakan S3 seperti: DEST_PATH: "${{ secrets.AWS_S3_BUCKET }}/$RELEASE_VERSION"tetapi tidak bisa mendapatkan sintaks yang benar, ada ide? (ini dalam ENV untuk aksi pihak ke-3 yang saya gunakan nanti di omong kosong)
Jon B
1
Lihat dokumentasi di sini untuk ekspresi apa yang diperbolehkan. help.github.com/en/articles/…
peterevans
4
Perhatikan bahwa alih-alih menggunakan ${GITHUB_REF:10}untuk memfilter nama tag, saya akan menggunakan ekspansi parameter ${GITHUB_REF#refs/*/}. Yang akan memperluas /refs/tags/v1.0.1ke v1.0.1seperti yang diharapkan, tapi akan juga bekerja dengan nama cabang: /refs/heads/masterakan diperluas untuk master, melihat gnu.org/software/bash/manual/html_node/...
Stefan Haberl
2

Berikut ini adalah alur kerja yang menunjukkan bahwa GITHUB_REFvariabel lingkungan berisi refs/tags/v0.0.2:

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

Saya menjalankannya dengan membuat tag, lalu melakukan git push origin v0.0.2.

Berikut cuplikan alur kerja yang Anda lihat di log itu:

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'

Karena log itu pada akhirnya akan dihapus (saya tidak tahu berapa lama log Tindakan Github dipertahankan, tapi itu pasti tidak selamanya), inilah screenshot untuk bukti.

masukkan deskripsi gambar di sini

rmunn
sumber
1

Jadi terima kasih atas semua bantuan dari @peterevans saya berhasil mencapai hasil yang saya inginkan yaitu:

  • untuk menandai komit
  • dorong tag untuk memicu aksi github
  • aksi github menetapkan tag git sebagai env var
  • jalankan install & build
  • gunakan chrislennon/action-aws-clitindakan untuk menginstal aws cli menggunakan rahasia untuk kunci
  • jalankan perintah untuk menyinkronkan build ke bucket S3 baru menggunakan tag env var sebagai nama dir

Berikut adalah contoh dari apa yang saya berlari menggunakan tindakan 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/[email protected]
      - 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
Jon B
sumber