-
-
Notifications
You must be signed in to change notification settings - Fork 0
120 lines (120 loc) · 4.08 KB
/
python-pyinstaller.yml
File metadata and controls
120 lines (120 loc) · 4.08 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
---
name: Build using PyInstaller
on:
workflow_call:
inputs:
app-script-path:
required: true
type: string
description: Path to a Python script
python-version:
required: false
type: string
description: Python version to use (not applicable if uv.lock is present)
default: 3.x
uv-version:
required: false
type: string
description: Version of uv to use (applicable only if uv.lock is present)
default: latest
requirements-txt:
required: false
type: string
description: Path to the requirements.txt file (not applicable if uv.lock is present)
default: null
artifact-name:
required: false
type: string
description: Name of the artifact
default: dist
artifact-path:
required: false
type: string
description: Path to the artifact
default: dist
artifact-retention-days:
required: false
type: number
description: Number of days to retain artifacts
default: 1
artifact-overwrite:
required: false
type: boolean
description: Overwrite existing artifacts
default: true
runs-on:
required: false
type: string
description: Type of machine to run the job on
default: windows-latest
permissions:
contents: read
defaults:
run:
shell: bash -euo pipefail {0}
working-directory: .
jobs:
bundle:
runs-on: ${{ inputs.runs-on }}
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 1
persist-credentials: false
- name: Detect uv.lock or poetry.lock
run: |
if [[ -f uv.lock ]]; then
echo "LOCK_FILE=uv.lock" >> "${GITHUB_ENV}"
elif [[ -f poetry.lock ]]; then
echo "LOCK_FILE=poetry.lock" >> "${GITHUB_ENV}"
else
echo "LOCK_FILE=" >> "${GITHUB_ENV}"
fi
- name: Set up uv
if: env.LOCK_FILE == 'uv.lock'
uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8.0.0
with:
version: ${{ inputs.uv-version }}
- name: Install packages using uv
if: env.LOCK_FILE == 'uv.lock'
run: |
uv sync --all-groups
uv add --dev PyInstaller
tee -a "${GITHUB_ENV}" <<< "EXECUTOR=uv run"
- name: Set up Python
if: env.LOCK_FILE != 'uv.lock'
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: ${{ inputs.python-version }}
- name: Install packages
if: env.LOCK_FILE != 'uv.lock'
env:
REQUIREMENTS_TXT_PATH: ${{ inputs.requirements-txt }}
run: |
if [[ "${LOCK_FILE}" == "poetry.lock" ]]; then
python -m pip install --no-cache-dir poetry
poetry lock --no-interaction
poetry add --group=dev --no-interaction PyInstaller
poetry install --no-interaction
tee -a "${GITHUB_ENV}" <<< "EXECUTOR=poetry run"
else
python -m pip install -U --no-cache-dir pip
if [[ -n "${REQUIREMENTS_TXT_PATH}" ]]; then
python -m pip install -U --no-cache-dir -r "${REQUIREMENTS_TXT_PATH}"
fi
python -m pip install --no-cache-dir PyInstaller
tee -a "${GITHUB_ENV}" <<< "EXECUTOR=python -m"
fi
- name: Build an executable file
env:
APP_SCRIPT_PATH: ${{ inputs.app-script-path }}
run: > # zizmor: ignore[template-injection]
${{ env.EXECUTOR }} PyInstaller --clean --noconsole --onefile "${APP_SCRIPT_PATH}"
- name: Upload the artifact
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: ${{ inputs.artifact-name }}
path: ${{ inputs.artifact-path }}
retention-days: ${{ inputs.artifact-retention-days }}
overwrite: ${{ inputs.artifact-overwrite }}