1- # Step 1: Checkout the develop branch for nightly builds
2- - name : Checkout code
3- uses : actions/checkout@v4.2.2
4- with :
5- fetch-depth : 0
6- # Always checkout develop for nightly builds
7- ref : develop
8-
9- # Vérifier la branche active après le checkout
10- - name : Vérifier la branche active après checkout
11- run : echo "Branche active après checkout: $(git branch --show-current)"
12-
13- # Step 2: Verify if a new build is required by checking for merged PRs since last tag
14- - name : Check for merged PRs since last tag
15- id : check_prs
16- shell : powershell
17- run : |
18- # Find the latest tag of any type
19- $LATEST_TAG = git tag --sort=-v:refname | Select-Object -First 1
20- Write-Host "Latest tag: $LATEST_TAG"
21-
22- # Get merged PRs since last tag using Git directly
23- $MERGED_PRS = git log --merges --grep="Merge pull request" --oneline "$LATEST_TAG..develop"
24-
25- # If merged PRs exist, set BUILD_NEEDED and determine release type
26- if ($MERGED_PRS) {
27- Write-Host "Found PRs merged to develop since latest tag:"
28- Write-Host $MERGED_PRS
29- echo "BUILD_NEEDED=true" >> $env:GITHUB_OUTPUT
30-
31- # Determine release type
32- if ($LATEST_TAG -like "*-*") {
33- $RELEASE_TYPE = "prerelease"
34- }
35- else {
36- $RELEASE_TYPE = "preminor"
37- }
38- echo "RELEASE_TYPE=$RELEASE_TYPE" >> $env:GITHUB_OUTPUT
39- Write-Host "Next release: $RELEASE_TYPE"
40- } else {
41- # If no merged PRs, skip building
42- Write-Host "No PRs merged to develop since latest tag. Skipping build."
43- echo "BUILD_NEEDED=false" >> $env:GITHUB_OUTPUT
44- }
45-
46- # Vérifier la branche active après la vérification des PRs
47- - name : Vérifier la branche active après la vérification des PRs
48- run : echo "Branche active après la vérification des PRs: $(git branch --show-current)"
49-
50- # Step 3: Generate new semantic version number
51- - name : Auto Increment Semver Action
52- uses : MCKanpolat/auto-semver-action@5003b8d37f4b03d95f15303ea10242cbf7c13141 # 2
53- if : steps.check_prs.outputs.BUILD_NEEDED == 'true'
54- id : versioning
55- with :
56- github_token : ${{ secrets.GITHUB_TOKEN }}
57- incrementPerCommit : true
58- releaseType : ${{ steps.check_prs.outputs.RELEASE_TYPE }}
59-
60- # Vérifier la branche active après l'incrémentation de la version
61- - name : Vérifier la branche active après l'incrémentation de la version
62- run : echo "Branche active après l'incrémentation de la version: $(git branch --show-current)"
63-
64- # Step 4: Format version numbers for different purposes (SemVer, MSI version)
65- - name : Format Semver (and MSI version)
66- if : steps.check_prs.outputs.BUILD_NEEDED == 'true'
67- id : format_version
68- shell : powershell
69- run : |
70- # Get version from previous step
71- $NextSemver = "${{ steps.versioning.outputs.version }}"
72-
73- # Create MSI-compatible version (x.y.z.build)
74- $commit_count = (git rev-list --count HEAD)
75- $commit_count_mod = $commit_count % 65535 # MSI has a version limit
76- $MsiBase = $NextSemver.Split("-")[0] # Remove prerelease segment
77- $MsiVersion = "$MsiBase.$commit_count_mod"
78-
79- # Format the release name
80- $ReleaseName = "WAU $NextSemver [Nightly Build]"
81-
82- # Output all version information
83- echo "MSI version: $MsiVersion"
84- echo "Semver created: $NextSemver"
85- echo "Release name: $ReleaseName"
86- echo "MsiVersion=$MsiVersion" >> $env:GITHUB_OUTPUT
87- echo "NextSemVer=$NextSemver" >> $env:GITHUB_OUTPUT
88- echo "ReleaseName=$ReleaseName" >> $env:GITHUB_OUTPUT
89-
90- # Vérifier la branche active après le formatage de la version
91- - name : Vérifier la branche active après le formatage de la version
92- run : echo "Branche active après le formatage de la version: $(git branch --show-current)"
93-
94- # Step 5: Build the project and generate artifacts
95- - name : Build project
96- if : steps.check_prs.outputs.BUILD_NEEDED == 'true'
97- id : build_project
98- shell : powershell
99- run : |
100- # Download and install Microsoft Deployment Toolkit
101- echo "### Get MDT from Microsoft ###"
102- wget https://download.microsoft.com/download/3/3/9/339BE62D-B4B8-4956-B58D-73C4685FC492/MicrosoftDeploymentToolkit_x64.msi -UseBasicParsing -OutFile .\MicrosoftDeploymentToolkit_x64.msi
103- Start-Process .\MicrosoftDeploymentToolkit_x64.msi -ArgumentList "/quiet /norestart" -Wait
104-
105- # Extract ServiceUI for elevated notifications
106- echo "### Copy ServiceUI.exe x64 to 'Sources\Winget-AutoUpdate' folder ###"
107- Copy-Item -Path "C:\Program Files\Microsoft Deployment Toolkit\Templates\Distribution\Tools\x64\ServiceUI.exe" -Destination ".\Sources\Winget-AutoUpdate\ServiceUI.exe" -Force
108- Get-Item .\Sources\Winget-AutoUpdate\*
109-
110- # Install WiX tools for MSI creation
111- echo "### Install WiX ###"
112- dotnet new console
113- dotnet tool install --global wix --version 5.0.1
114- wix extension add WixToolset.UI.wixext/5.0.1 -g
115- wix extension add WixToolset.Util.wixext/5.0.1 -g
116-
117- # Build MSI package with version information
118- echo "### Create WAU MSI ###"
119- cd .\Sources\Wix\
120- wix build -src build.wxs -ext WixToolset.Util.wixext -ext WixToolset.UI.wixext -out ..\..\WAU.msi -arch x64 -d Version=${{ steps.format_version.outputs.MsiVersion }} -d NextSemVer=${{ steps.format_version.outputs.NextSemVer }}
121- cd ..\..
122- Get-Item .\WAU.msi
123-
124- # Calculate MSI file hash for verification
125- echo "### Get MSI file SHA ###"
126- $MsiSHA = (Get-FileHash .\WAU.msi).hash
127- echo " - WAU.msi SHA256: $MsiSHA"
128- echo "msi_sha=$MsiSHA" >> $env:GITHUB_OUTPUT
129-
130- # Package ADMX policy templates
131- echo "### Zip ADMX ###"
132- Compress-Archive -Path .\Sources\Policies\ADMX -DestinationPath .\WAU_ADMX.zip -Force
133- Get-Item .\*.zip
134-
135- # Calculate ADMX package hash for verification
136- echo "### Get ADMX zip SHA ###"
137- $ADMXSHA = (Get-FileHash .\WAU_ADMX.zip).hash
138- echo " - WAU_ADMX.zip SHA256: $ADMXSHA"
139- echo "admx_sha=$ADMXSHA" >> $env:GITHUB_OUTPUT
140-
141- # Create installation counter file for tracking installs
142- echo "### Create install counter file ###"
143- echo "Install counter file." > WAU_InstallCounter
144-
145- # Vérifier la branche active après la construction du projet
146- - name : Vérifier la branche active après la construction du projet
147- run : echo "Branche active après la construction du projet: $(git branch --show-current)"
1+ # This workflow creates nightly builds from the develop branch:
2+ # - Checks for merged PRs since the last tag
3+ # - Creates a pre-release version if changes are detected
4+ # - Builds and packages the software
5+ # - Creates GitHub release with artifacts and download counters
6+
7+ name : GitFlow | Nightly Builds
8+
9+ on :
10+ # Automated nightly builds at midnight
11+ schedule :
12+ - cron : " 0 0 * * *"
13+
14+ permissions :
15+ contents : write
16+
17+ jobs :
18+ build :
19+ name : Create Nightly Build
20+ runs-on : windows-latest
21+ steps :
22+ # Step 1: Checkout the develop branch for nightly builds
23+ - name : Checkout code
24+ uses : actions/checkout@v4
25+ with :
26+ lfs : " true"
27+ fetch-depth : 0
28+ # Always checkout develop for nightly builds
29+ ref : develop
30+
31+ # Step 2: Verify if a new build is required by checking for merged PRs since last tag
32+ - name : Check for merged PRs since last tag
33+ id : check_prs
34+ shell : powershell
35+ run : |
36+ # Find the latest tag of any type
37+ $LATEST_TAG = git tag --sort=-v:refname | Select-Object -First 1
38+ Write-Host "Latest tag: $LATEST_TAG"
39+
40+ # Get merged PRs since last tag using Git directly
41+ $MERGED_PRS = git log --merges --grep="Merge pull request" --oneline "$LATEST_TAG..develop"
42+
43+ # If merged PRs exist, set BUILD_NEEDED and determine release type
44+ if ($MERGED_PRS) {
45+ Write-Host "Found PRs merged to develop since latest tag:"
46+ Write-Host $MERGED_PRS
47+ echo "BUILD_NEEDED=true" >> $env:GITHUB_OUTPUT
48+
49+ # Determine release type
50+ if ($LATEST_TAG -like "*-*") {
51+ $RELEASE_TYPE = "prerelease"
52+ }
53+ else {
54+ $RELEASE_TYPE = "preminor"
55+ }
56+ echo "RELEASE_TYPE=$RELEASE_TYPE" >> $env:GITHUB_OUTPUT
57+ Write-Host "Next release: $RELEASE_TYPE"
58+ } else {
59+ # If no merged PRs, skip building
60+ Write-Host "No PRs merged to develop since latest tag. Skipping build."
61+ echo "BUILD_NEEDED=false" >> $env:GITHUB_OUTPUT
62+ }
63+
64+ # Step 3: Generate new semantic version number
65+ - name : Auto Increment Semver Action
66+ uses : MCKanpolat/auto-semver-action@5003b8d37f4b03d95f15303ea10242cbf7c13141 # 2
67+ if : steps.check_prs.outputs.BUILD_NEEDED == 'true'
68+ id : versioning
69+ with :
70+ github_token : ${{ secrets.GITHUB_TOKEN }}
71+ incrementPerCommit : false
72+ releaseType : ${{ steps.check_prs.outputs.RELEASE_TYPE }}
73+
74+ # Step 4: Format version numbers for different purposes (SemVer, MSI version)
75+ - name : Format Semver (and MSI version)
76+ if : steps.check_prs.outputs.BUILD_NEEDED == 'true'
77+ id : format_version
78+ shell : powershell
79+ run : |
80+ # Get version from previous step
81+ $NextSemver = "${{ steps.versioning.outputs.version }}"
82+
83+ # Create MSI-compatible version (x.y.z.build)
84+ $commit_count = (git rev-list --count HEAD)
85+ $commit_count_mod = $commit_count % 65535 # MSI has a version limit
86+ $MsiBase = $NextSemver.Split("-")[0] # Remove prerelease segment
87+ $MsiVersion = "$MsiBase.$commit_count_mod"
88+
89+ # Format the release name
90+ $ReleaseName = "WAU $NextSemver [Nightly Build]"
91+
92+ # Output all version information
93+ echo "MSI version: $MsiVersion"
94+ echo "Semver created: $NextSemver"
95+ echo "Release name: $ReleaseName"
96+ echo "MsiVersion=$MsiVersion" >> $env:GITHUB_OUTPUT
97+ echo "NextSemVer=$NextSemver" >> $env:GITHUB_OUTPUT
98+ echo "ReleaseName=$ReleaseName" >> $env:GITHUB_OUTPUT
99+
100+ # Step 5: Build the project and generate artifacts
101+ - name : Build project
102+ if : steps.check_prs.outputs.BUILD_NEEDED == 'true'
103+ id : build_project
104+ shell : powershell
105+ run : |
106+ # Download and install Microsoft Deployment Toolkit
107+ echo "### Get MDT from Microsoft ###"
108+ wget https://download.microsoft.com/download/3/3/9/339BE62D-B4B8-4956-B58D-73C4685FC492/MicrosoftDeploymentToolkit_x64.msi -UseBasicParsing -OutFile .\MicrosoftDeploymentToolkit_x64.msi
109+ Start-Process .\MicrosoftDeploymentToolkit_x64.msi -ArgumentList "/quiet /norestart" -Wait
110+
111+ # Extract ServiceUI for elevated notifications
112+ echo "### Copy ServiceUI.exe x64 to 'Sources\Winget-AutoUpdate' folder ###"
113+ Copy-Item -Path "C:\Program Files\Microsoft Deployment Toolkit\Templates\Distribution\Tools\x64\ServiceUI.exe" -Destination ".\Sources\Winget-AutoUpdate\ServiceUI.exe" -Force
114+ Get-Item .\Sources\Winget-AutoUpdate\*
115+
116+ # Install WiX tools for MSI creation
117+ echo "### Install WiX ###"
118+ dotnet new console
119+ dotnet tool install --global wix --version 5.0.1
120+ wix extension add WixToolset.UI.wixext/5.0.1 -g
121+ wix extension add WixToolset.Util.wixext/5.0.1 -g
122+
123+ # Build MSI package with version information
124+ echo "### Create WAU MSI ###"
125+ cd .\Sources\Wix\
126+ wix build -src build.wxs -ext WixToolset.Util.wixext -ext WixToolset.UI.wixext -out ..\..\WAU.msi -arch x64 -d Version=${{ steps.format_version.outputs.MsiVersion }} -d NextSemVer=${{ steps.format_version.outputs.NextSemVer }} -d Comment="${{ steps.format_version.outputs.ReleaseName }}" -d PreRelease=1
127+ cd ..\..
128+ Get-Item .\WAU.msi
129+
130+ # Calculate MSI file hash for verification
131+ echo "### Get MSI file SHA ###"
132+ $MsiSHA = (Get-FileHash .\WAU.msi).hash
133+ echo " - WAU.msi SHA256: $MsiSHA"
134+ echo "msi_sha=$MsiSHA" >> $env:GITHUB_OUTPUT
135+
136+ # Package ADMX policy templates
137+ echo "### Zip ADMX ###"
138+ Compress-Archive -Path .\Sources\Policies\ADMX -DestinationPath .\WAU_ADMX.zip -Force
139+ Get-Item .\*.zip
140+
141+ # Calculate ADMX package hash for verification
142+ echo "### Get ADMX zip SHA ###"
143+ $ADMXSHA = (Get-FileHash .\WAU_ADMX.zip).hash
144+ echo " - WAU_ADMX.zip SHA256: $ADMXSHA"
145+ echo "admx_sha=$ADMXSHA" >> $env:GITHUB_OUTPUT
146+
147+ # Create installation counter file for tracking installs
148+ echo "### Create install counter file ###"
149+ echo "Install counter file." > WAU_InstallCounter
150+
151+ # Step 6: Create GitHub release with all artifacts
152+ - name : Create release
153+ uses : ncipollo/release-action@440c8c1cb0ed28b9f43e4d1d670870f059653174 # v1.16.0
154+ if : steps.check_prs.outputs.BUILD_NEEDED == 'true'
155+ with :
156+ tag : v${{ steps.format_version.outputs.NextSemVer }}
157+ prerelease : true
158+ generateReleaseNotes : true
159+ name : ${{ steps.format_version.outputs.ReleaseName }}
160+ artifacts : " WAU.msi,WAU_ADMX.zip,WAU_InstallCounter"
161+ body : |
162+ This is an **automated nightly build** created from the latest changes in the develop branch.
163+
164+ ⚠️ **Warning**: This build may contain unstable features and is intended for testing purposes only.
165+
166+ ## Files
167+ |Files|Hash (SHA256)|Downloads|
168+ |---|---|---|
169+ |[WAU.msi](https://github.com/Romanitho/Winget-AutoUpdate/releases/download/v${{ steps.format_version.outputs.NextSemVer }}/WAU.msi) (x64)|`${{ steps.build_project.outputs.msi_sha }}`|<picture></picture>|
170+ |[WAU_ADMX.zip](https://github.com/Romanitho/Winget-AutoUpdate/releases/download/v${{ steps.format_version.outputs.NextSemVer }}/WAU_ADMX.zip)|`${{ steps.build_project.outputs.admx_sha }}`|<picture></picture>|
171+
172+ <picture></picture>
0 commit comments