-
Notifications
You must be signed in to change notification settings - Fork 0
135 lines (122 loc) · 4.91 KB
/
Copy pathrelease-package.yml
File metadata and controls
135 lines (122 loc) · 4.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
name: Release Package
on:
workflow_dispatch:
inputs:
version:
description: 'Release version without leading v, for example 1.0.1-public-beta'
required: true
default: '1.0.1-public-beta'
publish_release:
description: 'Create or update GitHub Release and upload assets'
required: true
type: boolean
default: false
prerelease:
description: 'Mark GitHub Release as prerelease'
required: true
type: boolean
default: true
draft:
description: 'Create GitHub Release as draft'
required: true
type: boolean
default: false
release_notes_file:
description: 'Markdown file used as release body'
required: true
default: 'docs/RELEASE_NOTES_v1.0.1.md'
push:
tags:
- 'v*'
permissions:
contents: write
jobs:
package:
name: Build Windows portable package
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
- name: Resolve release settings
id: settings
shell: pwsh
run: |
if ("${{ github.event_name }}" -eq "push") {
$version = "${{ github.ref_name }}" -replace '^v', ''
$publishRelease = "true"
$preRelease = "false"
$draft = "false"
$releaseNotesFile = "docs/RELEASE_NOTES_v1.0.1.md"
}
else {
$version = "${{ inputs.version }}"
$publishRelease = "${{ inputs.publish_release }}".ToLowerInvariant()
$preRelease = "${{ inputs.prerelease }}".ToLowerInvariant()
$draft = "${{ inputs.draft }}".ToLowerInvariant()
$releaseNotesFile = "${{ inputs.release_notes_file }}"
}
if ([string]::IsNullOrWhiteSpace($version)) {
throw "Version cannot be empty."
}
"version=$version" >> $env:GITHUB_OUTPUT
"tag=v$version" >> $env:GITHUB_OUTPUT
"publish_release=$publishRelease" >> $env:GITHUB_OUTPUT
"prerelease=$preRelease" >> $env:GITHUB_OUTPUT
"draft=$draft" >> $env:GITHUB_OUTPUT
"release_notes_file=$releaseNotesFile" >> $env:GITHUB_OUTPUT
- name: Build portable package
shell: pwsh
run: ./scripts/publish-windows-portable.ps1 -Version '${{ steps.settings.outputs.version }}' -SingleFile $true
- name: Verify portable package
shell: pwsh
run: ./scripts/verify-release-package.ps1 -PackagePath './artifacts/release/ARServer-v${{ steps.settings.outputs.version }}-win-x64-portable.zip' -RequireSingleFileApp
- name: Prepare release body
id: body
shell: pwsh
run: |
$releaseNotesFile = '${{ steps.settings.outputs.release_notes_file }}'
$fallback = Join-Path $env:RUNNER_TEMP 'ARServer_RELEASE_BODY.md'
if (Test-Path $releaseNotesFile) {
Copy-Item $releaseNotesFile $fallback -Force
}
else {
$lines = @(
'# ARServer v${{ steps.settings.outputs.version }}',
'',
'This release provides a Windows portable package for ARServer, an open-source IEC 61850 MMS to Modbus TCP and MQTT gateway for HMI, SCADA, relay testing, FAT/SAT, and substation automation lab workflows.',
'',
'## Download',
'',
'Download `ARServer-v${{ steps.settings.outputs.version }}-win-x64-portable.zip`, extract it to a writable Windows folder, then run `ArServer.exe`. The application binary is packaged as a single executable.',
'',
'## Package verification',
'',
'Use `SHA256SUMS.txt` to verify the downloaded ZIP.'
)
$lines | Set-Content -Path $fallback -Encoding UTF8
}
"path=$fallback" >> $env:GITHUB_OUTPUT
- name: Upload portable package artifact
uses: actions/upload-artifact@v4
with:
name: ARServer-v${{ steps.settings.outputs.version }}-win-x64-portable
path: |
artifacts/release/ARServer-v${{ steps.settings.outputs.version }}-win-x64-portable.zip
artifacts/release/SHA256SUMS.txt
if-no-files-found: error
- name: Create GitHub Release
if: steps.settings.outputs.publish_release == 'true'
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.settings.outputs.tag }}
name: ARServer v${{ steps.settings.outputs.version }}
body_path: ${{ steps.body.outputs.path }}
draft: ${{ steps.settings.outputs.draft }}
prerelease: ${{ steps.settings.outputs.prerelease }}
files: |
artifacts/release/ARServer-v${{ steps.settings.outputs.version }}-win-x64-portable.zip
artifacts/release/SHA256SUMS.txt