-
Notifications
You must be signed in to change notification settings - Fork 123
155 lines (133 loc) · 5.62 KB
/
Copy pathbuild-windows.yml
File metadata and controls
155 lines (133 loc) · 5.62 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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
name: Build Windows
on:
push:
branches:
- master
pull_request:
branches:
- master
release:
types: [published]
env:
RUNNER_IMAGE: windows-latest
PYTHON_VERSION: '3.9'
jobs:
build-windows:
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ${{ env.PYTHON_VERSION }}
architecture: x64
- name: Show environment info
run: |
echo "RUNNER_IMAGE=${{ env.RUNNER_IMAGE }}"
echo "PATH=$env:PATH"
python --version
python -c "import platform; print(platform.architecture())"
- name: Set RedNotebook VERSION variable
run: |
$VERSION = python -c "from rednotebook import info; print(info.version)"
echo "VERSION=$VERSION" >> $env:GITHUB_ENV
echo "Version: $VERSION"
- name: Set up GTK stack
run: |
curl -Lo gtk-bundle.zip https://www.dropbox.com/s/lo0p8c96cljcc1c/gtk-bundle.zip?dl=1
7z x gtk-bundle.zip -oC:\gtk
Get-ChildItem C:\gtk
$env:PATH = "$env:PATH;C:\gtk\bin"
echo "PATH=$env:PATH" >> $env:GITHUB_ENV
- name: Install Python dependencies
run: |
python -m pip install --no-warn-script-location -U pip setuptools tox==3.27.1 wheel
# Install PyGObject and pycairo from the GTK bundle wheels.
python -m pip install --no-warn-script-location C:\gtk\pycairo-1.21.0-cp39-cp39-win_amd64.whl
python -m pip install --no-warn-script-location C:\gtk\PyGObject-3.42.0-cp39-cp39-win_amd64.whl
# Install separately because --no-binary option disables using wheels (leading to problems for Cython).
python -m pip install --no-warn-script-location -U --no-binary :all: pyenchant==3.2.2
python -m pip install --no-warn-script-location -r win/requirements.txt
python -m pip freeze
python -m pip list --outdated
- name: Install gettext (msgfmt)
run: |
$downloadRoot = $env:RUNNER_TEMP
$zip = Join-Path $downloadRoot "gettext.zip"
Write-Host "Downloading gettext bundle to $zip"
curl -L -o $zip https://github.com/mlocati/gettext-iconv-windows/releases/download/v0.26-v1.17/gettext0.26-iconv1.17-shared-64.zip
$dest = Join-Path $downloadRoot "gettext"
if (Test-Path $dest) { Remove-Item -Recurse -Force $dest }
7z x $zip ("-o" + $dest) | Out-Null
# msgfmt.exe resides in the extracted bin directory
$binDir = Join-Path $dest "bin"
$binDir | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
Write-Host "Added gettext bin directory to PATH: $binDir"
- name: Patch GtkSourceView hook
run: |
$pythonPath = "C:\hostedtoolcache\windows\Python\${{ env.PYTHON_VERSION }}.*\x64"
$hookFile = Get-ChildItem "$pythonPath\Lib\site-packages\pyinstaller\hooks\hook-gi.repository.GtkSource.py"
$hookPath = $hookFile.FullName
(Get-Content $hookPath) -replace '3\.0', '4' | Set-Content $hookPath
echo "Patched GtkSourceView hook at: $hookPath"
- name: Set Pyenchant debug logging
run: |
echo "PYENCHANT_VERBOSE_FIND=foobar" >> $env:GITHUB_ENV
- name: Install dictionaries
run: |
curl -Lo dicts.tar.gz https://www.dropbox.com/s/f12k20aur6znpmo/myspell-dicts.tar.gz?dl=1
tar -xzf dicts.tar.gz
# Create enchant directory structure and copy dictionaries.
New-Item -ItemType Directory -Force -Path C:\gtk\share\enchant\myspell
Copy-Item -Recurse enchant\* C:\gtk\share\enchant\myspell\
- name: Run tests
run: |
python -m tox -v -e py
- name: Test sample app
run: |
cd win
python sampleapp.py
# Quote --add-data arguments so PowerShell does not split on semicolons.
python -m PyInstaller --additional-hooks-dir=. --add-data "C:/gtk/bin/libenchant.dll;." --add-data "C:/gtk/lib/enchant/libenchant_myspell.dll;lib/enchant/" --add-data "C:/gtk/share/enchant/myspell/myspell;share/enchant/myspell" sampleapp.py
# Set environment variables for enchant library in PyInstaller bundle
$env:PATH = "C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;$pwd\dist\sampleapp;$pwd\dist\sampleapp\_internal"
$env:ENCHANT_DATA_DIR = "$pwd\dist\sampleapp\_internal\share\enchant"
$env:ENCHANT_MODULE_PATH = "$pwd\dist\sampleapp\_internal\lib\enchant"
.\dist\sampleapp\sampleapp.exe
cd ..
- name: Create executable
run: |
cd win
python -m PyInstaller --workpath=C:/build --distpath=C:/ rednotebook.spec
python ../dev/build_translations.py C:/dist/share/locale
7z a rednotebook.zip C:\dist
cd ..
- name: Install Inno Setup
run: |
choco install innosetup --version=6.2.2 -y --allow-downgrade
- name: Build installer
run: |
cd win
& "C:\Program Files (x86)\Inno Setup 6\iscc.exe" /Qp /dREDNOTEBOOK_VERSION="$env:VERSION" rednotebook.iss
cd ..
- name: Prepare artifacts
run: |
Move-Item win\rednotebook.zip rednotebook-$env:VERSION.zip
Move-Item C:\rednotebook.exe rednotebook-$env:VERSION.exe
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: windows-artifacts
path: |
rednotebook-*.zip
rednotebook-*.exe
- name: Deploy to GitHub Releases
if: github.event_name == 'release'
uses: softprops/action-gh-release@v2
with:
files: |
rednotebook-*.exe
rednotebook-*.zip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}