[github-action] add CI for manual release (#3869)
manual release for a given tag Co-authored-by: Nita Neou <soph@harmony.one>pull/3874/head
parent
b69d4c09d1
commit
f106674b55
@ -0,0 +1,355 @@ |
|||||||
|
name: Manual release harmony (need tag) |
||||||
|
|
||||||
|
on: |
||||||
|
workflow_dispatch: |
||||||
|
inputs: |
||||||
|
tag: |
||||||
|
decription: 'tag value to create the release' |
||||||
|
required: true |
||||||
|
|
||||||
|
jobs: |
||||||
|
check: |
||||||
|
name: Per-check for current tag |
||||||
|
runs-on: ubuntu-18.04 |
||||||
|
continue-on-error: false |
||||||
|
outputs: |
||||||
|
tag_annotated: ${{ steps.check-tag-annotated.outputs.tag_annotated }} |
||||||
|
|
||||||
|
steps: |
||||||
|
- name: Checkout harmony core code |
||||||
|
uses: actions/checkout@v2 |
||||||
|
with: |
||||||
|
path: harmony |
||||||
|
ref: ${{ github.event.inputs.tag }} |
||||||
|
fetch-depth: 0 |
||||||
|
|
||||||
|
- name: Check tag annotated |
||||||
|
id: check-tag-annotated |
||||||
|
run: | |
||||||
|
VERSION=$(git tag -l --sort=-v:refname | head -n 1) |
||||||
|
if git rev-parse $VERSION^{tag} -- &>/dev/null |
||||||
|
then |
||||||
|
echo "::set-output name=tag_annotated::true" |
||||||
|
else |
||||||
|
echo "::set-output name=tag_annotated::false" |
||||||
|
fi |
||||||
|
working-directory: harmony |
||||||
|
|
||||||
|
build: |
||||||
|
name: Build harmony binary |
||||||
|
needs: check |
||||||
|
runs-on: ${{ matrix.os }} |
||||||
|
if: needs.check.outputs.tag_annotated == 'true' |
||||||
|
strategy: |
||||||
|
matrix: |
||||||
|
os: [ubuntu-18.04, macos-10.15, [self-hosted, linux, ARM64]] |
||||||
|
|
||||||
|
steps: |
||||||
|
- name: Import GPG key |
||||||
|
if: join(matrix.os, '-') != 'self-hosted-linux-ARM64' |
||||||
|
uses: crazy-max/ghaction-import-gpg@v3 |
||||||
|
with: |
||||||
|
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} |
||||||
|
passphrase: ${{ secrets.GPG_PRIVATE_KEY_PASS }} |
||||||
|
|
||||||
|
- name: Set up Go 1.14 |
||||||
|
uses: actions/setup-go@v2 |
||||||
|
with: |
||||||
|
go-version: 1.14.14 |
||||||
|
|
||||||
|
- name: Checkout dependence repo |
||||||
|
uses: actions/checkout@v2 |
||||||
|
with: |
||||||
|
repository: harmony-one/mcl |
||||||
|
path: mcl |
||||||
|
|
||||||
|
- name: Checkout dependence repo |
||||||
|
uses: actions/checkout@v2 |
||||||
|
with: |
||||||
|
repository: harmony-one/bls |
||||||
|
path: bls |
||||||
|
|
||||||
|
- name: Checkout harmony core code |
||||||
|
uses: actions/checkout@v2 |
||||||
|
with: |
||||||
|
path: harmony |
||||||
|
ref: ${{ github.event.inputs.tag }} |
||||||
|
fetch-depth: 0 |
||||||
|
|
||||||
|
- name: Get latest version and release |
||||||
|
run: | |
||||||
|
VERSION=$(git tag -l --sort=-v:refname | head -n 1 | tr -d v) |
||||||
|
RELEASE=$(git describe --long | cut -f2 -d-) |
||||||
|
echo "build_version=$VERSION" >> $GITHUB_ENV |
||||||
|
echo "build_release=$RELEASE" >> $GITHUB_ENV |
||||||
|
working-directory: harmony |
||||||
|
|
||||||
|
- name: Build harmony binary and packages for Linux |
||||||
|
if: matrix.os == 'ubuntu-18.04' |
||||||
|
run: | |
||||||
|
make linux_static |
||||||
|
make deb |
||||||
|
echo %_signature gpg >> $HOME/.rpmmacros && echo "%_gpg_name Harmony (harmony.one)" >> $HOME/.rpmmacros |
||||||
|
make rpm |
||||||
|
mv ./bin/harmony ./bin/harmony-amd64 |
||||||
|
mv $HOME/debbuild/harmony-$build_version-$build_release.deb ./bin/ |
||||||
|
mv $HOME/rpmbuild/RPMS/x86_64/harmony-$build_version-$build_release.x86_64.rpm ./bin/ |
||||||
|
working-directory: harmony |
||||||
|
|
||||||
|
- name: Build harmony binary and packages for Linux on ARM64 |
||||||
|
if: join(matrix.os, '-') == 'self-hosted-linux-ARM64' |
||||||
|
run: | |
||||||
|
make linux_static |
||||||
|
mv ./bin/harmony ./bin/harmony-arm64 |
||||||
|
working-directory: harmony |
||||||
|
|
||||||
|
- name: Build harmony binary and packages for MacOS |
||||||
|
if: matrix.os == 'macos-10.15' |
||||||
|
run: | |
||||||
|
brew install bash |
||||||
|
sudo rm -f /usr/local/opt/openssl |
||||||
|
sudo ln -sf /usr/local/opt/openssl@1.1 /usr/local/opt/openssl |
||||||
|
make |
||||||
|
cd ./bin && mkdir ./lib && mv ./*.dylib ./lib && rm -f ./bootnode |
||||||
|
gpg --detach-sign harmony |
||||||
|
zip -qr ./harmony-macos.zip ./* |
||||||
|
rm -rf `ls * | egrep -v harmony-macos.zip` |
||||||
|
working-directory: harmony |
||||||
|
|
||||||
|
- name: Upload artifact |
||||||
|
uses: actions/upload-artifact@v2 |
||||||
|
with: |
||||||
|
name: harmony |
||||||
|
path: harmony/bin/* |
||||||
|
retention-days: 1 |
||||||
|
|
||||||
|
docker-build: |
||||||
|
name: Build and push harmony docker image |
||||||
|
needs: [check, build] |
||||||
|
runs-on: ubuntu-18.04 |
||||||
|
if: needs.check.outputs.tag_annotated == 'true' |
||||||
|
|
||||||
|
steps: |
||||||
|
- name: Checkout harmony core code |
||||||
|
uses: actions/checkout@v2 |
||||||
|
with: |
||||||
|
path: harmony |
||||||
|
ref: ${{ github.event.inputs.tag }} |
||||||
|
fetch-depth: 0 |
||||||
|
|
||||||
|
- name: Get latest version |
||||||
|
run: | |
||||||
|
VERSION=$(git tag -l --sort=-v:refname | head -n 1 | tr -d v) |
||||||
|
RELEASE=$(git describe --long | cut -f2 -d-) |
||||||
|
echo "build_version=$VERSION" >> $GITHUB_ENV |
||||||
|
echo "build_release=$RELEASE" >> $GITHUB_ENV |
||||||
|
working-directory: harmony |
||||||
|
|
||||||
|
- name: Download artifact |
||||||
|
uses: actions/download-artifact@v2 |
||||||
|
with: |
||||||
|
name: harmony |
||||||
|
|
||||||
|
- name: Build preview works |
||||||
|
run: | |
||||||
|
mv $GITHUB_WORKSPACE/harmony-amd64 ./scripts/docker/harmony |
||||||
|
working-directory: harmony |
||||||
|
|
||||||
|
- name: Set up Docker Buildx |
||||||
|
uses: docker/setup-buildx-action@v1 |
||||||
|
|
||||||
|
- name: Login to DockerHub |
||||||
|
uses: docker/login-action@v1 |
||||||
|
with: |
||||||
|
username: ${{ secrets.DOCKER_USERNAME }} |
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }} |
||||||
|
|
||||||
|
- name: Build and push |
||||||
|
uses: docker/build-push-action@v2 |
||||||
|
with: |
||||||
|
context: ./harmony/scripts/docker |
||||||
|
file: ./harmony/scripts/docker/Dockerfile |
||||||
|
push: true |
||||||
|
tags: | |
||||||
|
harmonyone/harmony:${{ github.event.inputs.tag }} |
||||||
|
harmonyone/harmony:${{ env.build_version }}-${{ env.build_release }} |
||||||
|
|
||||||
|
release-page: |
||||||
|
name: Sign binary and create and publish release page |
||||||
|
needs: [check, build] |
||||||
|
runs-on: ubuntu-18.04 |
||||||
|
if: needs.check.outputs.tag_annotated == 'true' |
||||||
|
|
||||||
|
steps: |
||||||
|
- name: Import GPG key |
||||||
|
uses: crazy-max/ghaction-import-gpg@v3 |
||||||
|
with: |
||||||
|
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} |
||||||
|
passphrase: ${{ secrets.GPG_PRIVATE_KEY_PASS }} |
||||||
|
|
||||||
|
- name: Checkout harmony core code |
||||||
|
uses: actions/checkout@v2 |
||||||
|
with: |
||||||
|
path: harmony |
||||||
|
ref: ${{ github.event.inputs.tag }} |
||||||
|
fetch-depth: 0 |
||||||
|
|
||||||
|
- name: Get latest version |
||||||
|
run: | |
||||||
|
VERSION=$(git tag -l --sort=-v:refname | head -n 1 | tr -d v) |
||||||
|
VERSION_LONG=$(git describe --always --long --dirty) |
||||||
|
RELEASE=$(git describe --long | cut -f2 -d-) |
||||||
|
echo "build_version=$VERSION" >> $GITHUB_ENV |
||||||
|
echo "build_version_long=$VERSION_LONG" >> $GITHUB_ENV |
||||||
|
echo "build_release=$RELEASE" >> $GITHUB_ENV |
||||||
|
working-directory: harmony |
||||||
|
|
||||||
|
- name: Download artifact |
||||||
|
uses: actions/download-artifact@v2 |
||||||
|
with: |
||||||
|
name: harmony |
||||||
|
|
||||||
|
- name: Signed amd64 harmony binary |
||||||
|
run: | |
||||||
|
gpg --detach-sign harmony-amd64 |
||||||
|
sha256sum harmony-amd64 >> harmony-amd64.sha256 |
||||||
|
|
||||||
|
- name: Signed arm64 harmony binary |
||||||
|
run: | |
||||||
|
gpg --detach-sign harmony-arm64 |
||||||
|
sha256sum harmony-arm64 >> harmony-arm64.sha256 |
||||||
|
|
||||||
|
- name: Signed amd64 harmony binary |
||||||
|
run: | |
||||||
|
shasum -a 256 harmony-macos.zip >> harmony-macos.zip.sha256 |
||||||
|
|
||||||
|
- name: Get tag message |
||||||
|
env: |
||||||
|
TAG_SHA: ${{ github.event.after }} |
||||||
|
run: | |
||||||
|
touch ./tag_message.md |
||||||
|
TAG_MESSAGE=$(git cat-file tag v$build_version | tail -n+6) |
||||||
|
echo -e "$TAG_MESSAGE\n\nThe released version: $build_version_long" >> ./tag_message.md |
||||||
|
working-directory: harmony |
||||||
|
|
||||||
|
- name: Create Release |
||||||
|
id: create_release |
||||||
|
uses: actions/create-release@v1 |
||||||
|
env: |
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
||||||
|
with: |
||||||
|
tag_name: ${{ github.ref }} |
||||||
|
release_name: Mainnet Release ${{ env.build_version }} |
||||||
|
draft: true |
||||||
|
prerelease: false |
||||||
|
body_path: ./harmony/tag_message.md |
||||||
|
|
||||||
|
- name: Upload harmony binary for Linux |
||||||
|
uses: actions/upload-release-asset@v1 |
||||||
|
env: |
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
||||||
|
with: |
||||||
|
upload_url: ${{ steps.create_release.outputs.upload_url }} |
||||||
|
asset_path: ./harmony-amd64 |
||||||
|
asset_name: harmony |
||||||
|
asset_content_type: application/octet-stream |
||||||
|
|
||||||
|
- name: Upload harmony deb package for Linux |
||||||
|
uses: actions/upload-release-asset@v1 |
||||||
|
env: |
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
||||||
|
with: |
||||||
|
upload_url: ${{ steps.create_release.outputs.upload_url }} |
||||||
|
asset_path: ./harmony-${{ env.build_version }}-${{ env.build_release }}.deb |
||||||
|
asset_name: harmony-${{ env.build_version }}.deb |
||||||
|
asset_content_type: application/x-deb |
||||||
|
|
||||||
|
- name: Upload harmony rpm package for Linux |
||||||
|
uses: actions/upload-release-asset@v1 |
||||||
|
env: |
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
||||||
|
with: |
||||||
|
upload_url: ${{ steps.create_release.outputs.upload_url }} |
||||||
|
asset_path: ./harmony-${{ env.build_version }}-${{ env.build_release }}.x86_64.rpm |
||||||
|
asset_name: harmony-${{ env.build_version }}.x86_64.rpm |
||||||
|
asset_content_type: application/x-rpm |
||||||
|
|
||||||
|
- name: Upload harmony amd64 binary for Linux |
||||||
|
uses: actions/upload-release-asset@v1 |
||||||
|
env: |
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
||||||
|
with: |
||||||
|
upload_url: ${{ steps.create_release.outputs.upload_url }} |
||||||
|
asset_path: ./harmony-amd64 |
||||||
|
asset_name: harmony-amd64 |
||||||
|
asset_content_type: application/octet-stream |
||||||
|
|
||||||
|
- name: Upload sha256 signature of harmony amd64 binary for Linux |
||||||
|
uses: actions/upload-release-asset@v1 |
||||||
|
env: |
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
||||||
|
with: |
||||||
|
upload_url: ${{ steps.create_release.outputs.upload_url }} |
||||||
|
asset_path: ./harmony-amd64.sha256 |
||||||
|
asset_name: harmony-amd64.sha256 |
||||||
|
asset_content_type: text/plain |
||||||
|
|
||||||
|
- name: Upload gpg signature of harmony amd64 binary for Linux |
||||||
|
uses: actions/upload-release-asset@v1 |
||||||
|
env: |
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
||||||
|
with: |
||||||
|
upload_url: ${{ steps.create_release.outputs.upload_url }} |
||||||
|
asset_path: ./harmony-amd64.sig |
||||||
|
asset_name: harmony-amd64.sig |
||||||
|
asset_content_type: application/octet-stream |
||||||
|
|
||||||
|
- name: Upload harmony arm64 binary for Linux |
||||||
|
uses: actions/upload-release-asset@v1 |
||||||
|
env: |
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
||||||
|
with: |
||||||
|
upload_url: ${{ steps.create_release.outputs.upload_url }} |
||||||
|
asset_path: ./harmony-arm64 |
||||||
|
asset_name: harmony-arm64 |
||||||
|
asset_content_type: application/octet-stream |
||||||
|
|
||||||
|
- name: Upload sha256 signature of harmony arm64 binary for Linux |
||||||
|
uses: actions/upload-release-asset@v1 |
||||||
|
env: |
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
||||||
|
with: |
||||||
|
upload_url: ${{ steps.create_release.outputs.upload_url }} |
||||||
|
asset_path: ./harmony-arm64.sha256 |
||||||
|
asset_name: harmony-arm64.sha256 |
||||||
|
asset_content_type: text/plain |
||||||
|
|
||||||
|
- name: Upload gpg signature of harmony arm64 binary for Linux |
||||||
|
uses: actions/upload-release-asset@v1 |
||||||
|
env: |
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
||||||
|
with: |
||||||
|
upload_url: ${{ steps.create_release.outputs.upload_url }} |
||||||
|
asset_path: ./harmony-arm64.sig |
||||||
|
asset_name: harmony-arm64.sig |
||||||
|
asset_content_type: application/octet-stream |
||||||
|
|
||||||
|
- name: Upload harmony binary for MacOS |
||||||
|
uses: actions/upload-release-asset@v1 |
||||||
|
env: |
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
||||||
|
with: |
||||||
|
upload_url: ${{ steps.create_release.outputs.upload_url }} |
||||||
|
asset_path: ./harmony-macos.zip |
||||||
|
asset_name: harmony-macos-${{ env.build_version }}.zip |
||||||
|
asset_content_type: application/zip |
||||||
|
|
||||||
|
- name: Upload sha256 signature of harmony for MacOS |
||||||
|
uses: actions/upload-release-asset@v1 |
||||||
|
env: |
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
||||||
|
with: |
||||||
|
upload_url: ${{ steps.create_release.outputs.upload_url }} |
||||||
|
asset_path: ./harmony-macos.zip.sha256 |
||||||
|
asset_name: harmony-macos.zip.sha256 |
||||||
|
asset_content_type: text/plain |
Loading…
Reference in new issue