feat: use env.FILE to reduce risk of copy-paste errors #86
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Release | |
on: | |
push: | |
branches: | |
- master | |
jobs: | |
setup_release: | |
name: Prepare release | |
permissions: | |
contents: write | |
issues: write | |
pull-requests: write | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
persist-credentials: false | |
- name: cache NPM | |
uses: actions/[email protected] | |
id: npm-cache | |
with: | |
path: | | |
**/node_modules | |
${{ needs.install.outputs.npm-cache-dir }} | |
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} | |
restore-keys: | | |
${{ runner.os }}-node- | |
- name: Setup Node.js environment | |
uses: actions/[email protected] | |
with: | |
node-version: "lts/*" | |
- name: Install dependencies | |
run: npm ci | |
- name: next release version | |
id: next_release_version | |
run: | | |
export NEXT_TAG_VERSION=$(npx semantic-release --dry-run | grep 'The next release version is' | sed -E 's/.* ([[:digit:].]+)$/\1/') | |
echo "new_tag_version=${NEXT_TAG_VERSION}" >> $GITHUB_OUTPUT | |
echo "new_tag_version=${NEXT_TAG_VERSION}" | |
env: | |
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} | |
outputs: | |
new_tag_version: ${{ steps.next_release_version.outputs.new_tag_version }} | |
process_test_adoc: | |
name: Process test.adoc | |
needs: setup_release | |
if: ${{ needs.setup_release.outputs.new_tag_version != '' }} | |
runs-on: ubuntu-latest | |
env: | |
FILE: test.adoc | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Print orig file | |
run: | | |
cat ${{ env.FILE }} | |
- name: Update version and date in file | |
if: ${{needs.setup_release.outputs.new_tag_version != ''}} | |
run: | | |
echo "new_tag_version=${{ needs.setup_release.outputs.new_tag_version }}" | |
# Get the version from the output of the Semantic Release step | |
VERSION=${{ needs.setup_release.outputs.new_tag_version }} | |
# Get the current date | |
DATE=$(date +%Y-%m-%d) | |
# Regular expression to match the string to be replaced | |
REGEX="v[0-9]\+\.[0-9]\+\.[0-9]\+\, [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}" | |
# Replace the string in file | |
sed -i "s/$REGEX/v$VERSION, $DATE/g" $FILE | |
- name: Print new file | |
if: ${{needs.setup_release.outputs.new_tag_version != ''}} | |
run: | | |
cat ${{ env.FILE }} | |
- name: Upload updated file | |
uses: actions/upload-artifact@v4 | |
with: | |
name: updated-test-adoc | |
path: ${{ env.FILE }} | |
- name: Set output | |
id: output_version | |
run: echo "new_tag_version=${{ needs.setup_release.outputs.new_tag_version }}" >> $GITHUB_OUTPUT | |
outputs: | |
new_tag_version: ${{ steps.output_version.outputs.new_tag_version }} | |
process_file2_md: | |
name: Process file2.md | |
needs: setup_release | |
if: ${{ needs.setup_release.outputs.new_tag_version != '' }} | |
runs-on: ubuntu-latest | |
env: | |
FILE: file2.md | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Print orig file | |
run: | | |
cat ${{ env.FILE }} | |
- name: Update version and date in file | |
if: ${{needs.setup_release.outputs.new_tag_version != ''}} | |
run: | | |
echo "new_tag_version=${{ needs.setup_release.outputs.new_tag_version }}" | |
# Get the version from the output of the Semantic Release step | |
VERSION=${{ needs.setup_release.outputs.new_tag_version }} | |
# Get the current date | |
DATE=$(date +%Y-%m-%d) | |
# Regular expression to match the string to be replaced | |
REGEX="v[0-9]\+\.[0-9]\+\.[0-9]\+\, [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}" | |
# Replace the string in file | |
sed -i "s/$REGEX/v$VERSION, $DATE/g" $FILE | |
- name: Print new file | |
if: ${{needs.setup_release.outputs.new_tag_version != ''}} | |
run: | | |
cat ${{ env.FILE }} | |
- name: Upload updated file | |
uses: actions/upload-artifact@v4 | |
with: | |
name: updated-file2-md | |
path: ${{ env.FILE }} | |
- name: Set output | |
id: output_version | |
run: echo "new_tag_version=${{ needs.setup_release.outputs.new_tag_version }}" >> $GITHUB_OUTPUT | |
outputs: | |
new_tag_version: ${{ steps.output_version.outputs.new_tag_version }} | |
complete_release: | |
name: Complete release | |
needs: [setup_release, process_test_adoc, process_file2_md] | |
if: ${{ needs.setup_release.outputs.new_tag_version != '' }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
persist-credentials: false | |
- name: Download updated test.adoc | |
uses: actions/download-artifact@v4 | |
with: | |
name: updated-test-adoc | |
- name: Download updated file2.md | |
uses: actions/download-artifact@v4 | |
with: | |
name: updated-file2-md | |
- name: Print files | |
run: | | |
echo "Updated test.adoc" | |
cat test.adoc | |
echo "Updated file2.md" | |
cat file2.md | |
- name: cache NPM | |
uses: actions/[email protected] | |
id: npm-cache | |
with: | |
path: | | |
**/node_modules | |
${{ needs.install.outputs.npm-cache-dir }} | |
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} | |
restore-keys: | | |
${{ runner.os }}-node- | |
- name: Setup Node.js environment | |
uses: actions/[email protected] | |
with: | |
node-version: "lts/*" | |
- name: Install dependencies | |
run: npm ci | |
- name: Release with next Semantic Version | |
id: release_with_next_semantic_version | |
if: ${{needs.setup_release.outputs.new_tag_version != ''}} | |
run: npx semantic-release | |
env: | |
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} | |
GIT_COMMITTER_NAME: "Arc-E-Tect" | |
GIT_COMMITTER_EMAIL: "[email protected]" | |
GIT_AUTHOR_NAME: "Arc-E-Tect" | |
GIT_AUTHOR_EMAIL: "[email protected]" | |
- name: No release with next Semantic Version | |
if: ${{needs.setup_release.outputs.new_tag_version == ''}} | |
run: echo "No new release required..." |