nixorb 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- nixorb-0.1.0/.github/workflows/ci.yml +61 -0
- nixorb-0.1.0/.github/workflows/release.yml +367 -0
- nixorb-0.1.0/LICENSE +21 -0
- nixorb-0.1.0/PKG-INFO +278 -0
- nixorb-0.1.0/README.md +231 -0
- nixorb-0.1.0/assets/generate_icon.py +28 -0
- nixorb-0.1.0/assets/nixorb_256.png +0 -0
- nixorb-0.1.0/assets/orb.qml +109 -0
- nixorb-0.1.0/assets/shaders/orb_glow.frag +108 -0
- nixorb-0.1.0/assets/shaders/orb_glow.vert +20 -0
- nixorb-0.1.0/assets/tray_icon.png +0 -0
- nixorb-0.1.0/config/default.toml +66 -0
- nixorb-0.1.0/install.fish +192 -0
- nixorb-0.1.0/install.sh +92 -0
- nixorb-0.1.0/nixorb/__init__.py +6 -0
- nixorb-0.1.0/nixorb/action/__init__.py +0 -0
- nixorb-0.1.0/nixorb/action/clipboard.py +51 -0
- nixorb-0.1.0/nixorb/action/executor.py +209 -0
- nixorb-0.1.0/nixorb/asr/__init__.py +0 -0
- nixorb-0.1.0/nixorb/asr/wake_word.py +93 -0
- nixorb-0.1.0/nixorb/asr/whisper_engine.py +191 -0
- nixorb-0.1.0/nixorb/cli.py +416 -0
- nixorb-0.1.0/nixorb/core/__init__.py +0 -0
- nixorb-0.1.0/nixorb/core/aur_checker.py +44 -0
- nixorb-0.1.0/nixorb/core/event_bus.py +178 -0
- nixorb-0.1.0/nixorb/core/vram_manager.py +185 -0
- nixorb-0.1.0/nixorb/llm/__init__.py +0 -0
- nixorb-0.1.0/nixorb/llm/backends.py +338 -0
- nixorb-0.1.0/nixorb/main.py +299 -0
- nixorb-0.1.0/nixorb/memory/__init__.py +0 -0
- nixorb-0.1.0/nixorb/memory/vector_store.py +59 -0
- nixorb-0.1.0/nixorb/plugins/__init__.py +0 -0
- nixorb-0.1.0/nixorb/plugins/builtin/__init__.py +0 -0
- nixorb-0.1.0/nixorb/plugins/builtin/kdeconnect_plugin.py +95 -0
- nixorb-0.1.0/nixorb/plugins/builtin/systemd_plugin.py +45 -0
- nixorb-0.1.0/nixorb/plugins/loader.py +63 -0
- nixorb-0.1.0/nixorb/settings.py +95 -0
- nixorb-0.1.0/nixorb/tts/__init__.py +0 -0
- nixorb-0.1.0/nixorb/tts/hf_tts.py +69 -0
- nixorb-0.1.0/nixorb/tts/openai_tts.py +56 -0
- nixorb-0.1.0/nixorb/tts/piper_tts.py +84 -0
- nixorb-0.1.0/nixorb/tts/tts_factory.py +22 -0
- nixorb-0.1.0/nixorb/ui/__init__.py +0 -0
- nixorb-0.1.0/nixorb/ui/hotkey.py +54 -0
- nixorb-0.1.0/nixorb/ui/orb_window.py +183 -0
- nixorb-0.1.0/nixorb/ui/settings_window.py +350 -0
- nixorb-0.1.0/nixorb/ui/tray_icon.py +65 -0
- nixorb-0.1.0/nixorb/utils/__init__.py +0 -0
- nixorb-0.1.0/nixorb/utils/audio.py +18 -0
- nixorb-0.1.0/nixorb/utils/crypto.py +82 -0
- nixorb-0.1.0/nixorb/utils/hypernix_client.py +54 -0
- nixorb-0.1.0/nixorb/utils/web_search.py +80 -0
- nixorb-0.1.0/nixorb/vision/__init__.py +0 -0
- nixorb-0.1.0/nixorb/vision/screen_capture.py +101 -0
- nixorb-0.1.0/packaging/PKGBUILD +117 -0
- nixorb-0.1.0/packaging/appimage/AppImageBuilder.yml +69 -0
- nixorb-0.1.0/packaging/appimage/build_appimage.sh +79 -0
- nixorb-0.1.0/packaging/io.nixorb.NixOrb.yml +73 -0
- nixorb-0.1.0/packaging/nixorb.desktop +12 -0
- nixorb-0.1.0/plugins/example_plugin.py +102 -0
- nixorb-0.1.0/plugins/kdeconnect_plugin.py +61 -0
- nixorb-0.1.0/plugins/systemd_status.py +102 -0
- nixorb-0.1.0/pyproject.toml +87 -0
- nixorb-0.1.0/tests/__init__.py +0 -0
- nixorb-0.1.0/tests/conftest.py +23 -0
- nixorb-0.1.0/tests/test_crypto.py +37 -0
- nixorb-0.1.0/tests/test_event_bus.py +67 -0
- nixorb-0.1.0/tests/test_executor.py +64 -0
- nixorb-0.1.0/tests/test_plugins.py +80 -0
- nixorb-0.1.0/tests/test_settings.py +43 -0
- nixorb-0.1.0/tests/test_vram_manager.py +92 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, dev]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
name: Test (Python ${{ matrix.python-version }})
|
|
12
|
+
runs-on: ubuntu-22.04
|
|
13
|
+
strategy:
|
|
14
|
+
fail-fast: false
|
|
15
|
+
matrix:
|
|
16
|
+
python-version: ["3.12"]
|
|
17
|
+
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v4
|
|
20
|
+
|
|
21
|
+
- name: Set up Python
|
|
22
|
+
uses: actions/setup-python@v5
|
|
23
|
+
with:
|
|
24
|
+
python-version: ${{ matrix.python-version }}
|
|
25
|
+
cache: pip
|
|
26
|
+
|
|
27
|
+
- name: Install system dependencies
|
|
28
|
+
run: |
|
|
29
|
+
sudo apt-get update -qq
|
|
30
|
+
sudo apt-get install -y --no-install-recommends \
|
|
31
|
+
libportaudio2 portaudio19-dev ffmpeg \
|
|
32
|
+
libglib2.0-0 libdbus-1-3 \
|
|
33
|
+
qt6-base-dev qt6-declarative-dev \
|
|
34
|
+
python3-dev
|
|
35
|
+
|
|
36
|
+
- name: Install Python dependencies (CPU-only torch for CI)
|
|
37
|
+
run: |
|
|
38
|
+
pip install --upgrade pip
|
|
39
|
+
pip install torch==2.7.1+cpu torchaudio==2.7.1+cpu \
|
|
40
|
+
--index-url https://download.pytorch.org/whl/cpu
|
|
41
|
+
pip install -e ".[dev]"
|
|
42
|
+
# Mock packages that require GPU or native libs in CI
|
|
43
|
+
pip install sounddevice soundfile numpy
|
|
44
|
+
|
|
45
|
+
- name: Lint with ruff
|
|
46
|
+
run: ruff check nixorb/ tests/
|
|
47
|
+
|
|
48
|
+
- name: Type-check with mypy
|
|
49
|
+
run: mypy nixorb/ --ignore-missing-imports
|
|
50
|
+
|
|
51
|
+
- name: Run tests
|
|
52
|
+
run: |
|
|
53
|
+
pytest tests/ \
|
|
54
|
+
--ignore=tests/test_vram_manager.py \
|
|
55
|
+
-v --tb=short
|
|
56
|
+
|
|
57
|
+
- name: Upload coverage
|
|
58
|
+
uses: codecov/codecov-action@v4
|
|
59
|
+
if: always()
|
|
60
|
+
with:
|
|
61
|
+
fail_ci_if_error: false
|
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
# ── Trigger 1: push a version tag (git tag v0.1.0 && git push --tags)
|
|
5
|
+
push:
|
|
6
|
+
tags:
|
|
7
|
+
- 'v*.*.*'
|
|
8
|
+
|
|
9
|
+
# ── Trigger 2: click "Run workflow" on GitHub Actions tab
|
|
10
|
+
workflow_dispatch:
|
|
11
|
+
inputs:
|
|
12
|
+
version:
|
|
13
|
+
description: 'Version to release (e.g. 0.1.0)'
|
|
14
|
+
required: true
|
|
15
|
+
default: '0.1.0'
|
|
16
|
+
prerelease:
|
|
17
|
+
description: 'Mark as pre-release?'
|
|
18
|
+
required: false
|
|
19
|
+
default: 'false'
|
|
20
|
+
type: choice
|
|
21
|
+
options: ['false', 'true']
|
|
22
|
+
create_release:
|
|
23
|
+
description: 'Create GitHub Release?'
|
|
24
|
+
required: false
|
|
25
|
+
default: 'true'
|
|
26
|
+
type: choice
|
|
27
|
+
options: ['true', 'false']
|
|
28
|
+
|
|
29
|
+
permissions:
|
|
30
|
+
contents: write
|
|
31
|
+
id-token: write # for PyPI OIDC
|
|
32
|
+
|
|
33
|
+
env:
|
|
34
|
+
PYTHON_VERSION: "3.12"
|
|
35
|
+
|
|
36
|
+
# ── Resolve version from either tag or manual input ─────────────────── #
|
|
37
|
+
jobs:
|
|
38
|
+
meta:
|
|
39
|
+
name: Resolve version
|
|
40
|
+
runs-on: ubuntu-22.04
|
|
41
|
+
outputs:
|
|
42
|
+
version: ${{ steps.resolve.outputs.version }}
|
|
43
|
+
prerelease: ${{ steps.resolve.outputs.prerelease }}
|
|
44
|
+
tag: ${{ steps.resolve.outputs.tag }}
|
|
45
|
+
steps:
|
|
46
|
+
- id: resolve
|
|
47
|
+
run: |
|
|
48
|
+
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
|
49
|
+
VERSION="${{ github.event.inputs.version }}"
|
|
50
|
+
PRERELEASE="${{ github.event.inputs.prerelease }}"
|
|
51
|
+
else
|
|
52
|
+
# Strip leading 'v' from tag name
|
|
53
|
+
VERSION="${GITHUB_REF_NAME#v}"
|
|
54
|
+
# Tags with a hyphen (v1.0.0-beta) are pre-releases
|
|
55
|
+
if echo "$VERSION" | grep -q '-'; then
|
|
56
|
+
PRERELEASE="true"
|
|
57
|
+
else
|
|
58
|
+
PRERELEASE="false"
|
|
59
|
+
fi
|
|
60
|
+
fi
|
|
61
|
+
TAG="v${VERSION}"
|
|
62
|
+
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
|
63
|
+
echo "prerelease=$PRERELEASE" >> "$GITHUB_OUTPUT"
|
|
64
|
+
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
|
|
65
|
+
echo "Resolved: version=$VERSION prerelease=$PRERELEASE tag=$TAG"
|
|
66
|
+
|
|
67
|
+
# ────────────────────────────────────────────────────────────────── #
|
|
68
|
+
# Python wheel + sdist #
|
|
69
|
+
# ────────────────────────────────────────────────────────────────── #
|
|
70
|
+
build-wheel:
|
|
71
|
+
name: Build Python Wheel
|
|
72
|
+
runs-on: ubuntu-22.04
|
|
73
|
+
needs: meta
|
|
74
|
+
steps:
|
|
75
|
+
- uses: actions/checkout@v4
|
|
76
|
+
|
|
77
|
+
- uses: actions/setup-python@v5
|
|
78
|
+
with:
|
|
79
|
+
python-version: ${{ env.PYTHON_VERSION }}
|
|
80
|
+
|
|
81
|
+
- name: Patch version in pyproject.toml
|
|
82
|
+
run: |
|
|
83
|
+
sed -i "s/^version = .*/version = \"${{ needs.meta.outputs.version }}\"/" pyproject.toml
|
|
84
|
+
grep "^version" pyproject.toml
|
|
85
|
+
|
|
86
|
+
- name: Build
|
|
87
|
+
run: |
|
|
88
|
+
pip install -q hatchling build
|
|
89
|
+
python -m build
|
|
90
|
+
|
|
91
|
+
- uses: actions/upload-artifact@v4
|
|
92
|
+
with:
|
|
93
|
+
name: python-dist
|
|
94
|
+
path: dist/
|
|
95
|
+
|
|
96
|
+
# ────────────────────────────────────────────────────────────────── #
|
|
97
|
+
# Publish to PyPI (only on tag push or if manually enabled) #
|
|
98
|
+
# ────────────────────────────────────────────────────────────────── #
|
|
99
|
+
publish-pypi:
|
|
100
|
+
name: Publish to PyPI
|
|
101
|
+
runs-on: ubuntu-22.04
|
|
102
|
+
needs: [meta, build-wheel]
|
|
103
|
+
# Skip PyPI publish on manual runs unless explicitly enabled
|
|
104
|
+
if: >
|
|
105
|
+
github.event_name == 'push' ||
|
|
106
|
+
(github.event_name == 'workflow_dispatch' &&
|
|
107
|
+
github.event.inputs.create_release == 'true')
|
|
108
|
+
environment:
|
|
109
|
+
name: pypi
|
|
110
|
+
url: https://pypi.org/p/nixorb
|
|
111
|
+
permissions:
|
|
112
|
+
id-token: write
|
|
113
|
+
steps:
|
|
114
|
+
- uses: actions/download-artifact@v4
|
|
115
|
+
with:
|
|
116
|
+
name: python-dist
|
|
117
|
+
path: dist/
|
|
118
|
+
|
|
119
|
+
- name: Publish to PyPI
|
|
120
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
121
|
+
continue-on-error: true # don't fail the whole release if PyPI rejects
|
|
122
|
+
|
|
123
|
+
# ────────────────────────────────────────────────────────────────── #
|
|
124
|
+
# Arch Linux pacman package #
|
|
125
|
+
# ────────────────────────────────────────────────────────────────── #
|
|
126
|
+
build-pacman:
|
|
127
|
+
name: Build pacman package
|
|
128
|
+
runs-on: ubuntu-22.04
|
|
129
|
+
needs: meta
|
|
130
|
+
container:
|
|
131
|
+
image: archlinux:latest
|
|
132
|
+
steps:
|
|
133
|
+
- uses: actions/checkout@v4
|
|
134
|
+
|
|
135
|
+
- name: Bootstrap Arch build environment
|
|
136
|
+
run: |
|
|
137
|
+
pacman-key --init
|
|
138
|
+
pacman -Syu --noconfirm
|
|
139
|
+
pacman -S --noconfirm \
|
|
140
|
+
base-devel git python python-pip \
|
|
141
|
+
python-build python-installer python-wheel \
|
|
142
|
+
qt6-base qt6-declarative qt6-tools \
|
|
143
|
+
python-hatchling
|
|
144
|
+
|
|
145
|
+
- name: Patch version
|
|
146
|
+
run: |
|
|
147
|
+
VERSION="${{ needs.meta.outputs.version }}"
|
|
148
|
+
sed -i "s/^pkgver=.*/pkgver=${VERSION}/" packaging/PKGBUILD
|
|
149
|
+
sed -i "s/^version = .*/version = \"${VERSION}\"/" pyproject.toml
|
|
150
|
+
|
|
151
|
+
- name: Build source tarball
|
|
152
|
+
run: |
|
|
153
|
+
VERSION="${{ needs.meta.outputs.version }}"
|
|
154
|
+
python assets/generate_icon.py
|
|
155
|
+
tar --exclude='*.pyc' --exclude='__pycache__' \
|
|
156
|
+
--exclude='.git' --exclude='*.tar.gz' \
|
|
157
|
+
-czf "nixorb-${VERSION}.tar.gz" \
|
|
158
|
+
--transform "s|^|nixorb-${VERSION}/|" \
|
|
159
|
+
nixorb/ assets/ config/ plugins/ packaging/ \
|
|
160
|
+
tests/ pyproject.toml README.md LICENSE \
|
|
161
|
+
install.fish install.sh
|
|
162
|
+
SHA256=$(sha256sum "nixorb-${VERSION}.tar.gz" | cut -d' ' -f1)
|
|
163
|
+
echo "SHA256=$SHA256"
|
|
164
|
+
cp "nixorb-${VERSION}.tar.gz" packaging/
|
|
165
|
+
sed -i "s/sha256sums=.*/sha256sums=('${SHA256}')/" packaging/PKGBUILD
|
|
166
|
+
|
|
167
|
+
- name: Build package as non-root user
|
|
168
|
+
run: |
|
|
169
|
+
useradd -m builder
|
|
170
|
+
cp -r . /home/builder/nixorb
|
|
171
|
+
chown -R builder:builder /home/builder/nixorb
|
|
172
|
+
cd /home/builder/nixorb/packaging
|
|
173
|
+
su builder -c "makepkg --noconfirm --cleanbuild --skipinteg -d"
|
|
174
|
+
cp *.pkg.tar.zst /home/builder/
|
|
175
|
+
|
|
176
|
+
- uses: actions/upload-artifact@v4
|
|
177
|
+
with:
|
|
178
|
+
name: pacman-pkg
|
|
179
|
+
path: /home/builder/nixorb-*.pkg.tar.zst
|
|
180
|
+
|
|
181
|
+
# ────────────────────────────────────────────────────────────────── #
|
|
182
|
+
# AppImage #
|
|
183
|
+
# ────────────────────────────────────────────────────────────────── #
|
|
184
|
+
build-appimage:
|
|
185
|
+
name: Build AppImage
|
|
186
|
+
runs-on: ubuntu-22.04
|
|
187
|
+
needs: meta
|
|
188
|
+
steps:
|
|
189
|
+
- uses: actions/checkout@v4
|
|
190
|
+
|
|
191
|
+
- uses: actions/setup-python@v5
|
|
192
|
+
with:
|
|
193
|
+
python-version: ${{ env.PYTHON_VERSION }}
|
|
194
|
+
|
|
195
|
+
- name: Install system deps
|
|
196
|
+
run: |
|
|
197
|
+
sudo apt-get update -qq
|
|
198
|
+
sudo apt-get install -y --no-install-recommends \
|
|
199
|
+
libportaudio2 portaudio19-dev ffmpeg libfuse2 \
|
|
200
|
+
qt6-base-dev qt6-declarative-dev qt6-tools-dev \
|
|
201
|
+
python3-dev
|
|
202
|
+
|
|
203
|
+
- name: Patch version
|
|
204
|
+
run: |
|
|
205
|
+
sed -i "s/^version = .*/version = \"${{ needs.meta.outputs.version }}\"/" pyproject.toml
|
|
206
|
+
|
|
207
|
+
- name: Install Python tools
|
|
208
|
+
run: |
|
|
209
|
+
pip install -q hatchling build
|
|
210
|
+
pip install -q torch==2.7.1+cpu \
|
|
211
|
+
--index-url https://download.pytorch.org/whl/cpu
|
|
212
|
+
pip install -q appimage-builder
|
|
213
|
+
pip install -q -e .
|
|
214
|
+
|
|
215
|
+
- name: Compile shaders
|
|
216
|
+
run: |
|
|
217
|
+
QSB=$(find /usr -name qsb -type f 2>/dev/null | head -1)
|
|
218
|
+
if [ -n "$QSB" ]; then
|
|
219
|
+
$QSB --glsl "100es,120,150" --hlsl 50 --msl 12 \
|
|
220
|
+
assets/shaders/orb_glow.vert -o assets/shaders/orb_glow.vert.qsb
|
|
221
|
+
$QSB --glsl "100es,120,150" --hlsl 50 --msl 12 \
|
|
222
|
+
assets/shaders/orb_glow.frag -o assets/shaders/orb_glow.frag.qsb
|
|
223
|
+
else
|
|
224
|
+
echo "WARNING: qsb not found, shaders not compiled"
|
|
225
|
+
touch assets/shaders/orb_glow.vert.qsb assets/shaders/orb_glow.frag.qsb
|
|
226
|
+
fi
|
|
227
|
+
|
|
228
|
+
- name: Build AppImage
|
|
229
|
+
env:
|
|
230
|
+
NIXORB_VERSION: ${{ needs.meta.outputs.version }}
|
|
231
|
+
run: |
|
|
232
|
+
cd packaging/appimage
|
|
233
|
+
bash build_appimage.sh "$NIXORB_VERSION"
|
|
234
|
+
|
|
235
|
+
- uses: actions/upload-artifact@v4
|
|
236
|
+
with:
|
|
237
|
+
name: appimage
|
|
238
|
+
path: packaging/appimage/NixOrb-*.AppImage
|
|
239
|
+
|
|
240
|
+
# ────────────────────────────────────────────────────────────────── #
|
|
241
|
+
# Flatpak #
|
|
242
|
+
# ────────────────────────────────────────────────────────────────── #
|
|
243
|
+
build-flatpak:
|
|
244
|
+
name: Build Flatpak
|
|
245
|
+
runs-on: ubuntu-22.04
|
|
246
|
+
needs: meta
|
|
247
|
+
container:
|
|
248
|
+
image: bilelmoussaoui/flatpak-github-actions:kde-6.7
|
|
249
|
+
options: --privileged
|
|
250
|
+
steps:
|
|
251
|
+
- uses: actions/checkout@v4
|
|
252
|
+
|
|
253
|
+
- name: Patch version
|
|
254
|
+
run: |
|
|
255
|
+
sed -i "s/^version = .*/version = \"${{ needs.meta.outputs.version }}\"/" pyproject.toml
|
|
256
|
+
|
|
257
|
+
- name: Pre-download Python wheels
|
|
258
|
+
run: |
|
|
259
|
+
mkdir -p wheels
|
|
260
|
+
pip download -d wheels \
|
|
261
|
+
faster-whisper openai chromadb aiohttp qasync \
|
|
262
|
+
"pydantic>=2.7" pydantic-settings tomli-w "typer[all]" \
|
|
263
|
+
rich pygments openwakeword huggingface-hub cryptography \
|
|
264
|
+
aiofiles sounddevice soundfile numpy pynput hypernix \
|
|
265
|
+
2>/dev/null || true
|
|
266
|
+
|
|
267
|
+
- name: Build Flatpak
|
|
268
|
+
uses: bilelmoussaoui/flatpak-github-actions/flatpak-builder@v6
|
|
269
|
+
with:
|
|
270
|
+
bundle: NixOrb-${{ needs.meta.outputs.version }}.flatpak
|
|
271
|
+
manifest-path: packaging/io.nixorb.NixOrb.yml
|
|
272
|
+
cache-key: flatpak-builder-${{ github.sha }}
|
|
273
|
+
|
|
274
|
+
- uses: actions/upload-artifact@v4
|
|
275
|
+
with:
|
|
276
|
+
name: flatpak
|
|
277
|
+
path: NixOrb-*.flatpak
|
|
278
|
+
|
|
279
|
+
# ────────────────────────────────────────────────────────────────── #
|
|
280
|
+
# Create GitHub Release #
|
|
281
|
+
# ────────────────────────────────────────────────────────────────── #
|
|
282
|
+
create-release:
|
|
283
|
+
name: Create GitHub Release
|
|
284
|
+
runs-on: ubuntu-22.04
|
|
285
|
+
needs: [meta, build-wheel, build-pacman, build-appimage, build-flatpak]
|
|
286
|
+
if: >
|
|
287
|
+
always() &&
|
|
288
|
+
(github.event_name == 'push' ||
|
|
289
|
+
github.event.inputs.create_release == 'true')
|
|
290
|
+
steps:
|
|
291
|
+
- uses: actions/checkout@v4
|
|
292
|
+
with:
|
|
293
|
+
fetch-depth: 0
|
|
294
|
+
|
|
295
|
+
- name: Download all artifacts
|
|
296
|
+
uses: actions/download-artifact@v4
|
|
297
|
+
with:
|
|
298
|
+
path: release-assets/
|
|
299
|
+
|
|
300
|
+
- name: Create or update git tag (manual runs only)
|
|
301
|
+
if: github.event_name == 'workflow_dispatch'
|
|
302
|
+
run: |
|
|
303
|
+
git config user.name "github-actions[bot]"
|
|
304
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
305
|
+
TAG="${{ needs.meta.outputs.tag }}"
|
|
306
|
+
# Delete existing tag if present (allows re-running)
|
|
307
|
+
git tag -d "$TAG" 2>/dev/null || true
|
|
308
|
+
git push origin ":refs/tags/$TAG" 2>/dev/null || true
|
|
309
|
+
git tag "$TAG"
|
|
310
|
+
git push origin "$TAG"
|
|
311
|
+
|
|
312
|
+
- name: Generate changelog
|
|
313
|
+
id: changelog
|
|
314
|
+
run: |
|
|
315
|
+
PREV=$(git tag --sort=-version:refname | grep -v "${{ needs.meta.outputs.tag }}" | head -1 || true)
|
|
316
|
+
if [ -n "$PREV" ]; then
|
|
317
|
+
LOG=$(git log "${PREV}..${{ needs.meta.outputs.tag }}" --oneline --no-merges 2>/dev/null | head -40 || echo "Initial release")
|
|
318
|
+
else
|
|
319
|
+
LOG=$(git log --oneline --no-merges | head -20)
|
|
320
|
+
fi
|
|
321
|
+
{
|
|
322
|
+
echo 'changelog<<CHANGELOG_EOF'
|
|
323
|
+
echo "$LOG"
|
|
324
|
+
echo 'CHANGELOG_EOF'
|
|
325
|
+
} >> "$GITHUB_OUTPUT"
|
|
326
|
+
|
|
327
|
+
- name: Create release
|
|
328
|
+
uses: softprops/action-gh-release@v2
|
|
329
|
+
with:
|
|
330
|
+
tag_name: ${{ needs.meta.outputs.tag }}
|
|
331
|
+
name: NixOrb ${{ needs.meta.outputs.version }}
|
|
332
|
+
draft: false
|
|
333
|
+
prerelease: ${{ needs.meta.outputs.prerelease }}
|
|
334
|
+
body: |
|
|
335
|
+
## NixOrb ${{ needs.meta.outputs.version }}
|
|
336
|
+
|
|
337
|
+
### Install
|
|
338
|
+
|
|
339
|
+
**Arch Linux (recommended)**
|
|
340
|
+
```bash
|
|
341
|
+
sudo pacman -U nixorb-${{ needs.meta.outputs.version }}-1-x86_64.pkg.tar.zst
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
**PyPI**
|
|
345
|
+
```bash
|
|
346
|
+
pip install nixorb==${{ needs.meta.outputs.version }}
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
**AppImage (portable)**
|
|
350
|
+
```bash
|
|
351
|
+
chmod +x NixOrb-${{ needs.meta.outputs.version }}-x86_64.AppImage
|
|
352
|
+
./NixOrb-${{ needs.meta.outputs.version }}-x86_64.AppImage start
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
**Flatpak**
|
|
356
|
+
```bash
|
|
357
|
+
flatpak install NixOrb-${{ needs.meta.outputs.version }}.flatpak
|
|
358
|
+
flatpak run io.nixorb.NixOrb
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
### Changes
|
|
362
|
+
${{ steps.changelog.outputs.changelog }}
|
|
363
|
+
files: |
|
|
364
|
+
release-assets/python-dist/*
|
|
365
|
+
release-assets/pacman-pkg/*
|
|
366
|
+
release-assets/appimage/*
|
|
367
|
+
release-assets/flatpak/*
|
nixorb-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 NixOrb Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|