Geçerli push etiketini Github Eylemlerinde edinin


13

Bir Github Eyleminde aktarılan geçerli etikete erişmenin bir yolu var mı? CircleCI'de bu değere $CIRCLE_TAGdeğişkenle erişebilirsiniz .

Benim İş Akışı yaml şöyle bir etiket tarafından tetikleniyor:

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

Ve bu sürüm numarasını daha sonra iş akışında bir dosya yolu olarak kullanmak istiyorum.

Son cevabımı seçilen cevaba dayalı olarak aşağıda başka bir cevap olarak ekledim: https://stackoverflow.com/a/58195087/756514

Yanıtlar:


22

Bildiğim kadarıyla hiçbir etiket değişkeni yoktur. Bununla birlikte, GITHUB_REFkontrol edilen referansı içeren örn.refs/tags/v1.2.3

Bu iş akışını deneyin. Sonraki adımlarda kullanabileceğiniz çıkarılan sürümle yeni bir ortam değişkeni oluşturur.

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

Alternatif olarak set-outputşunları kullanın :

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
Bu mükemmel teşekkürler, sadece bir soru nedir: 10 atıfta bulunuyor? IP uzunluğu?
Jon B

2
10. pozisyondan başlayarak alt dizeyi çıkarttığı anlamına gelir (0 tabanlı indeksleme). Böylece atlar refs/tags/ve dizenin son kısmını döndürür.
peterevans

Tamam bir soru daha üzgünüm, böyle bir S3 eylem için bir hedef yol oluşturmak için bu $ RELEASE_VERSION değişkenini kullanmak istiyorum: DEST_PATH: "${{ secrets.AWS_S3_BUCKET }}/$RELEASE_VERSION"ama sözdizimi doğru alamıyorum, herhangi bir fikir? (Bu, daha sonra bu arada yaml'de kullandığım bir 3. taraf eylemi için bir ENV'de)
Jon B

1
Hangi ifadelere izin verildiğini öğrenmek için buradaki belgelere bakın. help.github.com/tr/articles/…
peterevans

4
${GITHUB_REF:10}Etiketin adını filtrelemek yerine kullanmak yerine parametre genişletmeyi kullanacağımı unutmayın ${GITHUB_REF#refs/*/}. Yani artıracağı /refs/tags/v1.0.1için v1.0.1beklendiği gibi, aynı zamanda şube adları ile çalışma olacaktır: /refs/heads/masterhaline getirilebileceğini master, bkz gnu.org/software/bash/manual/html_node/...
Stefan Haberl

2

GITHUB_REFOrtam değişkeninin refs/tags/v0.0.2şunları içerdiğini gösteren bir iş akışı çalışması :

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

Bunu etiketi oluşturarak ve sonra yaparak çalıştırdım git push origin v0.0.2.

İşte o günlükte gördüğünüz iş akışının bir pasajı:

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'

Bu günlük sonunda silineceğinden (Github İşlemleri günlüklerinin ne kadar süreyle saklandığını bilmiyorum, ancak kesinlikle sonsuza kadar değil), kanıt için bir ekran görüntüsü.

resim açıklamasını buraya girin


1

Böylece @peterevans'ın tüm yardımı sayesinde istediğim sonuca ulaşmayı başardım:

  • bir taahhüdü etiketlemek
  • github eylemini tetiklemek için etiketi it
  • github action git etiketini bir env var olarak ayarlar
  • install & build'i çalıştır
  • chrislennon/action-aws-clianahtarlar için sırları kullanarak aws cli yüklemek için eylem kullanın
  • dir adı olarak env var etiketini kullanarak yapıyı yeni bir S3 grubuyla senkronize etmek için command komutunu çalıştırın

İşte Chris Lennon'un eylemini kullanarak koştuğum şeyin bir örneği:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.