Piece of SHiT Windows keeps crashing, saying "I/O error" and showing blue screen nonsense. It's barely working, so I decided to get rid of the Forgejo windows runner. I wanted to use the Windows runner to build Windows binaries since Windows can make better binaries for itself, but I’d rather get slower binaries than no binaries at all.
128 lines
No EOL
4.7 KiB
YAML
128 lines
No EOL
4.7 KiB
YAML
name: Build Installer for Windows/AMD64/Nightly
|
|
|
|
on:
|
|
workflow_dispatch: {}
|
|
schedule:
|
|
- cron: "0 0 * * *"
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: alpine-1.20
|
|
|
|
steps:
|
|
- name: Setup Environment
|
|
run: |
|
|
export LOCAL_BIN="$HOME/.local/bin"
|
|
mkdir -p "$LOCAL_BIN"
|
|
export PATH="$PATH:$LOCAL_BIN:$HOME/go/bin"
|
|
|
|
- name: Verify Tools
|
|
run: |
|
|
command -v go || { echo "::error::Go not found"; exit 1; }
|
|
command -v git || { echo "::error::Git not found"; exit 1; }
|
|
command -v curl || { echo "::error::Curl not found"; exit 1; }
|
|
command -v x86_64-w64-mingw32-windres || { echo "::error::Mingw-w64 not found"; exit 1; }
|
|
command -v magick || { echo "::error::ImageMagick not found"; exit 1; }
|
|
[ -f "$HOME/go/bin/rsrc" ] || { echo "::error::rsrc not found"; exit 1; }
|
|
|
|
- name: Clone Repositories
|
|
run: |
|
|
git clone https://weforge.xyz/Spitfire/Publisher.git
|
|
git clone https://weforge.xyz/Spitfire/Installer.git
|
|
|
|
- name: Generate Manifest Files
|
|
shell: bash
|
|
run: |
|
|
cd Publisher
|
|
# Run win_manifest_gen.go from the Publisher repo to generate manifest files.
|
|
go run win_manifest_gen.go \
|
|
--name "Spitfire Installer" \
|
|
--company "Spitfire Browser" \
|
|
--description "Official Installer for Spitfire Browser" \
|
|
--official "https://spitfirebrowser.xyz" \
|
|
--dev "https://weforge.xyz" \
|
|
--requireAdmin=true
|
|
# Copy generated files (app.manifest and app.rc) to the workspace root.
|
|
cp app.manifest ../Installer/
|
|
cp app.rc ../Installer/
|
|
cd ..
|
|
|
|
- name: Build Windows Installer
|
|
working-directory: ./Installer
|
|
run: |
|
|
curl -fL "https://weforge.xyz/Spitfire/Branding/raw/branch/main/active/browser/icon.png" -o icon.png
|
|
magick icon.png -define icon:auto-resize=256,128,64,48,32,16 icon.ico
|
|
echo '1 ICON "icon.ico"' >> app.rc
|
|
x86_64-w64-mingw32-windres app.rc -O coff -o app.syso
|
|
$HOME/go/bin/rsrc -manifest app.manifest -o rsrc.syso
|
|
|
|
# Verify syso files exist
|
|
ls -la *.syso
|
|
|
|
CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc GOOS=windows GOARCH=amd64 \
|
|
go build -ldflags "-s -w -H=windowsgui" -o spitfire-installer.exe
|
|
|
|
# Verify executable metadata
|
|
exiftool spitfire-installer.exe
|
|
|
|
upx --best spitfire-installer.exe
|
|
|
|
- name: Setup SSH Key
|
|
env:
|
|
SF_SSH_KEY: ${{ secrets.SF_SSH_KEY }}
|
|
run: |
|
|
echo "${SF_SSH_KEY}" > sf_key
|
|
chmod 600 sf_key
|
|
|
|
- name: Download APPINDEX
|
|
env:
|
|
SF_USER: ${{ secrets.SF_USER }}
|
|
run: |
|
|
scp -i sf_key -vvv -o IdentitiesOnly=yes "$SF_USER@frs.sourceforge.net:/home/frs/project/spitfire-browser/APPINDEX" APPINDEX || true
|
|
|
|
- name: Prepare Artifact
|
|
run: |
|
|
DATE=$(date +'%Y.%m.%d')
|
|
mkdir -p upload/installer/amd64/nightly/$DATE
|
|
tar -czf upload/installer/amd64/nightly/$DATE/spitfire-installer-amd64-nightly-windows.tar.gz -C Installer spitfire-installer.exe
|
|
echo "$DATE" > date.txt
|
|
|
|
- name: Upload Artifact
|
|
env:
|
|
SF_USER: ${{ secrets.SF_USER }}
|
|
run: |
|
|
DATE=$(cat date.txt)
|
|
scp -r -i sf_key -o IdentitiesOnly=yes upload/installer "$SF_USER@frs.sourceforge.net:/home/frs/project/spitfire-browser/"
|
|
|
|
- name: Update APPINDEX
|
|
run: |
|
|
DATE=$(cat date.txt)
|
|
cd Publisher
|
|
cp ../APPINDEX . || true
|
|
go run update_appindex.go \
|
|
--name "spitfire-installer" \
|
|
--release "nightly" \
|
|
--version "$DATE" \
|
|
--arch "amd64" \
|
|
--description "Nightly build" \
|
|
--url "https://spitfirebrowser.xyz/" \
|
|
--license "AGPL-3.0" \
|
|
--origin "installer" \
|
|
--maintainer "Internet Addict" \
|
|
--platform "windows" \
|
|
--icon "https://weforge.xyz/Spitfire/Branding/raw/branch/main/active/browser/icon.svg" \
|
|
--remotePath "installer/amd64/nightly/$DATE/spitfire-installer-amd64-nightly-windows.tar.gz" \
|
|
--compressedFile "spitfire-installer-amd64-nightly-windows.tar.gz" \
|
|
--uncompressedFile "spitfire-installer.exe"
|
|
cp APPINDEX ../
|
|
|
|
- name: Upload Updated APPINDEX
|
|
env:
|
|
SF_USER: ${{ secrets.SF_USER }}
|
|
run: |
|
|
scp -i sf_key -o IdentitiesOnly=yes APPINDEX "$SF_USER@frs.sourceforge.net:/home/frs/project/spitfire-browser/APPINDEX"
|
|
|
|
- name: Cleanup
|
|
if: always()
|
|
run: |
|
|
rm -rf sf_key upload APPINDEX date.txt |