Skip to content

Commit 560b3d8

Browse files
committed
Add Nuitka build and draft release workflows
1 parent 19611c0 commit 560b3d8

5 files changed

Lines changed: 400 additions & 0 deletions

File tree

.github/workflows/nuitka-linux.yml

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# GitHub Action for building dirsearch with Nuitka (Linux)
2+
3+
name: Nuitka Linux
4+
5+
on:
6+
workflow_dispatch:
7+
workflow_call:
8+
9+
env:
10+
PYTHON_VERSION: '3.11'
11+
NUITKA_VERSION: '2.4.8'
12+
13+
jobs:
14+
build-linux:
15+
name: Build Linux AMD64 (${{ matrix.variant.name }})
16+
runs-on: ubuntu-latest
17+
timeout-minutes: 45
18+
strategy:
19+
fail-fast: false
20+
matrix:
21+
variant:
22+
- name: threaded
23+
async: "False"
24+
- name: async
25+
async: "True"
26+
steps:
27+
- name: Checkout repository
28+
uses: actions/checkout@v4
29+
30+
- name: Set up Python
31+
uses: actions/setup-python@v5
32+
with:
33+
python-version: ${{ env.PYTHON_VERSION }}
34+
cache: 'pip'
35+
36+
- name: Install system dependencies
37+
run: |
38+
sudo apt-get update
39+
sudo apt-get install -y patchelf
40+
41+
- name: Install dependencies
42+
run: |
43+
python -m pip install --upgrade pip setuptools wheel
44+
pip install -r requirements.txt
45+
pip install nuitka==${{ env.NUITKA_VERSION }} ordered-set zstandard
46+
47+
- name: Set default async mode
48+
run: |
49+
sed -i "s/^async = .*/async = ${{ matrix.variant.async }}/" config.ini
50+
51+
- name: Build Linux binary
52+
run: |
53+
python -m nuitka \
54+
--onefile \
55+
--assume-yes-for-downloads \
56+
--include-package=lib \
57+
--include-data-dir=db=db \
58+
--include-data-dir=lib/report=lib/report \
59+
--include-data-file=config.ini=config.ini \
60+
--output-filename=dirsearch \
61+
dirsearch.py
62+
63+
- name: Rename binary
64+
run: |
65+
mkdir -p dist
66+
mv dirsearch.bin dist/dirsearch-linux-amd64-${{ matrix.variant.name }}
67+
68+
- name: Test Linux binary
69+
run: |
70+
./dist/dirsearch-linux-amd64-${{ matrix.variant.name }} --version
71+
./dist/dirsearch-linux-amd64-${{ matrix.variant.name }} --help
72+
73+
- name: Upload Linux artifact
74+
uses: actions/upload-artifact@v4
75+
with:
76+
name: dirsearch-nuitka-linux-amd64-${{ matrix.variant.name }}
77+
path: dist/dirsearch-linux-amd64-${{ matrix.variant.name }}
78+
retention-days: 30
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# GitHub Action for building dirsearch with Nuitka (macOS Intel)
2+
3+
name: Nuitka macOS Intel
4+
5+
on:
6+
workflow_dispatch:
7+
workflow_call:
8+
9+
env:
10+
PYTHON_VERSION: '3.11'
11+
NUITKA_VERSION: '2.4.8'
12+
13+
jobs:
14+
build-macos-intel:
15+
name: Build macOS Intel (${{ matrix.variant.name }})
16+
runs-on: macos-13
17+
timeout-minutes: 45
18+
strategy:
19+
fail-fast: false
20+
matrix:
21+
variant:
22+
- name: threaded
23+
async: "False"
24+
- name: async
25+
async: "True"
26+
steps:
27+
- name: Checkout repository
28+
uses: actions/checkout@v4
29+
30+
- name: Set up Python
31+
uses: actions/setup-python@v5
32+
with:
33+
python-version: ${{ env.PYTHON_VERSION }}
34+
cache: 'pip'
35+
36+
- name: Install dependencies
37+
run: |
38+
python -m pip install --upgrade pip setuptools wheel
39+
pip install -r requirements.txt
40+
pip install nuitka==${{ env.NUITKA_VERSION }} ordered-set zstandard
41+
42+
- name: Set default async mode
43+
run: |
44+
sed -i '' "s/^async = .*/async = ${{ matrix.variant.async }}/" config.ini
45+
46+
- name: Build macOS Intel binary
47+
run: |
48+
python -m nuitka \
49+
--onefile \
50+
--assume-yes-for-downloads \
51+
--include-package=lib \
52+
--include-data-dir=db=db \
53+
--include-data-dir=lib/report=lib/report \
54+
--include-data-file=config.ini=config.ini \
55+
--output-filename=dirsearch \
56+
dirsearch.py
57+
58+
- name: Rename binary
59+
run: |
60+
mkdir -p dist
61+
mv dirsearch.bin dist/dirsearch-macos-intel-${{ matrix.variant.name }}
62+
63+
- name: Test macOS Intel binary
64+
run: |
65+
./dist/dirsearch-macos-intel-${{ matrix.variant.name }} --version
66+
./dist/dirsearch-macos-intel-${{ matrix.variant.name }} --help
67+
68+
- name: Upload macOS Intel artifact
69+
uses: actions/upload-artifact@v4
70+
with:
71+
name: dirsearch-nuitka-macos-intel-${{ matrix.variant.name }}
72+
path: dist/dirsearch-macos-intel-${{ matrix.variant.name }}
73+
retention-days: 30
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# GitHub Action for building dirsearch with Nuitka (macOS Silicon)
2+
3+
name: Nuitka macOS Silicon
4+
5+
on:
6+
workflow_dispatch:
7+
workflow_call:
8+
9+
env:
10+
PYTHON_VERSION: '3.11'
11+
NUITKA_VERSION: '2.4.8'
12+
13+
jobs:
14+
build-macos-silicon:
15+
name: Build macOS Silicon (${{ matrix.variant.name }})
16+
runs-on: macos-latest
17+
timeout-minutes: 45
18+
strategy:
19+
fail-fast: false
20+
matrix:
21+
variant:
22+
- name: threaded
23+
async: "False"
24+
- name: async
25+
async: "True"
26+
steps:
27+
- name: Checkout repository
28+
uses: actions/checkout@v4
29+
30+
- name: Set up Python
31+
uses: actions/setup-python@v5
32+
with:
33+
python-version: ${{ env.PYTHON_VERSION }}
34+
cache: 'pip'
35+
36+
- name: Install dependencies
37+
run: |
38+
python -m pip install --upgrade pip setuptools wheel
39+
pip install -r requirements.txt
40+
pip install nuitka==${{ env.NUITKA_VERSION }} ordered-set zstandard
41+
42+
- name: Set default async mode
43+
run: |
44+
sed -i '' "s/^async = .*/async = ${{ matrix.variant.async }}/" config.ini
45+
46+
- name: Build macOS Silicon binary
47+
run: |
48+
python -m nuitka \
49+
--onefile \
50+
--assume-yes-for-downloads \
51+
--include-package=lib \
52+
--include-data-dir=db=db \
53+
--include-data-dir=lib/report=lib/report \
54+
--include-data-file=config.ini=config.ini \
55+
--output-filename=dirsearch \
56+
dirsearch.py
57+
58+
- name: Rename binary
59+
run: |
60+
mkdir -p dist
61+
mv dirsearch.bin dist/dirsearch-macos-silicon-${{ matrix.variant.name }}
62+
63+
- name: Test macOS Silicon binary
64+
run: |
65+
./dist/dirsearch-macos-silicon-${{ matrix.variant.name }} --version
66+
./dist/dirsearch-macos-silicon-${{ matrix.variant.name }} --help
67+
68+
- name: Upload macOS Silicon artifact
69+
uses: actions/upload-artifact@v4
70+
with:
71+
name: dirsearch-nuitka-macos-silicon-${{ matrix.variant.name }}
72+
path: dist/dirsearch-macos-silicon-${{ matrix.variant.name }}
73+
retention-days: 30
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
# GitHub Action for drafting a release from Nuitka builds
2+
3+
name: Nuitka Draft Release
4+
5+
on:
6+
workflow_dispatch:
7+
inputs:
8+
tag:
9+
description: 'Tag for the draft release (e.g., v0.4.3-nuitka)'
10+
required: true
11+
target_commitish:
12+
description: 'Branch or commit for the tag (default: master)'
13+
required: false
14+
default: 'master'
15+
prerelease:
16+
description: 'Mark as prerelease'
17+
required: false
18+
type: boolean
19+
default: false
20+
21+
concurrency:
22+
group: ${{ github.workflow }}-${{ github.ref }}
23+
cancel-in-progress: true
24+
25+
jobs:
26+
build-linux:
27+
uses: ./.github/workflows/nuitka-linux.yml
28+
29+
build-windows:
30+
uses: ./.github/workflows/nuitka-windows.yml
31+
32+
build-macos-intel:
33+
uses: ./.github/workflows/nuitka-macos-intel.yml
34+
35+
build-macos-silicon:
36+
uses: ./.github/workflows/nuitka-macos-silicon.yml
37+
38+
prepare-artifacts:
39+
name: Prepare Artifacts
40+
needs: [build-linux, build-windows, build-macos-intel, build-macos-silicon]
41+
runs-on: ubuntu-latest
42+
timeout-minutes: 10
43+
steps:
44+
- name: Download all artifacts
45+
uses: actions/download-artifact@v4
46+
with:
47+
path: artifacts
48+
49+
- name: Prepare release assets
50+
run: |
51+
mkdir -p release
52+
cp artifacts/dirsearch-nuitka-linux-amd64-threaded/dirsearch-linux-amd64-threaded release/dirsearch-nuitka-linux-amd64-threaded
53+
cp artifacts/dirsearch-nuitka-linux-amd64-async/dirsearch-linux-amd64-async release/dirsearch-nuitka-linux-amd64-async
54+
cp artifacts/dirsearch-nuitka-windows-x64-threaded/dirsearch-windows-x64-threaded.exe release/dirsearch-nuitka-windows-x64-threaded.exe
55+
cp artifacts/dirsearch-nuitka-windows-x64-async/dirsearch-windows-x64-async.exe release/dirsearch-nuitka-windows-x64-async.exe
56+
cp artifacts/dirsearch-nuitka-macos-intel-threaded/dirsearch-macos-intel-threaded release/dirsearch-nuitka-macos-intel-threaded
57+
cp artifacts/dirsearch-nuitka-macos-intel-async/dirsearch-macos-intel-async release/dirsearch-nuitka-macos-intel-async
58+
cp artifacts/dirsearch-nuitka-macos-silicon-threaded/dirsearch-macos-silicon-threaded release/dirsearch-nuitka-macos-silicon-threaded
59+
cp artifacts/dirsearch-nuitka-macos-silicon-async/dirsearch-macos-silicon-async release/dirsearch-nuitka-macos-silicon-async
60+
61+
cd release
62+
sha256sum * > SHA256SUMS.txt
63+
cat SHA256SUMS.txt
64+
65+
- name: Upload combined artifacts
66+
uses: actions/upload-artifact@v4
67+
with:
68+
name: dirsearch-nuitka-all-platforms
69+
path: release/
70+
retention-days: 30
71+
72+
release:
73+
name: Draft Release
74+
needs: [prepare-artifacts]
75+
runs-on: ubuntu-latest
76+
timeout-minutes: 10
77+
permissions:
78+
contents: write
79+
steps:
80+
- name: Download combined artifacts
81+
uses: actions/download-artifact@v4
82+
with:
83+
name: dirsearch-nuitka-all-platforms
84+
path: release
85+
86+
- name: Create GitHub Draft Release
87+
uses: softprops/action-gh-release@v2
88+
with:
89+
files: |
90+
release/dirsearch-nuitka-linux-amd64-threaded
91+
release/dirsearch-nuitka-linux-amd64-async
92+
release/dirsearch-nuitka-windows-x64-threaded.exe
93+
release/dirsearch-nuitka-windows-x64-async.exe
94+
release/dirsearch-nuitka-macos-intel-threaded
95+
release/dirsearch-nuitka-macos-intel-async
96+
release/dirsearch-nuitka-macos-silicon-threaded
97+
release/dirsearch-nuitka-macos-silicon-async
98+
release/SHA256SUMS.txt
99+
generate_release_notes: true
100+
draft: true
101+
prerelease: ${{ inputs.prerelease }}
102+
tag_name: ${{ inputs.tag }}
103+
target_commitish: ${{ inputs.target_commitish }}

0 commit comments

Comments
 (0)