Release #6
Workflow file for this run
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: | |
tags: | |
- "*" | |
workflow_dispatch: | |
env: | |
REGISTRY: ghcr.io | |
IMAGE_NAME: ${{ github.repository }} | |
jobs: | |
build: | |
name: Build Release | |
runs-on: ubuntu-latest | |
permissions: | |
contents: read | |
packages: write | |
strategy: | |
matrix: | |
go-version: [1.18.x] | |
os: [ubuntu-latest] | |
steps: | |
- name: Set up Go | |
uses: actions/setup-go@v2 | |
with: | |
go-version: ${{ matrix.go-version }} | |
- name: Check out code | |
uses: actions/checkout@v3 | |
- name: Cache Go modules | |
uses: actions/cache@v3 | |
with: | |
# In order: | |
# * Module download cache | |
# * Build cache (Linux) | |
# * Build cache (Mac) | |
path: | | |
~/go/pkg/mod | |
~/.cache/go-build | |
~/Library/Caches/go-build | |
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} | |
restore-keys: | | |
${{ runner.os }}-go- | |
- name: Build target | |
run: go build -o dummy-blockchain . | |
- name: Upload Build | |
uses: actions/upload-artifact@v2 | |
with: | |
name: linux-x86_64-unknown-linux-gnu | |
path: ./dummy-blockchain | |
release: | |
name: Release | |
needs: [build] | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
packages: write | |
steps: | |
- name: Set Env | |
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV | |
- name: Checkout Code | |
uses: actions/checkout@v3 | |
- name: Download All Artifacts | |
id: download-artifacts | |
uses: actions/download-artifact@v2 | |
with: | |
path: ./binaries | |
- name: Sanitize Downloaded Files | |
run: | | |
# We downloaded all the artifacts previously uploaded and we put them in | |
# the 'binaries' folder. In this folder, the layout is: | |
# | |
# binaries | |
# ├── linux-arm64-unknown-linux-gnu | |
# │ └── <binary> | |
# └── linux-x86_64-unknown-linux-gnu | |
# └── <binary> | |
# | |
# The sub-folder name comes from the 'name' field of the 'actions/upload-artifact@v2' | |
# step. The '<binary>' file name is the filename of the uploaded 'path' field, | |
# we used './target/release/<binary>' in the upload step so the file name here | |
# is '<binary>'. | |
download_path="${{steps.download-artifacts.outputs.download-path}}" | |
chmod +x "${download_path}/linux-x86_64-unknown-linux-gnu/dummy-blockchain" | |
mv "$download_path/linux-x86_64-unknown-linux-gnu/dummy-blockchain" "$download_path/dummy-blockchain-x86_64-unknown-linux-gnu" | |
- name: Generate Change Log | |
id: changelog | |
if: ${{ startsWith(github.ref, 'refs/tags/') }} | |
run: | | |
chmod 755 ./.github/generate_change_log.sh | |
CHANGELOG=$(./.github/generate_change_log.sh "${{ env.RELEASE_VERSION }}" "${{steps.download-artifacts.outputs.download-path}}") | |
echo "CHANGELOG<<EOF" >> $GITHUB_ENV | |
echo "$CHANGELOG" >> $GITHUB_ENV | |
echo "EOF" >> $GITHUB_ENV | |
- name: Log in to the Container registry | |
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 | |
with: | |
registry: ${{ env.REGISTRY }} | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Generate docker tags/labels from github build context | |
id: meta | |
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 | |
with: | |
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} | |
tags: | | |
type=ref,event=tag | |
type=sha,prefix=,enable=true | |
flavor: | | |
latest=${{ startsWith(github.ref, 'refs/tags/') }} | |
- name: Build and push Docker image | |
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc | |
with: | |
context: ${{steps.download-artifacts.outputs.download-path}} | |
file: ./Dockerfile | |
push: true | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} | |
- name: Create Release | |
uses: softprops/action-gh-release@v1 | |
if: ${{ startsWith(github.ref, 'refs/tags/') }} | |
with: | |
name: ${{ env.RELEASE_VERSION }} | |
tag_name: ${{ env.RELEASE_VERSION }} | |
draft: false | |
prerelease: false | |
body: ${{ env.CHANGELOG }} | |
token: ${{ secrets.GITHUB_TOKEN }} | |
fail_on_unmatched_files: true | |
generate_release_notes: true | |
files: | | |
${{steps.download-artifacts.outputs.download-path}}/* |