mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-13 19:49:51 +01:00
Build Windows Installer in CI (#4408)
* feat: build installer in CI Co-authored-by: 8thony <114905842+8thony@users.noreply.github.com> * fix: use inno-setup from PATH * fix: only match `v*` tags * fix: don't add to release * fix: only run on master --------- Co-authored-by: 8thony <114905842+8thony@users.noreply.github.com>
This commit is contained in:
parent
1438529e98
commit
accf91a48f
47
.CI/build-installer.ps1
Normal file
47
.CI/build-installer.ps1
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
if (-not (Test-Path -PathType Container Chatterino2)) {
|
||||||
|
Write-Error "Couldn't find a folder called 'Chatterino2' in the current directory.";
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if we're on a tag
|
||||||
|
$OldErrorActionPref = $ErrorActionPreference;
|
||||||
|
$ErrorActionPreference = 'Continue';
|
||||||
|
git describe --exact-match --match 'v*' *> $null;
|
||||||
|
$isTagged = $?;
|
||||||
|
$ErrorActionPreference = $OldErrorActionPref;
|
||||||
|
|
||||||
|
$defines = $null;
|
||||||
|
if ($isTagged) {
|
||||||
|
# This is a release.
|
||||||
|
# Make sure, any existing `modes` file is overwritten for the user,
|
||||||
|
# for example when updating from nightly to stable.
|
||||||
|
Write-Output "" > Chatterino2/modes;
|
||||||
|
$installerBaseName = "Chatterino.Installer";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Output nightly > Chatterino2/modes;
|
||||||
|
$defines = "/DIS_NIGHTLY=1";
|
||||||
|
$installerBaseName = "Chatterino.Nightly.Installer";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($Env:GITHUB_OUTPUT) {
|
||||||
|
# This is used in CI when creating the artifact
|
||||||
|
"C2_INSTALLER_BASE_NAME=$installerBaseName" >> "$Env:GITHUB_OUTPUT"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Copy vc_redist.x64.exe
|
||||||
|
if ($null -eq $Env:VCToolsRedistDir) {
|
||||||
|
Write-Error "VCToolsRedistDir is not set. Forgot to set Visual Studio environment variables?";
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
Copy-Item "$Env:VCToolsRedistDir\vc_redist.x64.exe" .;
|
||||||
|
|
||||||
|
# Build the installer
|
||||||
|
ISCC `
|
||||||
|
/DWORKING_DIR="$($pwd.Path)\" `
|
||||||
|
/DINSTALLER_BASE_NAME="$installerBaseName" `
|
||||||
|
$defines `
|
||||||
|
/O. `
|
||||||
|
"$PSScriptRoot\chatterino-installer.iss";
|
||||||
|
|
||||||
|
Move-Item "$installerBaseName.exe" "$installerBaseName$($Env:VARIANT_SUFFIX).exe"
|
87
.CI/chatterino-installer.iss
Normal file
87
.CI/chatterino-installer.iss
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
; Script generated by the Inno Setup Script Wizard.
|
||||||
|
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
|
||||||
|
|
||||||
|
#define MyAppName "Chatterino"
|
||||||
|
#define MyAppVersion "2.4.4"
|
||||||
|
#define MyAppPublisher "Chatterino Team"
|
||||||
|
#define MyAppURL "https://www.chatterino.com"
|
||||||
|
#define MyAppExeName "chatterino.exe"
|
||||||
|
|
||||||
|
; used in build-installer.ps1
|
||||||
|
; if set, must end in a backslash
|
||||||
|
#ifndef WORKING_DIR
|
||||||
|
#define WORKING_DIR ""
|
||||||
|
#endif
|
||||||
|
|
||||||
|
[Setup]
|
||||||
|
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
|
||||||
|
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
|
||||||
|
AppId={{F5FE6614-04D4-4D32-8600-0ABA0AC113A4}
|
||||||
|
AppName={#MyAppName}
|
||||||
|
AppVersion={#MyAppVersion}
|
||||||
|
VersionInfoVersion={#MyAppVersion}
|
||||||
|
AppVerName={#MyAppName} {#MyAppVersion}
|
||||||
|
AppPublisher={#MyAppPublisher}
|
||||||
|
AppPublisherURL={#MyAppURL}
|
||||||
|
AppSupportURL={#MyAppURL}
|
||||||
|
AppUpdatesURL={#MyAppURL}
|
||||||
|
DefaultDirName={autopf}\{#MyAppName}
|
||||||
|
DisableProgramGroupPage=yes
|
||||||
|
ArchitecturesInstallIn64BitMode=x64
|
||||||
|
;Uncomment the following line to run in non administrative install mode (install for current user only.)
|
||||||
|
;PrivilegesRequired=lowest
|
||||||
|
PrivilegesRequiredOverridesAllowed=dialog
|
||||||
|
OutputDir=out
|
||||||
|
; This is defined by the build-installer.ps1 script,
|
||||||
|
; but kept optional for regular use.
|
||||||
|
#ifdef INSTALLER_BASE_NAME
|
||||||
|
OutputBaseFilename={#INSTALLER_BASE_NAME}
|
||||||
|
#else
|
||||||
|
OutputBaseFilename=Chatterino.Installer
|
||||||
|
#endif
|
||||||
|
Compression=lzma
|
||||||
|
SolidCompression=yes
|
||||||
|
WizardStyle=modern
|
||||||
|
UsePreviousTasks=no
|
||||||
|
UninstallDisplayIcon={app}\{#MyAppExeName}
|
||||||
|
RestartIfNeededByRun=no
|
||||||
|
|
||||||
|
[Languages]
|
||||||
|
Name: "english"; MessagesFile: "compiler:Default.isl"
|
||||||
|
|
||||||
|
#ifdef IS_NIGHTLY
|
||||||
|
[Messages]
|
||||||
|
SetupAppTitle=Setup (Nightly)
|
||||||
|
SetupWindowTitle=Setup - %1 (Nightly)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
[Tasks]
|
||||||
|
Name: "vcredist"; Description: "Install the required Visual C++ 2015/2017/2019/2022 Redistributable";
|
||||||
|
; GroupDescription: "{cm:AdditionalIcons}";
|
||||||
|
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; Flags: unchecked
|
||||||
|
Name: "freshinstall"; Description: "Fresh install (delete old settings/logs)"; Flags: unchecked
|
||||||
|
|
||||||
|
[Files]
|
||||||
|
Source: "{#WORKING_DIR}Chatterino2\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
|
||||||
|
Source: "{#WORKING_DIR}vc_redist.x64.exe"; DestDir: "{tmp}"; Tasks: vcredist;
|
||||||
|
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
||||||
|
|
||||||
|
[Icons]
|
||||||
|
Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
|
||||||
|
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
|
||||||
|
|
||||||
|
[Run]
|
||||||
|
; VC++ redistributable
|
||||||
|
Filename: {tmp}\vc_redist.x64.exe; Parameters: "/install /passive /norestart"; StatusMsg: "Installing 64-bit Windows Universal Runtime..."; Flags: waituntilterminated; Tasks: vcredist
|
||||||
|
; Run chatterino
|
||||||
|
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
|
||||||
|
|
||||||
|
[InstallDelete]
|
||||||
|
; Delete cache on install
|
||||||
|
Type: filesandordirs; Name: "{userappdata}\Chatterino2\Cache"
|
||||||
|
; Delete %appdata%\Chatterino2 on freshinstall
|
||||||
|
Type: filesandordirs; Name: "{userappdata}\Chatterino2"; Tasks: freshinstall
|
||||||
|
|
||||||
|
[UninstallDelete]
|
||||||
|
; Delete cache on uninstall
|
||||||
|
Type: filesandordirs; Name: "{userappdata}\Chatterino2\Cache"
|
56
.github/workflows/create-installer.yml
vendored
Normal file
56
.github/workflows/create-installer.yml
vendored
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
name: Create installer
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_run:
|
||||||
|
workflows: ["Build"]
|
||||||
|
types: [completed]
|
||||||
|
# make sure this only runs on the default branch
|
||||||
|
branches: [master]
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
create-installer:
|
||||||
|
runs-on: windows-latest
|
||||||
|
# Only run manually or when a build succeeds
|
||||||
|
if: ${{ github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success' }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
qt-version: [5.15.2, 6.5.0]
|
||||||
|
env:
|
||||||
|
VARIANT_SUFFIX: ${{ startsWith(matrix.qt-version, '6.') && '.EXPERIMENTAL-Qt6' || '' }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 0 # allows for tags access
|
||||||
|
|
||||||
|
- name: Download artifact
|
||||||
|
uses: dawidd6/action-download-artifact@v2
|
||||||
|
with:
|
||||||
|
workflow: build.yml
|
||||||
|
name: chatterino-windows-x86-64-Qt-${{ matrix.qt-version }}.zip
|
||||||
|
path: build/
|
||||||
|
|
||||||
|
- name: Unzip
|
||||||
|
run: 7z e -spf chatterino-windows-x86-64-Qt-${{ matrix.qt-version }}.zip
|
||||||
|
working-directory: build
|
||||||
|
|
||||||
|
- name: Install InnoSetup
|
||||||
|
run: choco install innosetup
|
||||||
|
|
||||||
|
- name: Add InnoSetup to path
|
||||||
|
run: echo "C:\Program Files (x86)\Inno Setup 6\" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
||||||
|
|
||||||
|
- name: Enable Developer Command Prompt
|
||||||
|
uses: ilammy/msvc-dev-cmd@v1.12.1
|
||||||
|
|
||||||
|
- name: Build installer
|
||||||
|
id: build-installer
|
||||||
|
working-directory: build
|
||||||
|
run: ..\.CI\build-installer.ps1
|
||||||
|
shell: powershell
|
||||||
|
|
||||||
|
- name: Upload installer
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
path: build/${{ steps.build-installer.outputs.C2_INSTALLER_BASE_NAME }}${{ env.VARIANT_SUFFIX }}.exe
|
||||||
|
name: ${{ steps.build-installer.outputs.C2_INSTALLER_BASE_NAME }}${{ env.VARIANT_SUFFIX }}.exe
|
|
@ -50,6 +50,7 @@
|
||||||
- Dev: Moved preprocessor Git and date definitions to executables only. (#4681)
|
- Dev: Moved preprocessor Git and date definitions to executables only. (#4681)
|
||||||
- Dev: Refactored tests to be able to use `ctest` and run in debug builds. (#4700)
|
- Dev: Refactored tests to be able to use `ctest` and run in debug builds. (#4700)
|
||||||
- Dev: Added the ability to use an alternate linker using the `-DUSE_ALTERNATE_LINKER=...` CMake parameter. (#4711)
|
- Dev: Added the ability to use an alternate linker using the `-DUSE_ALTERNATE_LINKER=...` CMake parameter. (#4711)
|
||||||
|
- Dev: The Windows installer is now built in CI. (#4408)
|
||||||
- Dev: Removed `getApp` and `getSettings` calls from message rendering. (#4535)
|
- Dev: Removed `getApp` and `getSettings` calls from message rendering. (#4535)
|
||||||
|
|
||||||
## 2.4.4
|
## 2.4.4
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
This can only be "whole versions", so if you're releasing `2.4.0-beta` you'll need to condense it to `2.4.0`
|
This can only be "whole versions", so if you're releasing `2.4.0-beta` you'll need to condense it to `2.4.0`
|
||||||
- [ ] Updated version code in `resources/com.chatterino.chatterino.appdata.xml`
|
- [ ] Updated version code in `resources/com.chatterino.chatterino.appdata.xml`
|
||||||
This cannot use dash to denote a pre-release identifier, you have to use a tilde instead.
|
This cannot use dash to denote a pre-release identifier, you have to use a tilde instead.
|
||||||
|
- [ ] Updated version code in `.CI/chatterino-installer.iss`
|
||||||
- [ ] Update the changelog `## Unreleased` section to the new version `CHANGELOG.md`
|
- [ ] Update the changelog `## Unreleased` section to the new version `CHANGELOG.md`
|
||||||
Make sure to leave the `## Unreleased` line unchanged for easier merges
|
Make sure to leave the `## Unreleased` line unchanged for easier merges
|
||||||
- [ ] Push directly to master :tf:
|
- [ ] Push directly to master :tf:
|
||||||
|
|
Loading…
Reference in a new issue