यहाँ एक उदाहरण .travis.yml दिया गया है (जो elm ट्रैक से लिया गया है):
sudo: false
language: node_js
node_js:
- lts/*
script:
- bin/fetch-configlet
- bin/configlet lint
- bin/build.sh
इसे जल्दी से GitHub Actions में बदलने के लिए इन चरणों का पालन कीजिए:
| वेरिएबल | वैल्यू |
|---|---|
<track> |
elm |
<image-name> |
ubuntu-latest |
<action to setup tooling> |
actions/setup-node@v1 |
<install dependencies> |
npm ci (build.sh के अंदर होता है) |
<code-extensions> |
.elm |
सेटअप एक्शन इस खोज से मिला। इमेज का नाम Travis के डिफ़ॉल्ट डिस्ट्रिब्यूशन को देखकर पता चला।
bin/fetch-configlet: configlet.yml वर्कफ्लो इस्तेमाल करने पर अब इसकी ज़रूरत नहीं रहतीbin/configlet lint: configlet.yml वर्कफ्लो इस्तेमाल करने पर अब इसकी ज़रूरत नहीं रहतीbin/build.sh: वह अकेली स्क्रिप्ट जो सब कुछ करती हैयह ट्रैक bin फोल्डर इस्तेमाल करता है, इसलिए bin फोल्डर के अंदर ये फाइलें बनाइए:
# bin/pr
bin/build.sh
# bin/pr-check
echo "No checks yet"
# bin/ci
bin/build.sh
# bin/ci-check
echo "No checks yet"
इन्हें अलग-अलग बाइनरी के रूप में बनाने से बाद में ऑप्टिमाइज़ करने का मौका मिलेगा। अभी कुछ भी इनलाइन करने की ज़रूरत नहीं है।
workflows/ci.yml का diff यहाँ दिया गया है।
# # .github/workflows/ci.yml
# This workflow will do a clean install of node dependencies and run tests across different versions
#
- # Replace <track> with the track name
- # Replace <image-name> with an image to run the jobs on
- # Replace <action to setup tooling> with a github action to setup tooling on the image
- # Replace <install dependencies> with a cli command to install the dependencies
- # Replace <code-extensions> with file extensions that should trigger the workflow
- #
- # Find Github Actions to setup tooling here:
- # - https://github.com/actions/?q=setup&type=&language=
- # - https://github.com/actions/starter-workflows/tree/main/ci
- # - https://github.com/marketplace?type=actions&query=setup
- #
# Requires scripts:
- # - scripts/ci-check
- # - scripts/ci
+ # - bin/ci-check
+ # - bin/ci
- name: <track> / main
+ name: elm / main
on:
push:
branches: [main]
workflow_dispatch:
jobs:
precheck:
- runs-on: <image-name>
+ runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- - name: Use <setup tooling>
- uses: <action to setup tooling>
+ - name: Use Node LTS
+ uses: actions/setup-node@v1
with:
- # here, use the LTS/stable version of the track's tooling
- # node-version: 12.x
+ node-version: 12.x
- name: Install project dependencies
- run: <install dependencies>
+ run: npm ci
- - name: Run exercism/<track> ci pre-check (checks config, lint code) for all exercises
- run: scripts/ci-check
+ - name: Run exercism/elm ci pre-check (checks config, lint code) for all exercises
+ run: bin/ci-check
ci:
- runs-on: <image-name>
+ runs-on: ubuntu-latest
strategy:
matrix:
- # here, add all SUPPORTED versions only
- # version: [10.x, 12.x, 14.x]
+ version: [10.x, 12.x, 14.x]
steps:
- uses: actions/checkout@v2
- - name: Use <setup tooling> ${{ matrix.version }}
- uses: <action to setup tooling>
+ - name: Use Node ${{ matrix.version }}
+ uses: actions/setup-node@v1
with:
- # below: see how to inject the version
- # node-version: ${{ matrix.version }}
+ node-version: ${{ matrix.version }}
- name: Install project dependencies
- run: <install dependencies>
+ run: npm ci
- - name: Run exercism/<track> ci (runs tests) for all exercises
- run: scripts/ci
+ - name: Run exercism/elm ci (runs tests) for all exercises
+ run: bin/ci
workflows/pr.yml में भी यही बदलाव हैं, सिवाय उस खास bash-fu के, जो हर बदली हुई फाइल को आर्गुमेंट के तौर पर देकर pr-check और pr स्क्रिप्ट को कॉल करता है:
# # .github/workflows/pr.yml
# # ...
- - name: Run exercism/<track> ci pre-check (stub files, config integrity) for changed exercises
+ - name: Run exercism/elm ci pre-check (stub files, config integrity) for changed exercises
run: |
PULL_REQUEST_URL=$(jq -r ".pull_request.url" "$GITHUB_EVENT_PATH")
curl --url $"${PULL_REQUEST_URL}/files" --header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' | \
- jq -c '.[] | select(.status == "added" or .status == "modified") | select(.filename | match("\\.(<code-extensions>|md|json)$")) | .filename' | \
+ jq -c '.[] | select(.status == "added" or .status == "modified") | select(.filename | match("\\.(elm|md|json)$")) | .filename' | \
- xargs -r scripts/pr-check
+ xargs -r bin/pr-check
# ...
GitHub Actions पर जाने के लिए यह काफी है। साथ ही, आपको अपनी स्क्रिप्ट बेहतर बनाने का मौका भी मिलता है।
build.sh में से वे चरण हटाइए जो सिर्फ एक बार चलने चाहिए, और उन्हें ci-check.sh तथा pre-check.sh फाइलों में डाल दीजिए (संकेत: आप lint.sh बना सकते हैं और उसे दोनों "स्क्रिप्ट" से कॉल कर सकते हैं)pr.sh और pr-check.sh में ऐसे सुधार जोड़िए जो इनपुट आर्गुमेंट के ज़रिए तय करें कि किन फाइलों या अभ्यासों की जाँच करनी है।