Github Actions में वर्तमान पुश किया हुआ टैग प्राप्त करें


13

क्या वर्तमान टैग को एक्सेस करने का कोई तरीका है जिसे एक Github Action में धकेला गया है? CircleCI में आप $CIRCLE_TAGवैरिएबल के साथ इस मान को एक्सेस कर सकते हैं ।

मेरे वर्कफ़्लो याम्ल को एक टैग द्वारा ट्रिगर किया जा रहा है जैसे:

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

और मैं उस संस्करण संख्या का उपयोग बाद में वर्कफ़्लो में फ़ाइल पथ के रूप में करना चाहता हूं।

मैंने नीचे दिए गए उत्तर के आधार पर अपने अंतिम समाधान को एक और उत्तर के रूप में शामिल किया है: https://stackoverflow.com/a/58195087/754414

जवाबों:


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 का जिक्र है? स्ट्रिंग लंबाई?
जॉन बी

2
इसका मतलब है कि यह 10 वें स्थान (0-आधारित इंडेक्सिंग) पर शुरू होने वाले सबस्ट्रिंग को निकाल रहा है। तो यह रुक जाता है refs/tags/और बस स्ट्रिंग के आखिरी हिस्से को वापस कर देता है।
पेटेरेवन्स

ठीक है एक और सवाल क्षमा करें, मैं उस $ SELEASE_VERSION चर का उपयोग करना चाहता हूं ताकि S3 कार्रवाई के लिए एक गंतव्य पथ बनाया DEST_PATH: "${{ secrets.AWS_S3_BUCKET }}/$RELEASE_VERSION"जा सके: लेकिन वाक्यविन्यास सही नहीं मिल सकता है, कोई विचार? (यह एक 3rd पार्टी एक्शन के लिए एक ENV में है जिसे मैं बाद में रास्ते में yaml में उपयोग करता हूं)
जॉन B

1
क्या अभिव्यक्ति की अनुमति है के लिए यहां प्रलेखन देखें। help.github.com/en/articles/…
peterevans

4
ध्यान दें कि ${GITHUB_REF:10}टैग के नाम को फ़िल्टर करने के लिए मैं पैरामीटर विस्तार का उपयोग करूंगा ${GITHUB_REF#refs/*/}। यही कारण है कि विस्तार होगा /refs/tags/v1.0.1करने के लिए v1.0.1के रूप में उम्मीद, लेकिन यह भी शाखा नामों के साथ काम करेंगे: /refs/heads/masterतक बढ़ाया जाएगा, master, देख gnu.org/software/bash/manual/html_node/...
स्टीफन 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 Actions लॉग कितनी देर तक बनाए रखा जाता है, लेकिन यह निश्चित रूप से हमेशा के लिए नहीं है), यहां साक्ष्य के लिए एक स्क्रीनशॉट है।

यहां छवि विवरण दर्ज करें


1

तो @peterevans से सभी मदद के लिए धन्यवाद, मैं वह परिणाम प्राप्त करने में कामयाब रहा जो मुझे चाहिए था:

  • कमिट करना
  • गिथब एक्शन को ट्रिगर करने के लिए टैग पुश करें
  • github एक्शन एक gv टैग के रूप में git टैग सेट करता है
  • स्थापित करें और बनाएँ
  • chrislennon/action-aws-cliकुंजी के लिए रहस्यों का उपयोग करके aws cli स्थापित करने के लिए क्रिया का उपयोग करें
  • dir नाम के रूप में टैग env var का उपयोग करके बिल्ड को एक नए S3 बाल्टी में सिंक करने के लिए कमांड चलाएं

यहाँ एक उदाहरण है जो मैंने क्रिस लेनन की कार्रवाई का उपयोग करके चलाया था:

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.