Skip to content

Build release - Update prepare_docker.sh #2304

Build release - Update prepare_docker.sh

Build release - Update prepare_docker.sh #2304

Workflow file for this run

name: Build release
run-name: Build release - ${{ github.event.head_commit.message }}
on:
push:
branches:
- dev
- "feature/**"
- "release/**"
- "hotfix/**"
jobs:
build:
name: Build release
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.ref }}
token: ${{ secrets.CI_TOKEN }}
fetch-depth: 0
- name: Prepare git
run: |
git config user.name github-actions[bot]
git config user.email github-actions[bot]@users.noreply.github.com
git fetch --all && git pull
- name: Get release tag name
id: get_release_tag_name
run: |
tagName='${{ github.event.ref }}'
if [[ "$(echo ${{ github.event.ref }})" == "refs/heads/dev" ]]; then
tagName='dev-latest'
elif [[ "$(echo ${{ github.event.ref }})" =~ ^.*/feature/.*$ ]]; then
# get everything behind last slash (or all if no slash present)
tagName=${tagName##*/}-latest
else
tagName='${{ github.event.ref }}'
# get everything behind last slash (or all if no slash present)
tagName=${tagName##*/}
fi
echo "value=$tagName" >> $GITHUB_OUTPUT
- name: Build packages
run: |
./build.sh --all --update-hash
- name: Update installer
id: update_installer
run: |
# set version
sed -i "s/^VRSN=.*/VRSN=\"${{ steps.get_release_tag_name.outputs.value }}\"/g" ./node-installer.sh
# set timestamp
timestamp=$(TZ=CET date +%Y%m%d_%H%M%S)
sed -i "s/^BUILD=.*/BUILD=\"$timestamp\"/g" ./node-installer.sh
# comment update flags (will be reverted right after upload to release)
sed -i "/^VAR_.*_UPDATE=/ s/^/# /" node-installer.sh
# generate installer checksum.txt
shasum -a 256 ./node-installer.sh | cut -d ' ' -f 1 > ./build/checksum.txt
- uses: xresloader/upload-to-github-release@v1.4.2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
file: "node-installer.sh;build/*"
tag_name: ${{ steps.get_release_tag_name.outputs.value }}
draft: false
prerelease: true
overwrite: true
- name: Revert update flags in installer
id: revert_update_flags_in_installer
run: |
# uncomment update flags (this should not be commited)
sed -i "s/^# \(VAR_.*_UPDATE=\)/\1/" node-installer.sh
- name: Get release type
id: get_release_type
run: |
if [[ "${{ contains(github.event.ref, 'release/') }}" == "true" ]]; then
echo "value=release" >> $GITHUB_OUTPUT
elif [[ "${{ contains(github.event.ref, 'hotfix/') }}" == "true" ]]; then
echo "value=hotfix" >> $GITHUB_OUTPUT
else
echo "value=ci" >> $GITHUB_OUTPUT
fi
- name: Get release title
id: get_release_title
if: ${{ steps.get_release_type.outputs.value != 'ci' }}
run: |
if [[ '${{ steps.get_release_type.outputs.value }}' == 'release' ]]; then
echo "value=Release ${{ steps.get_release_tag_name.outputs.value }}" >> $GITHUB_OUTPUT
else
echo "value=Hotfix ${{ steps.get_release_tag_name.outputs.value }}" >> $GITHUB_OUTPUT
fi
- name: Commit changes on ${{ steps.get_release_type.outputs.value }} branch
id: commit_changes
if: ${{ steps.get_release_type.outputs.value != 'ci' }}
run: |
if [ -n "$(git status --porcelain)" ]; then
git add .
git commit -m 'Update release artifacts [${{ steps.get_release_tag_name.outputs.value }}] [skip actions]'
git push origin ${{ steps.get_release_type.outputs.value }}/${{ steps.get_release_tag_name.outputs.value }}
echo "done=true" >> $GITHUB_OUTPUT
else
echo "done=false" >> $GITHUB_OUTPUT
fi
echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
- name: Update release tag
id: update_release_tag
if: ${{ steps.get_release_type.outputs.value != 'ci' }}
run: |
git checkout ${{ github.event.ref }}
git tag -a ${{ steps.get_release_tag_name.outputs.value }} -m "${{ steps.get_release_title.outputs.value }}" --force
git push --force origin ${{ steps.get_release_tag_name.outputs.value }}
- name: Merge or create pull request from ${{ steps.get_release_type.outputs.value }} branch to dev branch
id: merge_or_create_pull_request_to_dev
if: ${{ steps.get_release_type.outputs.value != 'ci' && steps.commit_changes.outputs.done == 'true' }}
run: |
message="Merge back changes from ${{ steps.get_release_type.outputs.value }}/${{ steps.get_release_tag_name.outputs.value }}"
git checkout dev && git pull
mergeSuccess="true"
git merge --no-ff -m "$message" ${{ github.event.ref }} || mergeSuccess="false"
if [[ "$mergeSuccess" == "true" ]]; then
git push origin dev
else
openPullRequests=$(gh pr list --base dev --head ${{ steps.get_release_type.outputs.value }}/${{ steps.get_release_tag_name.outputs.value }} --state open --json id -q '.[] | length')
if [[ "$openPullRequests" =~ ^0?$ ]]; then
gh pr create \
--title "$message" \
--head ${{ steps.get_release_type.outputs.value }}/${{ steps.get_release_tag_name.outputs.value }} \
--base dev \
--body "This PR merges ${{ steps.get_release_type.outputs.value }}/${{ steps.get_release_tag_name.outputs.value }} branch back into dev branch."
fi
fi
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Update release notes
id: update_release_notes
if: ${{ steps.get_release_type.outputs.value != 'ci' }}
run: |
echo "**Changelog**:" > CHANGELOG.md
echo "" >> CHANGELOG.md
releasePullRequest=$(gh pr list --base main --head ${{ steps.get_release_type.outputs.value }}/${{ steps.get_release_tag_name.outputs.value }} --json number -q '.[].number')
gh pr view $releasePullRequest --json commits -q '.commits.[] | .authors.[0].email + " " + .oid + " " + .messageHeadline' | grep -v "github-actions\[bot\]" > temp.txt
while IFS='' read -r commit || [ -n "${commit}" ]; do
commitId=$(echo $commit | cut -d " " -f 2)
commitMessage=$(echo $commit | cut -d " " -f 3-)
if [[ -z "$(git show $commitId | grep '^Merge: ')" ]] && [[ ! "$commitMessage" =~ ^\+ ]]; then
echo "- $commitMessage ($commitId)" >> CHANGELOG.md
fi
done < temp.txt
rm -f temp.txt
gh release edit ${{ steps.get_release_tag_name.outputs.value }} -F CHANGELOG.md
rm -f CHANGELOG.md
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Set commit status
uses: myrotvorets/set-commit-status-action@v2.0.0
if: always()
with:
token: ${{ secrets.GITHUB_TOKEN }}
status: ${{ job.status }}
sha: ${{ steps.commit_changes.outputs.sha }}