Skip to content

Nuitka Package and Upload(dev) #44

Nuitka Package and Upload(dev)

Nuitka Package and Upload(dev) #44

name: Nuitka Package and Upload(dev)
on:
workflow_dispatch:
inputs:
test:
description: '测试'
required: true
type: boolean
default: true
config_path:
description: '测试模式时用的配置文件路径(非测试时请忽略)'
required: true
type: string
default: 'package/nuitka_test_config.yml'
# push:
# branches:
# - dev
# paths:
# - 'package/nuitka_config.yml'
jobs:
package-and-upload:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest,ubuntu-24.04-arm,windows-latest] # windows-11-arm没有对应的 Python
env:
PYTHON_VERSION: '3.10'
NUITKA_CACHE_DIR: ${{ github.workspace }}/nuitka-cache
UPXVERSION: '5.0.1'
# 添加必要的权限
permissions:
contents: write # 允许创建发布和上传资源
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set Timezone to China Standard Time on Windows
if: ${{ runner.os == 'Windows' }}
run: tzutil /s "China Standard Time"
shell: pwsh
- name: Set Timezone to China Standard Time on Linux
if: ${{ runner.os == 'Linux' }}
run: sudo timedatectl set-timezone Asia/Shanghai
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Cache UPX
id: cache-upx
uses: actions/cache@v4
with:
path: upx
key: ${{ runner.os }}-${{ runner.arch }}-upx-v${{ env.UPXVERSION }}
restore-keys: |
${{ runner.os }}-${{ runner.arch }}-upx-
- name: Create UPX directory
if: ${{ steps.cache-upx.outputs.cache-hit != 'true' }}
run: mkdir -p ./upx
- name: Install UPX on Linux
if: ${{ runner.os == 'Linux' && steps.cache-upx.outputs.cache-hit != 'true' }}
run: |
UPX_URL="https://github.com/upx/upx/releases/download/v${{ env.UPXVERSION }}/upx-${{ env.UPXVERSION }}-${{ runner.arch == 'X64' && 'amd64' || 'arm64' }}_linux.tar.xz"
curl -L "$UPX_URL" -o upx.tar.xz
tar -xf upx.tar.xz -C ./upx --strip-components=1
chmod +x ./upx/upx
shell: bash
- name: Install UPX on Windows
if: ${{ runner.os == 'Windows' && steps.cache-upx.outputs.cache-hit != 'true' }}
run: |
$arch = if (("${{ runner.arch }}" -eq "amd64") -or ("${{ runner.arch }}" -eq "X64")) { "win64" } else { "win32" }
$upxVersion = "${{ env.UPXVERSION }}"
$upxUrl = "https://github.com/upx/upx/releases/download/v$upxVersion/upx-$upxVersion-$arch.zip"
Invoke-WebRequest -Uri $upxUrl -OutFile upx.zip
Expand-Archive -Path upx.zip -DestinationPath ./upx -Force
# Windows 版本的 UPX 解压后在子目录中,需要移动到根目录
Move-Item -Path "./upx/upx-$upxVersion-$arch/*" -Destination ./upx -Force
shell: pwsh
- name: Verify UPX installation
run: |
./upx/upx --version
shell: bash
- name: get pip cache dir on Windows
if: ${{ runner.os == 'Windows' }}
id: pip-cache-dir-window
run: echo "pip-cache-dir=$(pip cache dir)" >> $env:GITHUB_OUTPUT
- name: get pip cache dir on Linux
if: ${{ runner.os == 'Linux' }}
id: pip-cache-dir-linux
run: echo "pip-cache-dir=$(pip cache dir)" >> $GITHUB_OUTPUT
- name: pip cache
uses: actions/cache@v4
with:
path: ${{ runner.os == 'Windows' && steps.pip-cache-dir-window.outputs.pip-cache-dir || steps.pip-cache-dir-linux.outputs.pip-cache-dir }}
key: ${{ runner.os }}-${{ runner.arch }}-pip-${{ github.event.inputs.test && hashFiles(github.event.inputs.config_path) || hashFiles('package/nuitka_build.py') }}
restore-keys: |
${{ runner.os }}-${{ runner.arch }}-pip-
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install nuitka pyyaml ordered-set==4.1.0 wheel==0.38.4 zstandard==0.20.0
# - name: insatll mingw
# run: |
# mkdir C:\Users\%username%\AppData\Local\Nuitka\Nuitka\Cache\downloads\gcc\x86_64\14.2.0posix-19.1.1-12.0.0-msvcrt-r2
# curl -o C:\Users\%username%\AppData\Local\Nuitka\Nuitka\Cache\downloads\gcc\x86_64\14.2.0posix-19.1.1-12.0.0-msvcrt-r2\winlibs-x86_64-posix-seh-gcc-14.2.0-llvm-19.1.1-mingw-w64msvcrt-12.0.0-r2.zip https://github.com/brechtsanders/winlibs_mingw/releases/download/14.2.0posix-19.1.1-12.0.0-msvcrt-r2/winlibs-x86_64-posix-seh-gcc-14.2.0-llvm-19.1.1-mingw-w64msvcrt-12.0.0-r2.zip
# tar -xf C:\Users\%username%\AppData\Local\Nuitka\Nuitka\Cache\downloads\gcc\x86_64\14.2.0posix-19.1.1-12.0.0-msvcrt-r2\winlibs-x86_64-posix-seh-gcc-14.2.0-llvm-19.1.1-mingw-w64msvcrt-12.0.0-r2.zip -C C:\Users\%username%\AppData\Local\Nuitka\Nuitka\Cache\downloads\gcc\x86_64\14.2.0posix-19.1.1-12.0.0-msvcrt-r2\
# - name: Fix Python encoding (Windows)
# run: |
# # 设置Python使用UTF-8编码
# [System.Environment]::SetEnvironmentVariable('PYTHONUTF8', '1', 'Process')
# # 设置控制台编码为UTF-8
# chcp.com 65001
- name: Cache Nuitka cache directory
uses: actions/cache@v4
with:
path: ${{ env.NUITKA_CACHE_DIR }}
key: nuitka-${{ runner.os }}-${{ runner.arch }}-python-${{ env.PYTHON_VERSION }}-nuitka-${{ github.event.inputs.test && hashFiles(github.event.inputs.config_path) || hashFiles('package/nuitka_build.py') }}
restore-keys: |
nuitka-${{ runner.os }}-${{ runner.arch }}-python-${{ env.PYTHON_VERSION }}-
nuitka-${{ runner.os }}-${{ runner.arch }}-
- name: Run packaging script on Windows
if: ${{ !github.event.inputs.test && runner.os == 'Windows' }}
run: |
# 设置Python使用UTF-8编码
[System.Environment]::SetEnvironmentVariable('PYTHONUTF8', '1', 'Process')
# 设置控制台编码为UTF-8
chcp.com 65001
cd package
python nuitka_build.py nuitka_config.yml
- name: Run Test packaging script on Windows
if: ${{ github.event.inputs.test && runner.os == 'Windows' }}
run: |
# 设置Python使用UTF-8编码
[System.Environment]::SetEnvironmentVariable('PYTHONUTF8', '1', 'Process')
# 设置控制台编码为UTF-8
chcp.com 65001
cd package
python nuitka_build.py ${{ github.event.inputs.config_path }}
- name: Run packaging script on Windows
if: ${{ !github.event.inputs.test && runner.os == 'Linux' }}
run: |
cd package
python nuitka_build.py nuitka_config.yml
- name: Run Test packaging script on Windows
if: ${{ github.event.inputs.test && runner.os == 'Linux' }}
run: |
cd package
python nuitka_build.py ${{ github.event.inputs.config_path }}
- name: Upload files with wildcards
uses: actions/upload-artifact@v4
with:
name: ${{ runner.os }}-${{ runner.arch }}-${{ github.event.inputs.test && 'test-' || '' }}artifact
path: |
./dist/*.exe
retention-days: 14
if-no-files-found: warn
overwrite: true