* Prepare CMakeLists.txt for unified builds
- Remove CI_BUILD Cmake variable.
- Convert CI_TAG from ENV variable to CMake variable
- CI_VERSION_PRE_RELEASE can be set in non CI builds
* Prepare build.sh and node Dockerfile for unified builds
- add CI_TAG and CI_VERSION_PRE_RELEASE to build.sh
- add useful ARG with default values to Dockerfile so they can be passed to the build.sh script
* Prepare WIndows for unified builds
- remove CI_BUILD
- convert DCI_TAG from ENV to CMake variable
* Convert TEST BETA and LIVE variable to NETWORK variable for easier workflow matrix usage
* Make docker builds and deploys more modular
- Remove dependency on the workflow name
- COnvert $GITHUB_WORKFLOW to $NETWORK
- Create smaller functions with limited scope
- Create similar deploy functions for docker and github container registries (hub.docker and ghcr)
* Create unified workflow to build TEST BETA and LIVE artifacts
- Remove old workflows
- Create 1 workflow for all environments (Network Matrix)
- Keep current build logic (build scripts still differ per OS)
* Remove hardcoded repo from build and deploy scripts
- skip hub.docker deploys if DOCKER_PASSWORD is not provided
- Create DOCKER_HUB variable which defaults to nanocurrency (backwards compatible)
- Create DOCKER_USER variable which defaults to nanoreleaseteam (backwards compatible)
- create S3_BUCKET_NAME variable that defaults to repo.nano.org if not provided (backwards compatible)
- only use S3_BUILD_DIRECTORY if provided
* Make workflow repository agnostic
Convert nanocurrency/nano-env image to self built ghcr.io/${{ github.repository }} image
* Fix CI_TAG usage
- convert ref to CI_TAG
- use CI_TAG in aws deploys
* Use same login for ghcr and hub.docker
* Fix docker login
- add possibility to specify registry
- use ghcr.io instead of variable for ghcr_image_name
* Fix nano network during build
* Use config variables instead of secrets for non secret variables
- vars.S3_BUCKET_NAME
- vars.S3_BUILD_DIRECTORY
- vars.DOCKER_REGISTRY
- vars.DOCKER_USER
* Fix: Make build process repository agnostic by specifying vars.DOCKER_REGISTRY
* Make tag generation branch agnostic
The goal is to simplify tag generation process and commit the version_pre_release into CMakeLists.txt for each tag.
If a user checks out a specific tag and builds it, the version_pre_release is set correctly.
- remove workflow_dispatch inputs. It operates on the selected branch.
- The cronjob is executed on develop branch only.
- replace ci/actions/dev-build-tag-gen.sh with ci/actions/generate_next_git_tag.sh
- generate_next_git_tag.sh is branch agnostic and operates on ${{ github.ref }}
- generate_next_git_tag.sh succeeds even if no new tag is generated
- the workflow only executes the build jobs if a new tag was created (if: ${{ needs.prepare_build.outputs.TAG_CREATED == 'true' }})
- generate_next_git_tag.sh uses V${current_version_major}.${current_version_minor}${branch_name} for tags.
- for "develop" branch_name is converted to DB --> (e.g V26.0DB1)
- generate_next_git_tag.sh uses a -c flag that is responsible to update CMakeLists.txt with correct version_pre_release, create and push the tag to origin.
* Remove CI_VERSION_PRE_RELEASE as it has been committed to CMakeLists.txt in the tag used to build the node
* Use the new prepare scripts
- use the new prepare scripts (Linux, MacOS & Windows)
- remove the need the dependency on nano-env:gcc
* Make usage of nano-env:rhel explicit
- Build the nano-env docker image in the current workflow
- Use the locally built image.
* Fix typo in default BUILD_TYPE
- Remove duplicate BUILD_TYPE
- move SANITIZER to ci/build-node.sh ARGs
* Make sure the existing_tags ending is numeric
- fixes a bug when we have 2 similar branches with tags (e.g. some-branch and some-branch-2)
* Remove --global for git config
Prevent modification of global git settings on a developer machine
* Handling release branches differently.
- refactored script by making it more modular
- script expects releases to be made from a branch called `releases/v{Major}`
- add -i flag to indicate wether or not to increment the generated tag
- -i increments version_minor for release branches: tag --> V{Major}.{Minor + increment}
- -i increments version_pre_release for all other non-release branches: tag --> V{Major}.{Minor}{branch_name}{pre_release + increment}
- -o outputs either `version_pre_release` or `version_minor` depending on the branch
Prevent incrementing if no tag exists yet
- make sure V{Major}.0 is created even if the user forgets to set increment to 0
Make tag_created=true explicit
* Prevent output file from being created when -o is not provided
- by redefining local output=$1 it is set to 0 instead of "" and a file called 0 was created
* prevent script exit from grep returning a non-zero exit status if it doesn't find anything
* Add increment input to the workflow and force push if tag is unchanged
- increment is 1 by default
- if increment is 0, an existing tag will be updated (origin push -f).
fixup! Add increment input to the workflow
* Allow tag creation without file changes
- the first tag of a releases/ branch creates no changes
- a tag run with increment=0 creates no changes
in both cases we want to create the tag (again)
* feat: implement workflow to prepare for a new major software release
- Checks out the repository based on github.ref.
- Extracts and sets current major and minor versions from CMakeLists.txt of github.ref.
- Fetches the default branch name and sets it as an output.
- Checks for existence of a corresponding release branch. If present, the workflow aborts, if not, it continues and sets the new release branch name.
- Increments the major version in CMakeLists.txt on the default branch, commits this change, and pushes it back.
- Checks out a new release branch, sets the pre-release version to 0 in CMakeLists.txt, commits this change, and pushes the new branch to the repository.
fix: Configure git and fix output variables
Change the order of steps to make the flow more natural
Fix curl DEFAULT_BRANCH
fix
fix
* Rename workflow to something more meaningful
* Remove increment input from workflow
- Autodetect if we need to increment the version or not on the release branch
Expected behaviour :
- Running the workflow multiple times without a new commit will rebuild and republish the same artifacts
- Running the workflow after a new commit was made to the releases branch will increment version_minor by 1
- the version_minor is updated in CMakeLists.txt and committed to the release branch
- a new tag is created and pushed with the incremented version_minor
- Make logic for both release and other branches more obvious
--> TODO?: instead of force pushing, we could remove -f option if branch or tag already exist
* Retry "brew update" up to 5 times with 15s interval
* Apply suggestions from PR review (1/2)
* Apply suggestions from PR review (2/2)
Convert if/else into case..in
---------
Co-authored-by: gr0vity-dev <gr0vity-dev@users.noreply.github.com>
71 lines
3.3 KiB
Bash
Executable file
71 lines
3.3 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
set -o errexit
|
|
set -o nounset
|
|
set -o xtrace
|
|
OS=$(uname)
|
|
IS_RPM_DEPLOY="${LINUX_RPM:-0}"
|
|
S3_BUCKET_NAME="${S3_BUCKET_NAME:-repo.nano.org}"
|
|
|
|
case "${NETWORK}" in
|
|
"BETA")
|
|
BUILD="beta"
|
|
;;
|
|
"TEST")
|
|
BUILD="test"
|
|
;;
|
|
*)
|
|
BUILD="live"
|
|
;;
|
|
esac
|
|
|
|
if [[ -n "${S3_BUILD_DIRECTORY}" ]]; then
|
|
|
|
|
|
DIRECTORY="${S3_BUILD_DIRECTORY}/${BUILD}"
|
|
else
|
|
DIRECTORY=$BUILD
|
|
fi
|
|
|
|
if [[ "$OS" == 'Linux' && "$IS_RPM_DEPLOY" -eq "1" ]]; then
|
|
RPMS=$(find ${GITHUB_WORKSPACE}/artifacts/RPMS -type f -name '*.rpm')
|
|
SRPMS=$(find ${GITHUB_WORKSPACE}/artifacts/SRPMS -type f -name '*.src.rpm')
|
|
|
|
for rpm in $RPMS; do
|
|
SHA=$(sha256sum ${rpm})
|
|
echo "Hash: $SHA"
|
|
echo $SHA > ${GITHUB_WORKSPACE}/$(basename "${rpm}.sha256")
|
|
|
|
aws s3 cp ${rpm} s3://${S3_BUCKET_NAME}/$DIRECTORY/binaries/$(basename "${rpm}") --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers
|
|
aws s3 cp ${GITHUB_WORKSPACE}/$(basename "${rpm}.sha256") s3://${S3_BUCKET_NAME}/$DIRECTORY/binaries/$(basename "${rpm}.sha256") --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers
|
|
done
|
|
|
|
for srpm in $SRPMS; do
|
|
SHA=$(sha256sum ${srpm})
|
|
echo "Hash: $SHA"
|
|
echo $SHA > ${GITHUB_WORKSPACE}/$(basename "${srpm}).sha256")
|
|
|
|
aws s3 cp ${srpm} s3://${S3_BUCKET_NAME}/$DIRECTORY/source/$(basename "${srpm}") --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers
|
|
aws s3 cp ${GITHUB_WORKSPACE}/$(basename "${srpm}).sha256") s3://${S3_BUCKET_NAME}/$DIRECTORY/source/$(basename "${srpm}.sha256") --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers
|
|
done
|
|
elif [[ "$OS" == 'Linux' ]]; then
|
|
SHA=$(sha256sum $GITHUB_WORKSPACE/build/nano-node-*-Linux.tar.bz2)
|
|
echo "Hash: $SHA"
|
|
echo $SHA >$GITHUB_WORKSPACE/nano-node-$TAG-Linux.tar.bz2.sha256
|
|
|
|
SHA=$(sha256sum $GITHUB_WORKSPACE/build/nano-node-*-Linux.deb)
|
|
echo "Hash: $SHA"
|
|
echo $SHA >$GITHUB_WORKSPACE/nano-node-$TAG-Linux.deb.sha256
|
|
|
|
aws s3 cp $GITHUB_WORKSPACE/build/nano-node-*-Linux.tar.bz2 s3://${S3_BUCKET_NAME}/$DIRECTORY/binaries/nano-node-$TAG-Linux.tar.bz2 --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers
|
|
aws s3 cp $GITHUB_WORKSPACE/nano-node-$TAG-Linux.tar.bz2.sha256 s3://${S3_BUCKET_NAME}/$DIRECTORY/binaries/nano-node-$TAG-Linux.tar.bz2.sha256 --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers
|
|
aws s3 cp $GITHUB_WORKSPACE/build/nano-node-*-Linux.deb s3://${S3_BUCKET_NAME}/$DIRECTORY/binaries/nano-node-$TAG-Linux.deb --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers
|
|
aws s3 cp $GITHUB_WORKSPACE/nano-node-$TAG-Linux.deb.sha256 s3://${S3_BUCKET_NAME}/$DIRECTORY/binaries/nano-node-$TAG-Linux.deb.sha256 --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers
|
|
else
|
|
SHA=$(sha256sum $GITHUB_WORKSPACE/build/nano-node-*-Darwin.dmg)
|
|
echo "Hash: $SHA"
|
|
echo $SHA >$GITHUB_WORKSPACE/build/nano-node-$TAG-Darwin.dmg.sha256
|
|
|
|
aws s3 cp $GITHUB_WORKSPACE/build/nano-node-*-Darwin.dmg s3://${S3_BUCKET_NAME}/$DIRECTORY/binaries/nano-node-$TAG-Darwin.dmg --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers
|
|
aws s3 cp $GITHUB_WORKSPACE/build/nano-node-$TAG-Darwin.dmg.sha256 s3://${S3_BUCKET_NAME}/$DIRECTORY/binaries/nano-node-$TAG-Darwin.dmg.sha256 --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers
|
|
fi
|