Skip to content
This repository was archived by the owner on May 17, 2025. It is now read-only.

Tests CI the works

Tests CI the works #1

name: Test, Build and Release
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
schedule:
- cron: '0 0 * * *' # Run every day at midnight UTC for nightly builds
workflow_dispatch: # Allow manual trigger
jobs:
test:
name: Run Tests
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Linux dependencies
run: |
sudo apt-get update
sudo apt-get install -y libasound2-dev libudev-dev pkg-config
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- name: Cache Rust dependencies
uses: Swatinem/rust-cache@v2
- name: Run tests
run: cargo test
- name: Run clippy
run: cargo clippy -- -D warnings
build-windows:
name: Build Windows
needs: test # This ensures tests must pass before build starts
runs-on: windows-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache Rust dependencies
uses: Swatinem/rust-cache@v2
- name: Build Release
run: cargo build --release
- name: Create game directory structure
run: |
mkdir -p dist/assets
copy target\release\my-rts-game.exe dist\
if (Test-Path -Path assets) { xcopy assets dist\assets\ /E /I /Y }
if (Test-Path -Path README.md) { copy README.md dist\ }
- name: Generate timestamp
id: timestamp
run: echo "::set-output name=value::$(Get-Date -Format 'yyyyMMdd-HHmmss')"
shell: pwsh
- name: Create ZIP Archive
run: |
Compress-Archive -Path dist\* -DestinationPath my-rts-game-nightly-${{ steps.timestamp.outputs.value }}.zip
shell: pwsh
- name: Upload ZIP
uses: actions/upload-artifact@v3
with:
name: windows-zip
path: my-rts-game-nightly-${{ steps.timestamp.outputs.value }}.zip
- name: Download Inno Setup
run: |
Invoke-WebRequest -Uri "https://files.jrsoftware.org/is/6/innosetup-6.2.2.exe" -OutFile innosetup.exe
Start-Process -FilePath "innosetup.exe" -ArgumentList "/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-" -Wait
shell: pwsh
- name: Create Inno Setup Script
run: |
$timestamp = "${{ steps.timestamp.outputs.value }}"
@"
#define MyAppName "My RTS Game"
#define MyAppVersion "nightly-$timestamp"
#define MyAppPublisher "Your Name"
#define MyAppURL "https://github.com/${{ github.repository }}"
#define MyAppExeName "my-rts-game.exe"
[Setup]
AppId={{YOUR_UNIQUE_APP_ID_HERE}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
DefaultDirName={autopf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
Compression=lzma
SolidCompression=yes
OutputDir=installer
OutputBaseFilename=my-rts-game-setup-{#MyAppVersion}
ArchitecturesInstallIn64BitMode=x64
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "dist\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
"@ | Out-File -FilePath installer.iss -Encoding utf8
shell: pwsh
- name: Compile Installer
run: |
& "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" installer.iss
shell: pwsh
- name: Upload Installer
uses: actions/upload-artifact@v3
with:
name: windows-installer
path: installer/*.exe
create-release:
name: Create Release
needs: build-windows
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
steps:
- name: Generate timestamp for release name
id: timestamp
run: echo "value=$(date +'%Y%m%d-%H%M%S')" >> $GITHUB_OUTPUT
- name: Download all artifacts
uses: actions/download-artifact@v3
- name: Create Nightly Release
uses: softprops/action-gh-release@v1
with:
name: "Nightly Build ${{ steps.timestamp.outputs.value }}"
tag_name: "nightly-${{ steps.timestamp.outputs.value }}"
files: |
windows-installer/*.exe
windows-zip/*.zip
prerelease: true
generate_release_notes: true