Publisher/.forgejo/workflows/Installer_Windows-AMD64-Nightly.yaml

176 lines
6.6 KiB
YAML
Raw Normal View History

2025-02-12 18:02:16 +00:00
name: Build Installer for Windows/AMD64/Nightly
on:
schedule:
- cron: "0 0 * * *"
2025-02-12 18:02:16 +00:00
jobs:
build-windows:
runs-on: win-10
steps:
- name: Install rsrc tool
shell: bash
run: |
go install github.com/akavel/rsrc@latest
2025-02-12 18:02:16 +00:00
- name: Clone Publisher repo
shell: bash
run: |
git clone https://weforge.xyz/Spitfire/Publisher.git
- name: Clone, generate manifest, convert icon, and Build Spitfire Installer
2025-02-12 18:02:16 +00:00
shell: bash
run: |
set -e
2025-02-12 18:02:16 +00:00
git clone https://weforge.xyz/Spitfire/Installer.git
cd Installer
# Compute current date (e.g. 2025.02.11)
DATE=$(date +'%Y.%m.%d')
# Download the icon PNG (530x530) from the dynamic URL
curl -L "https://weforge.xyz/Spitfire/Branding/src/branch/main/active/browser/icon.png" -o icon.png
# Convert the PNG to a Windows ICO file with multiple sizes using ImageMagick.
# This command auto-resizes to common icon sizes: 256, 128, 64, 48, 32, and 16.
magick convert icon.png -define icon:auto-resize=256,128,64,48,32,16 icon.ico
# Create dynamic app.manifest with DATE as version (appending .0 to meet version format)
cat <<EOF > app.manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
name="Spitfire Installer"
version="${DATE}.0"
processorArchitecture="*"
type="win32"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware>true/PM</dpiAware>
</windowsSettings>
</application>
</assembly>
EOF
# Create version info JSON with dynamic version and website URLs in Comments
cat <<EOF > versioninfo.json
{
"Version": {
"Major": 0,
"Minor": 0,
"Patch": 0,
"Build": 0
},
"CompanyName": "Spitfire Browser",
"FileDescription": "Official Installer for Spitfire Browser",
"FileVersion": "${DATE}.0",
"InternalName": "spitfire-installer",
"LegalCopyright": "Copyright © Spitfire Browser",
"OriginalFilename": "spitfire-installer.exe",
"ProductName": "Spitfire Browser",
"ProductVersion": "${DATE}.0",
"Comments": "Official website: https://spitfirebrowser.xyz; Source/Dev website: https://weforge.xyz"
}
EOF
# Generate the resource file embedding manifest, version info, and the icon.
rsrc -manifest app.manifest -json versioninfo.json -ico icon.ico -o rsrc.syso
# Build the installer; rsrc.syso is automatically linked by the Go compiler.
2025-02-12 18:02:16 +00:00
CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o spitfire-installer.exe
# Move the built executable one level up for further packaging.
2025-02-12 18:02:16 +00:00
mv spitfire-installer.exe ..
- name: Setup SSH Key for SourceForge
shell: bash
env:
SF_SSH_KEY: ${{ secrets.SF_SSH_KEY }}
run: |
echo "$SF_SSH_KEY" | sed 's/\\n/\n/g' | tr -d '\r' > sf_key
chmod 600 sf_key
- name: Download existing APPINDEX
shell: bash
env:
SF_USER: ${{ secrets.SF_USER }}
run: |
scp -i sf_key -o IdentitiesOnly=yes \
"$SF_USER@frs.sourceforge.net:/home/frs/project/spitfire-browser/APPINDEX" \
APPINDEX || true
- name: Compress artifact
shell: bash
run: |
tar -czf spitfire-installer-amd64-nightly-windows.tar.gz spitfire-installer.exe
ls -l
- name: Prepare installer folder structure and move artifact
shell: bash
run: |
# Compute current date (e.g. 2025.02.11)
DATE=$(date +'%Y.%m.%d')
# Create a separate packaging folder "upload" to avoid conflicts with the cloned repo folder.
mkdir -p upload/installer/amd64/nightly/$DATE
mv spitfire-installer-amd64-nightly-windows.tar.gz upload/installer/amd64/nightly/$DATE/
# Save the date for later steps.
echo "$DATE" > date.txt
- name: Upload installer artifact to SourceForge
shell: bash
env:
SF_USER: ${{ secrets.SF_USER }}
run: |
# Read the date from file (if needed later)
DATE=$(cat date.txt)
# Upload the entire packaging folder recursively.
scp -r -i sf_key -o IdentitiesOnly=yes upload/installer "$SF_USER@frs.sourceforge.net:/home/frs/project/spitfire-browser/"
- name: Update APPINDEX
shell: bash
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" \
--dependencies "" \
--platform "windows" \
--icon "https://weforge.xyz/Spitfire/Branding/raw/branch/main/active/browser/icon.svg" \
--screenshots "https://spitfirebrowser.xyz/static/images/screenshots/1.png" \
--tags "browser,experimental,testing" \
--notes "Automated build of Spitfire" \
--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
shell: bash
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 SSH Key
if: always()
shell: bash
run: |
rm -f sf_key