Skip to content

Commit e03e489

Browse files
Add GitHub Actions build & release workflow
- .github/workflows/build-release.yml: builds Windows exe with PyInstaller on version tags (v*) or manual dispatch; marks pre-release automatically for tags containing -alpha/-beta/-rc - Update DataverseOptionSetHelper.spec: add hidden imports for new auth package (credentials, token_providers), login_wizard, and msal - .gitignore: exclude .claude/ local memory directory Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent b53782c commit e03e489

3 files changed

Lines changed: 106 additions & 0 deletions

File tree

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
name: Build & Release
2+
3+
# Triggers:
4+
# • Push a tag → v1.0.0 (stable release)
5+
# v1.0.0-alpha / -beta / -rc (pre-release)
6+
# • Manual run → choose tag + pre-release flag yourself
7+
on:
8+
push:
9+
tags:
10+
- "v*"
11+
workflow_dispatch:
12+
inputs:
13+
tag:
14+
description: "Version tag (e.g. v0.2.0-beta)"
15+
required: true
16+
prerelease:
17+
description: "Mark as pre-release"
18+
type: boolean
19+
default: true
20+
21+
jobs:
22+
build:
23+
runs-on: windows-latest
24+
25+
steps:
26+
# ── Checkout ────────────────────────────────────────────────
27+
- name: Checkout repository
28+
uses: actions/checkout@v4
29+
30+
# ── Resolve tag & pre-release flag ──────────────────────────
31+
- name: Resolve version info
32+
id: version
33+
shell: pwsh
34+
run: |
35+
if ("${{ github.event_name }}" -eq "workflow_dispatch") {
36+
$tag = "${{ inputs.tag }}"
37+
$pre = "${{ inputs.prerelease }}" -eq "true"
38+
} else {
39+
$tag = "${{ github.ref_name }}"
40+
$pre = $tag -match "-(alpha|beta|rc)"
41+
}
42+
echo "tag=$tag" >> $env:GITHUB_OUTPUT
43+
echo "prerelease=$pre" >> $env:GITHUB_OUTPUT
44+
echo "Version: $tag | Pre-release: $pre"
45+
46+
# ── Python ──────────────────────────────────────────────────
47+
- name: Set up Python 3.12
48+
uses: actions/setup-python@v5
49+
with:
50+
python-version: "3.12"
51+
cache: pip
52+
cache-dependency-path: optionset_qt_app/requirements.txt
53+
54+
# ── Dependencies ────────────────────────────────────────────
55+
- name: Install dependencies
56+
working-directory: optionset_qt_app
57+
run: |
58+
pip install --upgrade pip
59+
pip install -r requirements.txt
60+
pip install pyinstaller
61+
62+
# ── Build ────────────────────────────────────────────────────
63+
- name: Build executable with PyInstaller
64+
working-directory: optionset_qt_app
65+
run: pyinstaller DataverseOptionSetHelper.spec --clean --noconfirm
66+
67+
# ── Package ──────────────────────────────────────────────────
68+
- name: Create release archive
69+
shell: pwsh
70+
run: |
71+
$tag = "${{ steps.version.outputs.tag }}"
72+
$dest = "DataverseOptionSetHelper-$tag-windows-x64.zip"
73+
Compress-Archive `
74+
-Path "optionset_qt_app/dist/DataverseOptionSetHelper.exe" `
75+
-DestinationPath $dest
76+
echo "ASSET=$dest" >> $env:GITHUB_ENV
77+
78+
# ── Upload artifact (always, for inspection) ─────────────────
79+
- name: Upload build artifact
80+
uses: actions/upload-artifact@v4
81+
with:
82+
name: DataverseOptionSetHelper-exe
83+
path: optionset_qt_app/dist/DataverseOptionSetHelper.exe
84+
retention-days: 14
85+
86+
# ── GitHub Release ───────────────────────────────────────────
87+
- name: Create GitHub Release
88+
uses: softprops/action-gh-release@v2
89+
with:
90+
tag_name: ${{ steps.version.outputs.tag }}
91+
name: Dataverse OptionSet Helper ${{ steps.version.outputs.tag }}
92+
prerelease: ${{ steps.version.outputs.prerelease }}
93+
generate_release_notes: true
94+
files: ${{ env.ASSET }}
95+
env:
96+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# Claude Code local memory
2+
.claude/
3+
14
# Build results
25
bin/
36
obj/

optionset_qt_app/DataverseOptionSetHelper.spec

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,18 @@ a = Analysis(
2222
'optionset_qt',
2323
'optionset_qt.app',
2424
'optionset_qt.main_window',
25+
'optionset_qt.auth',
26+
'optionset_qt.auth.credentials',
27+
'optionset_qt.auth.token_providers',
2528
'optionset_qt.controllers.main_controller',
2629
'optionset_qt.models.optionset_model',
2730
'optionset_qt.ui.main_window_ui',
2831
'optionset_qt.views.bulk_progress_dialog',
32+
'optionset_qt.views.login_wizard',
2933
'optionset_qt.views.settings_dialog',
34+
'msal',
35+
'msal.application',
36+
'msal.oauth2cli',
3037
],
3138
hookspath=[],
3239
hooksconfig={},

0 commit comments

Comments
 (0)