test latest #4
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build Windows Installer | |
| on: | |
| push: | |
| tags: | |
| - "v*.*.*" | |
| workflow_dispatch: | |
| workflow_call: | |
| jobs: | |
| build-windows-installer: | |
| runs-on: windows-latest | |
| steps: | |
| - name: Set variables | |
| shell: pwsh | |
| run: | | |
| $repoFullName = "${{ github.repository }}" | |
| $ref = "${{ github.ref }}" | |
| # Handle both tag events and manual dispatch | |
| if ($ref -match "^refs/tags/") { | |
| $releaseVersion = $ref -replace "refs/tags/", "" | |
| $appVersion = $releaseVersion -replace "^v", "" | |
| } else { | |
| # For manual dispatch, use a default version | |
| $releaseVersion = "dev-$(Get-Date -Format 'yyyyMMdd-HHmmss')" | |
| $appVersion = "0.0.1-dev" | |
| } | |
| $repositoryName = $repoFullName.Split("/")[1] | |
| echo "githubRepository=${{ github.repository }}" >> $env:GITHUB_ENV | |
| echo "githubRepositoryName=$repositoryName" >> $env:GITHUB_ENV | |
| echo "releaseVersion=$releaseVersion" >> $env:GITHUB_ENV | |
| echo "appVersion=$appVersion" >> $env:GITHUB_ENV | |
| echo "executableName=Cleanuparr.Api" >> $env:GITHUB_ENV | |
| echo "APP_VERSION=$appVersion" >> $env:GITHUB_ENV | |
| - name: Get vault secrets | |
| uses: hashicorp/vault-action@v2 | |
| with: | |
| url: ${{ secrets.VAULT_HOST }} | |
| method: approle | |
| roleId: ${{ secrets.VAULT_ROLE_ID }} | |
| secretId: ${{ secrets.VAULT_SECRET_ID }} | |
| secrets: | |
| secrets/data/github repo_readonly_pat | REPO_READONLY_PAT; | |
| secrets/data/github packages_pat | PACKAGES_PAT | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: ${{ env.githubRepository }} | |
| ref: ${{ github.ref_name }} | |
| token: ${{ env.REPO_READONLY_PAT }} | |
| - name: Setup Node.js for frontend build | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '18' | |
| cache: 'npm' | |
| cache-dependency-path: code/frontend/package-lock.json | |
| - name: Build frontend | |
| run: | | |
| cd code/frontend | |
| npm ci | |
| npm run build | |
| - name: Setup .NET | |
| uses: actions/setup-dotnet@v4 | |
| with: | |
| dotnet-version: 9.0.x | |
| - name: Restore .NET dependencies | |
| run: | | |
| dotnet nuget add source --username ${{ github.repository_owner }} --password ${{ env.PACKAGES_PAT }} --store-password-in-clear-text --name flmorg https://nuget.pkg.github.com/flmorg/index.json | |
| dotnet restore code/backend/${{ env.executableName }}/${{ env.executableName }}.csproj | |
| - name: Copy frontend to backend wwwroot | |
| shell: pwsh | |
| run: | | |
| New-Item -ItemType Directory -Force -Path "code/backend/${{ env.executableName }}/wwwroot" | |
| Copy-Item -Path "code/frontend/dist/ui/browser/*" -Destination "code/backend/${{ env.executableName }}/wwwroot/" -Recurse -Force | |
| - name: Build Windows executable | |
| run: | | |
| dotnet publish code/backend/${{ env.executableName }}/${{ env.executableName }}.csproj -c Release --runtime win-x64 --self-contained -o dist /p:PublishSingleFile=true /p:Version=${{ env.appVersion }} /p:DebugType=None /p:DebugSymbols=false | |
| - name: Create sample configuration | |
| shell: pwsh | |
| run: | | |
| # Create config directory | |
| New-Item -ItemType Directory -Force -Path "config" | |
| $config = @{ | |
| "HTTP_PORTS" = 11011 | |
| "BASE_PATH" = "/" | |
| } | |
| $config | ConvertTo-Json | Out-File -FilePath "config/cleanuparr.json" -Encoding UTF8 | |
| - name: Setup Inno Setup | |
| shell: pwsh | |
| run: | | |
| # Download and install Inno Setup | |
| $url = "https://jrsoftware.org/download.php/is.exe" | |
| $output = "innosetup-installer.exe" | |
| Invoke-WebRequest -Uri $url -OutFile $output | |
| Start-Process -FilePath $output -ArgumentList "/VERYSILENT", "/SUPPRESSMSGBOXES", "/NORESTART" -Wait | |
| # Add Inno Setup to PATH | |
| $innoPath = "C:\Program Files (x86)\Inno Setup 6" | |
| echo "$innoPath" >> $env:GITHUB_PATH | |
| - name: Verify LICENSE file exists | |
| shell: pwsh | |
| run: | | |
| if (-not (Test-Path "LICENSE")) { | |
| Write-Error "LICENSE file not found in repository root" | |
| exit 1 | |
| } | |
| Write-Host "LICENSE file found successfully" | |
| - name: Build Windows installer | |
| shell: pwsh | |
| run: | | |
| # Copy installer script to root | |
| Copy-Item "installers/windows/cleanuparr-installer.iss" -Destination "cleanuparr-installer.iss" | |
| # The installer script has been pre-updated with proper icon and config paths | |
| # No dynamic modifications needed as the base script now includes correct references | |
| # Run Inno Setup compiler | |
| & "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" "cleanuparr-installer.iss" | |
| # Check if installer was created | |
| if (Test-Path "installer/Cleanuparr_Setup.exe") { | |
| Write-Host "Installer created successfully" | |
| } else { | |
| Write-Error "Installer creation failed" | |
| exit 1 | |
| } | |
| - name: Rename installer with version | |
| shell: pwsh | |
| run: | | |
| $installerName = "Cleanuparr-${{ env.appVersion }}-Setup.exe" | |
| Move-Item "installer/Cleanuparr_Setup.exe" "installer/$installerName" | |
| echo "installerName=$installerName" >> $env:GITHUB_ENV | |
| - name: Upload installer artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: Cleanuparr-windows-installer | |
| path: installer/${{ env.installerName }} | |
| retention-days: 30 | |
| - name: Release | |
| if: startsWith(github.ref, 'refs/tags/') | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| name: ${{ env.releaseVersion }} | |
| tag_name: ${{ env.releaseVersion }} | |
| repository: ${{ env.githubRepository }} | |
| token: ${{ env.REPO_READONLY_PAT }} | |
| make_latest: true | |
| files: | | |
| installer/${{ env.installerName }} |