-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: Add github actions for release automation
- Loading branch information
1 parent
0dd5ad6
commit ca044a4
Showing
3 changed files
with
212 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
name: Compile into binaries | ||
|
||
on: | ||
release: | ||
types: [created] | ||
|
||
workflow_dispatch: | ||
inputs: | ||
release: | ||
description: 'Release tag where to create the binaries (as SemVer vX.X.X)' | ||
required: true | ||
default: v0.1.0 | ||
|
||
permissions: | ||
contents: write | ||
packages: write | ||
|
||
jobs: | ||
releases-matrix: | ||
name: Release Go Binary | ||
runs-on: ubuntu-latest | ||
strategy: | ||
matrix: | ||
# build and publish in parallel: | ||
# linux/386, linux/amd64, linux/arm64, windows/386, windows/amd64, darwin/amd64, darwin/arm64 | ||
goos: [linux, windows, darwin] | ||
goarch: ["386", amd64, arm64] | ||
exclude: | ||
- goarch: "386" | ||
goos: darwin | ||
- goarch: arm64 | ||
goos: windows | ||
steps: | ||
- id: read_tag | ||
name: Read release tag name (mostly vx.x.x) | ||
run: | | ||
if [ "${{ github.event_name }}" = "release" ]; then | ||
export TAG="${{ github.ref_name }}" | ||
elif [ "${{ github.event_name }}" = "workflow_dispatch" ]; then | ||
export TAG="${{ inputs.release }}" | ||
fi | ||
echo "release_tag=${TAG}" >> "$GITHUB_OUTPUT" | ||
- uses: actions/checkout@v3 | ||
with: | ||
ref: ${{ steps.read_tag.outputs.release_tag }} | ||
|
||
- name: Read Go version from go.mod | ||
id: read_go_version | ||
run: | | ||
go_version_raw=$(grep "^go " go.mod | awk '{print $2}') | ||
echo "go_version=${go_version_raw}" >> "$GITHUB_OUTPUT" | ||
# Find the path for main.go file as recently golang project | ||
# structure was finally standardized | ||
- name: Determine main.go path | ||
id: find_main_go | ||
run: | | ||
if [ -f "./main.go" ]; then | ||
echo "main_go_path=./" >> "$GITHUB_OUTPUT" | ||
else | ||
echo "main_go_path=./cmd/" >> "$GITHUB_OUTPUT" | ||
fi | ||
# Omit the LICENSE file only for the very first release. | ||
# This step is only to manage some technical debt we caused in the beginning. | ||
- name: Find release extra files | ||
id: find_release_extra_files | ||
run: | | ||
if [ -f "./LICENSE" ]; then | ||
echo "release_extra_files=LICENSE README.md" >> "$GITHUB_OUTPUT" | ||
else | ||
echo "release_extra_files=README.md" >> "$GITHUB_OUTPUT" | ||
fi | ||
- uses: wangyoucao577/[email protected] | ||
with: | ||
github_token: ${{ secrets.GITHUB_TOKEN }} | ||
goos: ${{ matrix.goos }} | ||
goarch: ${{ matrix.goarch }} | ||
#goversion: "${{ steps.read_go_version.outputs.go_version }}" | ||
goversion: "https://dl.google.com/go/go${{ steps.read_go_version.outputs.go_version }}.linux-amd64.tar.gz" | ||
project_path: "${{ steps.find_main_go.outputs.main_go_path }}" | ||
binary_name: "replika" | ||
release_tag: ${{ inputs.release }} | ||
overwrite: true | ||
extra_files: "${{ steps.find_release_extra_files.outputs.release_extra_files }}" |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
name: Bundle Kubernetes manifests | ||
|
||
on: | ||
release: | ||
types: [created] | ||
|
||
workflow_dispatch: | ||
inputs: | ||
release: | ||
description: 'Release tag where to create the binaries (as SemVer vX.X.X)' | ||
required: true | ||
default: v0.1.0 | ||
|
||
permissions: | ||
contents: write | ||
packages: write | ||
|
||
jobs: | ||
build: | ||
name: Release Kubernetes manifests | ||
runs-on: ubuntu-latest | ||
steps: | ||
- id: read_tag | ||
name: Read release tag name (mostly vx.x.x) | ||
run: | | ||
if [ "${{ github.event_name }}" = "release" ]; then | ||
export TAG="${{ github.ref_name }}" | ||
elif [ "${{ github.event_name }}" = "workflow_dispatch" ]; then | ||
export TAG="${{ inputs.release }}" | ||
fi | ||
echo "release_tag=${TAG}" >> "$GITHUB_OUTPUT" | ||
- uses: actions/checkout@v3 | ||
with: | ||
ref: ${{ steps.read_tag.outputs.release_tag }} | ||
|
||
- name: Read Go version from go.mod | ||
id: read_go_version | ||
run: | | ||
go_version_raw=$(grep "^go " go.mod | awk '{print $2}') | ||
echo "go_version=${go_version_raw}" >> "$GITHUB_OUTPUT" | ||
- uses: actions/setup-go@v5 | ||
with: | ||
go-version: '${{ steps.read_go_version.outputs.go_version }}' | ||
check-latest: true | ||
|
||
- id: build | ||
name: Build manifests bundle | ||
env: | ||
RELEASE_TAG: ${{ steps.read_tag.outputs.release_tag }} | ||
run: | | ||
export IMG="ghcr.io/$GITHUB_REPOSITORY:$RELEASE_TAG" | ||
make bundle-build | ||
- name: Attach bundle to the release | ||
uses: softprops/action-gh-release@v2 | ||
env: | ||
RELEASE_TAG: ${{ steps.read_tag.outputs.release_tag }} | ||
with: | ||
tag_name: ${{ steps.read_tag.outputs.release_tag }} | ||
body: "" | ||
files: | | ||
deploy/bundle.yaml | ||
append_body: true | ||
generate_release_notes: false |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
name: Build Docker image | ||
|
||
on: | ||
release: | ||
types: [created] | ||
|
||
workflow_dispatch: | ||
inputs: | ||
release: | ||
description: 'Release tag where to create the binaries (as SemVer vX.X.X)' | ||
required: true | ||
default: v0.1.0 | ||
|
||
permissions: | ||
contents: write | ||
packages: write | ||
|
||
jobs: | ||
build: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
|
||
- name: Set up Go | ||
uses: actions/setup-go@v5 | ||
with: | ||
go-version: 1.21 | ||
|
||
- name: Set up QEMU | ||
id: qemu | ||
uses: docker/setup-qemu-action@v3 | ||
with: | ||
image: tonistiigi/binfmt:latest | ||
platforms: all | ||
|
||
- name: Set up Docker Buildx | ||
id: buildx | ||
uses: docker/setup-buildx-action@v3 | ||
|
||
- name: Docker Login | ||
uses: docker/login-action@v3 | ||
with: | ||
registry: ghcr.io | ||
username: ${{ github.actor }} | ||
password: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
- name: Build and push | ||
run: | | ||
if [ "${{ github.event_name }}" = "release" ]; then | ||
export TAG="${{ github.ref_name }}" | ||
elif [ "${{ github.event_name }}" = "workflow_dispatch" ]; then | ||
export TAG="${{ inputs.release }}" | ||
fi | ||
export IMG="ghcr.io/$GITHUB_REPOSITORY:$TAG" | ||
make docker-buildx |