Skip to content

v1.9.0

v1.9.0 #110

Workflow file for this run

name: Release October
on:
pull_request:
branches: [main]
release:
types: [published]
jobs:
release:
strategy:
matrix:
build:
- platform: darwin/amd64
os: macos-latest
tag: darwin_amd64
- platform: darwin/arm64
os: macos-latest
tag: darwin_arm64
- platform: darwin/universal
os: macos-latest
tag: darwin_universal
- arch: amd64
platform: linux/amd64
os: ubuntu-latest
tag: linux_amd64
- arch: arm64
platform: linux/arm64
os: buildjet-4vcpu-ubuntu-2204-arm
tag: linux_arm64
- arch: amd64
platform: windows/amd64
os: windows-latest
tag: windows_amd64
- arch: amd64
platform: windows/amd64
os: windows-latest
tag: windows-portable_amd64
runs-on: ${{ matrix.build.os }}
name: Release October (${{ matrix.build.tag }})
steps:
- name: Checkout source code
uses: actions/checkout@v4
# Set up common, sanitised environment variables
- name: Normalise version tag
id: normalise_version
shell: bash
run: |
if [ -n "${{ github.event.release.tag_name }}" ]; then
version=$(echo ${{ github.event.release.tag_name }} | sed -e 's/v//g')
else
version="1.0.0"
fi
echo "version=$version" >> $GITHUB_OUTPUT
# Set up development dependencies
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: 1.22
- name: Install wails
shell: bash
run: go install github.com/wailsapp/wails/v2/cmd/wails@v2.8.2
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: '20.8.0'
# Dependencies
## Linux
- name: Install Ubuntu prerequisites
if: runner.os == 'Linux'
shell: bash
run: sudo apt-get update && sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev
## macOS
- name: Setup Gon
if: runner.os == 'macOS'
run: brew install Bearer/tap/gon
- name: Import code signing certificate from Github Secrets
uses: Apple-Actions/import-codesign-certs@v3
if: runner.os == 'macOS'
with:
p12-file-base64: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_P12_BASE64 }}
p12-password: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_PASSWORD }}
## Windows
- name: Install Windows dependencies
if: runner.os == 'Windows'
uses: crazy-max/ghaction-chocolatey@v3
with:
args: install nsis
# Build -- frontend
- name: Build frontend assets
shell: bash
run: |
npm install -g npm
node version.js "v${{ steps.normalise_version.outputs.version }}"
cd frontend && npm install
# Build -- app variants
## Linux
- name: Build wails app for Linux / macOS
if: runner.os == 'Linux' || runner.os == 'macOS'
shell: bash
run: wails build -platform ${{ matrix.build.platform }} -ldflags "-X main.version=v${{ steps.normalise_version.outputs.version }}"
## Windows
- name: Build Windows NSIS installer (Normal)
if: runner.os == 'Windows' && matrix.build.tag == 'windows_amd64'
shell: bash
run: wails build -platform ${{ matrix.build.platform }} -nsis -ldflags "-X main.version=v${{ steps.normalise_version.outputs.version }}" -windowsconsole
- name: Build Windows NSIS installer (Portable)
if: runner.os == 'Windows' && matrix.build.tag == 'windows-portable_amd64'
shell: bash
run: wails build -platform ${{ matrix.build.platform }} -nsis -ldflags "-X main.version=v${{ steps.normalise_version.outputs.version }} -X main.portablebuild=true" -windowsconsole
# Codesigning (only performed when releases are cut)
## macOS
- name: Notarise macOS app + create dmg
if: runner.os == 'macOS' && startsWith(github.ref, 'refs/tags/')
shell: bash
run: gon -log-level=info gon.config.json
env:
AC_USERNAME: ${{ secrets.AC_USERNAME }}
AC_PASSWORD: ${{ secrets.AC_PASSWORD }}
AC_PROVIDER: "6RNEAKRYDT"
## Windows
- name: Codesign Windows NSIS Installer
if: runner.os == 'Windows' && matrix.build.tag == 'windows_amd64' && startsWith(github.ref, 'refs/tags/')
run: |
echo "Creating certificate file"
New-Item -ItemType directory -Path certificate
Set-Content -Path certificate\certificate.txt -Value '${{ secrets.WIN_SIGNING_CERT }}'
certutil -decode certificate\certificate.txt certificate\certificate.pfx
echo "Signing October installer"
& 'C:/Program Files (x86)/Windows Kits/10/bin/10.0.17763.0/x86/signtool.exe' sign /fd sha256 /tr http://ts.ssl.com /f certificate\certificate.pfx /p '${{ secrets.WIN_SIGNING_CERT_PASSWORD }}' October-${{ matrix.build.arch }}-installer.exe
working-directory: ./build/bin
- name: Codesign Windows Portable
if: runner.os == 'Windows' && matrix.build.portable == 'windows-portable_amd64' && startsWith(github.ref, 'refs/tags/')
run: |
echo "Creating certificate file"
New-Item -ItemType directory -Path certificate
Set-Content -Path certificate\certificate.txt -Value '${{ secrets.WIN_SIGNING_CERT }}'
certutil -decode certificate\certificate.txt certificate\certificate.pfx
echo "Signing October installer"
& 'C:/Program Files (x86)/Windows Kits/10/bin/10.0.17763.0/x86/signtool.exe' sign /fd sha256 /tr http://ts.ssl.com /f certificate\certificate.pfx /p '${{ secrets.WIN_SIGNING_CERT_PASSWORD }}' october.exe
working-directory: ./build/bin
# Packaging
## Linux
- name: Package up deb file
if: runner.os == 'Linux'
shell: bash
run: |
mv build/bin/october build/linux/october_0.0.0_ARCH/usr/local/bin/
cd build/linux
sed -i 's/0.0.0/${{ steps.normalise_version.outputs.version }}/g' "october_0.0.0_ARCH/DEBIAN/control"
sed -i 's/ARCH/${{ matrix.build.arch }}/g' "october_0.0.0_ARCH/DEBIAN/control"
mv october_0.0.0_ARCH "october_${{ steps.normalise_version.outputs.version }}_${{ matrix.build.arch }}"
dpkg-deb --build "october_${{ steps.normalise_version.outputs.version }}_${{ matrix.build.arch }}"
- name: Compress deb
if: runner.os == 'Linux'
shell: bash
run: |
cd build/linux && zip -r october-${{ matrix.build.tag }}.zip october_${{ steps.normalise_version.outputs.version }}_${{ matrix.build.arch }}.deb
mv october-${{ matrix.build.tag }}.zip ../bin
## macOS
- name: Compress macOS dmg
if: runner.os == 'macOS' && startsWith(github.ref, 'refs/tags/')
shell: bash
run: cd build/bin && zip -r october-${{ matrix.build.tag }}.zip October.dmg
- name: Compress macOS app
if: ${{ runner.os == 'macOS' && !startsWith(github.ref, 'refs/tags/') }}
shell: bash
run: cd build/bin && zip -r october-${{ matrix.build.tag }}.zip October.app
## Windows
- name: Remove old October binary
if: runner.os == 'Windows' && matrix.build.tag == 'windows_amd64'
shell: bash
run: rm October.exe
working-directory: ./build/bin
- name: Compress binary (Win Normal)
if: runner.os == 'Windows' && matrix.build.tag == 'windows_amd64'
run: Compress-Archive October-${{ matrix.build.arch }}-installer.exe october-${{ matrix.build.tag }}.zip
working-directory: ./build/bin
- name: Compress binary (Win Portable)
if: runner.os == 'Windows' && matrix.build.tag == 'windows-portable_amd64'
run: Compress-Archive october.exe october-${{ matrix.build.tag }}.zip
working-directory: ./build/bin
- name: Upload build artifact
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
uses: actions/upload-artifact@v4
with:
name: october_pr${{ github.event.pull_request.number }}_${{ github.event.pull_request.head.sha }}_${{ matrix.build.tag }}.zip
path: |
./build/bin
- name: Get latest release from API
if: startsWith(github.ref, 'refs/tags/')
id: get_upload_url
shell: bash
run: |
curl -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" "https://api.github.com/repos/marcus-crane/october/releases" > /tmp/releases.json
url=$(jq -r '.[0].upload_url' /tmp/releases.json)
echo "url=$url" >> $GITHUB_OUTPUT
- name: Upload artifact
if: startsWith(github.ref, 'refs/tags/')
uses: actions/upload-release-asset@v1.0.2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ARTIFACT_NAME: october_${{ steps.normalise_version.outputs.version }}_${{ matrix.build.tag }}
with:
upload_url: ${{ steps.get_upload_url.outputs.url }}
asset_path: ./build/bin/october-${{ matrix.build.tag }}.zip
asset_name: ${{ env.ARTIFACT_NAME }}.zip
asset_content_type: application/zip