Release CLI #16
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
# Create an incremental tag (like `cli-v1.2.0`) on Github using SemVer https://semver.org: x.y.z | |
# Create the Release (like `cli-v1.2.0`) related to the tag and with the same name. | |
# Build the CLI for all OS and upload them to the release as assets. | |
name: Release CLI | |
on: | |
workflow_dispatch: | |
inputs: | |
choice: | |
type: choice | |
description: "Release types (x.y.patch / x.minor.z / major.y.z)" | |
options: | |
- patch | |
- minor | |
- major | |
jobs: | |
set-releasename: | |
runs-on: ubuntu-latest | |
name: New release name | |
outputs: | |
RELEASENAME: ${{ steps.set-outputs.outputs.RELEASENAME }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
# download tags | |
fetch-depth: 0 | |
- name: Last version | |
id: last-version | |
run: echo "LASTVERSION=$(git tag --list 'cli-v*' | sort -V | tail -n1 | sed 's/cli-v//')" >> $GITHUB_ENV | |
- name: Bump version | |
id: bump-version | |
uses: olegsu/semver-action@v1 | |
with: | |
version: ${{ env.LASTVERSION }} | |
bump: ${{ inputs.choice }} | |
- name: Output release name | |
id: set-outputs | |
run: echo "RELEASENAME=cli-v${{ steps.bump-version.outputs.version }}" >> "$GITHUB_OUTPUT" | |
build-cli: | |
# if: ${{ github.ref == 'refs/heads/main' }} | |
needs: set-releasename | |
name: Build CLI | |
strategy: | |
matrix: | |
include: | |
- goarch: amd64 | |
goos: linux | |
- goarch: amd64 | |
goos: windows | |
- goarch: arm64 | |
goos: darwin | |
- goarch: amd64 | |
goos: darwin | |
runs-on: ubuntu-latest | |
env: | |
RELEASENAME: ${{ needs.set-releasename.outputs.RELEASENAME }} | |
OSNAME: ${{matrix.goos == 'darwin' && 'macos' || matrix.goos }} | |
GOARCH: ${{ matrix.goarch }} | |
GOOS: ${{ matrix.goos }} | |
ARCHNAME: ${{ matrix.goarch == 'amd64' && 'x86-64' || matrix.goarch }} | |
outputs: | |
RELEASENAME: ${{ steps.set-outputs.outputs.RELEASENAME }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Set zipfile name | |
run: echo "ZIPFILE=sqlitecloud-go-${{ env.RELEASENAME }}-${{ env.OSNAME }}-${{ env.ARCHNAME }}.zip" >> $GITHUB_ENV | |
- name: Build CLI | |
run: | | |
cd cli | |
go build -o ../sqlc | |
cd .. | |
zip ${{ env.ZIPFILE }} sqlc | |
# Upload assets to be used in the last job | |
- name: Upload binary artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.ZIPFILE }} | |
path: ./${{ env.ZIPFILE }} | |
if-no-files-found: error | |
- name: Set outputs | |
id: set-outputs | |
run: | | |
echo "RELEASENAME=${{ env.RELEASENAME }}" >> "$GITHUB_OUTPUT" | |
release-cli: | |
name: Release CLI | |
needs: build-cli | |
runs-on: ubuntu-latest | |
env: | |
RELEASENAME: ${{ needs.build-cli.outputs.RELEASENAME }} | |
outputs: | |
RELEASENAME: ${{ steps.set-outputs.outputs.RELEASENAME }} | |
UPLOADURL: ${{ steps.set-outputs.outputs.UPLOADURL }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Create Release for CLI | |
id: release | |
uses: softprops/action-gh-release@v2 | |
with: | |
tag_name: ${{ env.RELEASENAME }} | |
name: Release ${{ env.RELEASENAME }} | |
draft: false | |
generate_release_notes: true | |
make_latest: true | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Set outputs | |
id: set-outputs | |
run: | | |
echo "RELEASENAME=${{ env.RELEASENAME }}" >> "$GITHUB_OUTPUT" | |
echo "UPLOADURL=${{ steps.release.outputs.upload_url }}" >> "$GITHUB_OUTPUT" | |
upload-artifacts: | |
needs: release-cli | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
include: | |
- goarch: amd64 | |
goos: linux | |
- goarch: amd64 | |
goos: windows | |
- goarch: arm64 | |
goos: darwin | |
- goarch: amd64 | |
goos: darwin | |
env: | |
RELEASENAME: ${{ needs.release-cli.outputs.RELEASENAME }} | |
UPLOADURL: ${{ needs.release-cli.outputs.UPLOADURL }} | |
OSNAME: ${{matrix.goos == 'darwin' && 'macos' || matrix.goos }} | |
GOARCH: ${{ matrix.goarch }} | |
GOOS: ${{ matrix.goos }} | |
ARCHNAME: ${{ matrix.goarch == 'amd64' && 'x86-64' || matrix.goarch }} | |
steps: | |
- name: Set zip filename | |
run: echo "ZIPFILE=sqlitecloud-go-${{ env.RELEASENAME }}-${{ env.OSNAME }}-${{ env.ARCHNAME }}.zip" >> $GITHUB_ENV | |
- name: Download artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: ${{ env.ZIPFILE }} | |
- name: Upload Release Asset | |
id: upload-release-asset | |
uses: actions/upload-release-asset@v1 | |
if: matrix.goos != 'darwin' | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ env.UPLOADURL }} | |
asset_path: ./${{ env.ZIPFILE }} | |
asset_name: ${{ env.ZIPFILE }} | |
asset_content_type: application/zip |