fsteg 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.
- fsteg-0.1.0/.github/workflows/release.yml +487 -0
- fsteg-0.1.0/.gitignore +15 -0
- fsteg-0.1.0/.python-version +1 -0
- fsteg-0.1.0/LICENSE +21 -0
- fsteg-0.1.0/PKG-INFO +512 -0
- fsteg-0.1.0/README.md +474 -0
- fsteg-0.1.0/packaging/arch/PKGBUILD.tpl +22 -0
- fsteg-0.1.0/packaging/chocolatey/fsteg.nuspec +25 -0
- fsteg-0.1.0/packaging/chocolatey/tools/chocolateyInstall.ps1.tpl +15 -0
- fsteg-0.1.0/packaging/chocolatey/tools/chocolateyUninstall.ps1 +6 -0
- fsteg-0.1.0/packaging/homebrew/fsteg.rb.tpl +34 -0
- fsteg-0.1.0/packaging/scoop/fsteg.json.tpl +21 -0
- fsteg-0.1.0/packaging/snap/snapcraft.yaml +29 -0
- fsteg-0.1.0/packaging/winget/fsteg.yaml.tpl +21 -0
- fsteg-0.1.0/pyproject.toml +71 -0
- fsteg-0.1.0/scripts/install.ps1 +79 -0
- fsteg-0.1.0/scripts/install.sh +114 -0
- fsteg-0.1.0/src/fsteg/__init__.py +3 -0
- fsteg-0.1.0/src/fsteg/main.py +318 -0
- fsteg-0.1.0/tests/test_fsteg.py +159 -0
- fsteg-0.1.0/uv.lock +334 -0
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*.*.*"
|
|
7
|
+
- "v*"
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
inputs:
|
|
10
|
+
publish_to_pypi:
|
|
11
|
+
description: "Publish package to PyPI"
|
|
12
|
+
type: boolean
|
|
13
|
+
default: true
|
|
14
|
+
required: true
|
|
15
|
+
|
|
16
|
+
env:
|
|
17
|
+
BIN_NAME: fsteg
|
|
18
|
+
PACKAGE_NAME: fsteg
|
|
19
|
+
RELEASE: "true"
|
|
20
|
+
|
|
21
|
+
permissions:
|
|
22
|
+
contents: write # Needed to create GitHub releases & upload assets
|
|
23
|
+
id-token: write # Needed for PyPI Trusted Publishing
|
|
24
|
+
|
|
25
|
+
jobs:
|
|
26
|
+
# ─── 0. Run Tests ───────────────────────────────────────────────────────────
|
|
27
|
+
test:
|
|
28
|
+
name: Run Test Suite
|
|
29
|
+
runs-on: ubuntu-latest
|
|
30
|
+
steps:
|
|
31
|
+
- name: Checkout repository
|
|
32
|
+
uses: actions/checkout@v4
|
|
33
|
+
|
|
34
|
+
- name: Set up uv
|
|
35
|
+
uses: astral-sh/setup-uv@v5
|
|
36
|
+
with:
|
|
37
|
+
enable-cache: true
|
|
38
|
+
|
|
39
|
+
- name: Set up Python
|
|
40
|
+
run: uv python install 3.11
|
|
41
|
+
|
|
42
|
+
- name: Install dependencies
|
|
43
|
+
run: uv sync --extra test
|
|
44
|
+
|
|
45
|
+
- name: Run test suite
|
|
46
|
+
run: uv run pytest -v
|
|
47
|
+
|
|
48
|
+
# ─── 1. Publish to PyPI (with Manual Approval Gate) ──────────────────────────
|
|
49
|
+
pypi:
|
|
50
|
+
name: Publish to PyPI
|
|
51
|
+
needs: test
|
|
52
|
+
if: github.event_name != 'workflow_dispatch' || inputs.publish_to_pypi
|
|
53
|
+
runs-on: ubuntu-latest
|
|
54
|
+
environment:
|
|
55
|
+
name: release
|
|
56
|
+
url: https://pypi.org/p/fsteg
|
|
57
|
+
steps:
|
|
58
|
+
- name: Checkout repository
|
|
59
|
+
uses: actions/checkout@v4
|
|
60
|
+
|
|
61
|
+
- name: Set up uv
|
|
62
|
+
uses: astral-sh/setup-uv@v5
|
|
63
|
+
with:
|
|
64
|
+
enable-cache: true
|
|
65
|
+
|
|
66
|
+
- name: Set up Python
|
|
67
|
+
run: uv python install 3.11
|
|
68
|
+
|
|
69
|
+
- name: Build distributions
|
|
70
|
+
run: uv build
|
|
71
|
+
|
|
72
|
+
- name: Publish to PyPI
|
|
73
|
+
run: uv publish
|
|
74
|
+
|
|
75
|
+
- name: Upload dist artifacts
|
|
76
|
+
uses: actions/upload-artifact@v4
|
|
77
|
+
with:
|
|
78
|
+
name: pypi-dist
|
|
79
|
+
path: dist/*
|
|
80
|
+
|
|
81
|
+
# ─── 2. Build Standalone Binaries ───────────────────────────────────────────
|
|
82
|
+
build-binaries:
|
|
83
|
+
name: Build Binary — ${{ matrix.target }}
|
|
84
|
+
needs: test
|
|
85
|
+
runs-on: ${{ matrix.os }}
|
|
86
|
+
strategy:
|
|
87
|
+
fail-fast: false
|
|
88
|
+
matrix:
|
|
89
|
+
include:
|
|
90
|
+
# Linux x86_64
|
|
91
|
+
- target: x86_64-unknown-linux-gnu
|
|
92
|
+
os: ubuntu-22.04
|
|
93
|
+
archive: tar.gz
|
|
94
|
+
exe: fsteg
|
|
95
|
+
|
|
96
|
+
# Linux ARM64
|
|
97
|
+
- target: aarch64-unknown-linux-gnu
|
|
98
|
+
os: ubuntu-22.04
|
|
99
|
+
archive: tar.gz
|
|
100
|
+
exe: fsteg
|
|
101
|
+
arm64: true
|
|
102
|
+
|
|
103
|
+
# macOS Intel (x86_64)
|
|
104
|
+
- target: x86_64-apple-darwin
|
|
105
|
+
os: macos-13
|
|
106
|
+
archive: tar.gz
|
|
107
|
+
exe: fsteg
|
|
108
|
+
|
|
109
|
+
# macOS Apple Silicon (arm64)
|
|
110
|
+
- target: aarch64-apple-darwin
|
|
111
|
+
os: macos-14
|
|
112
|
+
archive: tar.gz
|
|
113
|
+
exe: fsteg
|
|
114
|
+
|
|
115
|
+
# Windows x86_64
|
|
116
|
+
- target: x86_64-pc-windows-msvc
|
|
117
|
+
os: windows-latest
|
|
118
|
+
archive: zip
|
|
119
|
+
exe: fsteg.exe
|
|
120
|
+
|
|
121
|
+
steps:
|
|
122
|
+
- name: Checkout repository
|
|
123
|
+
uses: actions/checkout@v4
|
|
124
|
+
|
|
125
|
+
- name: Set up uv
|
|
126
|
+
uses: astral-sh/setup-uv@v5
|
|
127
|
+
with:
|
|
128
|
+
enable-cache: true
|
|
129
|
+
|
|
130
|
+
- name: Set up Python
|
|
131
|
+
if: "!matrix.arm64"
|
|
132
|
+
run: uv python install 3.11
|
|
133
|
+
|
|
134
|
+
# ── Linux ARM64 cross build using QEMU & Docker ──
|
|
135
|
+
- name: Build binary (Linux ARM64 via QEMU)
|
|
136
|
+
if: matrix.arm64
|
|
137
|
+
run: |
|
|
138
|
+
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
|
139
|
+
docker run --rm -v "${PWD}:/app" -w /app arm64v8/python:3.11-slim bash -c "
|
|
140
|
+
apt-get update && apt-get install -y binutils gcc
|
|
141
|
+
pip install --no-cache-dir pyinstaller numpy pillow
|
|
142
|
+
pyinstaller --onefile --name fsteg src/fsteg/main.py --clean
|
|
143
|
+
"
|
|
144
|
+
|
|
145
|
+
# ── Native build (Linux x86_64, macOS, Windows) ──
|
|
146
|
+
- name: Build binary (Native)
|
|
147
|
+
if: "!matrix.arm64"
|
|
148
|
+
run: |
|
|
149
|
+
uv pip install --system pyinstaller numpy pillow
|
|
150
|
+
pyinstaller --onefile --name fsteg src/fsteg/main.py --clean
|
|
151
|
+
|
|
152
|
+
# ── Package Archive ──
|
|
153
|
+
- name: Package (tar.gz — Linux/macOS)
|
|
154
|
+
if: matrix.archive == 'tar.gz'
|
|
155
|
+
shell: bash
|
|
156
|
+
run: |
|
|
157
|
+
ASSET="${{ env.BIN_NAME }}-${{ github.ref_name }}-${{ matrix.target }}.tar.gz"
|
|
158
|
+
cp README.md LICENSE dist/
|
|
159
|
+
tar -czf "${ASSET}" -C dist "${{ matrix.exe }}" README.md LICENSE
|
|
160
|
+
echo "ASSET=${ASSET}" >> "$GITHUB_ENV"
|
|
161
|
+
|
|
162
|
+
- name: Package (zip — Windows)
|
|
163
|
+
if: matrix.archive == 'zip'
|
|
164
|
+
shell: pwsh
|
|
165
|
+
run: |
|
|
166
|
+
$asset = "${{ env.BIN_NAME }}-${{ github.ref_name }}-${{ matrix.target }}.zip"
|
|
167
|
+
Copy-Item "README.md", "LICENSE" -Destination "dist\"
|
|
168
|
+
Compress-Archive -Path "dist\${{ matrix.exe }}", "dist\README.md", "dist\LICENSE" -DestinationPath $asset
|
|
169
|
+
echo "ASSET=$asset" | Out-File -FilePath $env:GITHUB_ENV -Append
|
|
170
|
+
|
|
171
|
+
- name: Compute SHA-256 Checksum
|
|
172
|
+
shell: bash
|
|
173
|
+
run: |
|
|
174
|
+
if command -v sha256sum &>/dev/null; then
|
|
175
|
+
sha256sum "${ASSET}" | awk '{print $1}' > "${ASSET}.sha256"
|
|
176
|
+
else
|
|
177
|
+
shasum -a 256 "${ASSET}" | awk '{print $1}' > "${ASSET}.sha256"
|
|
178
|
+
fi
|
|
179
|
+
|
|
180
|
+
- name: Upload Binary Artifact
|
|
181
|
+
uses: actions/upload-artifact@v4
|
|
182
|
+
with:
|
|
183
|
+
name: binary-${{ matrix.target }}
|
|
184
|
+
path: |
|
|
185
|
+
${{ env.ASSET }}
|
|
186
|
+
${{ env.ASSET }}.sha256
|
|
187
|
+
|
|
188
|
+
# ─── 3. Create GitHub Release ───────────────────────────────────────────────
|
|
189
|
+
release:
|
|
190
|
+
name: GitHub Release
|
|
191
|
+
needs: build-binaries
|
|
192
|
+
runs-on: ubuntu-latest
|
|
193
|
+
environment: release
|
|
194
|
+
outputs:
|
|
195
|
+
version: ${{ steps.version.outputs.version }}
|
|
196
|
+
steps:
|
|
197
|
+
- name: Checkout repository
|
|
198
|
+
uses: actions/checkout@v4
|
|
199
|
+
|
|
200
|
+
- name: Extract clean version
|
|
201
|
+
id: version
|
|
202
|
+
run: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
|
|
203
|
+
|
|
204
|
+
- name: Download all binary artifacts
|
|
205
|
+
uses: actions/download-artifact@v4
|
|
206
|
+
with:
|
|
207
|
+
path: artifacts
|
|
208
|
+
merge-multiple: true
|
|
209
|
+
|
|
210
|
+
- name: Create GitHub Release
|
|
211
|
+
uses: softprops/action-gh-release@v2
|
|
212
|
+
with:
|
|
213
|
+
generate_release_notes: true
|
|
214
|
+
files: artifacts/**
|
|
215
|
+
|
|
216
|
+
# ─── 4. Build & Publish Debian/Ubuntu .deb (APT) ────────────────────────────
|
|
217
|
+
apt:
|
|
218
|
+
name: Package .deb (APT)
|
|
219
|
+
needs: release
|
|
220
|
+
runs-on: ubuntu-22.04
|
|
221
|
+
steps:
|
|
222
|
+
- name: Checkout repository
|
|
223
|
+
uses: actions/checkout@v4
|
|
224
|
+
|
|
225
|
+
- name: Download Linux x86_64 binary
|
|
226
|
+
uses: actions/download-artifact@v4
|
|
227
|
+
with:
|
|
228
|
+
name: binary-x86_64-unknown-linux-gnu
|
|
229
|
+
path: bin-x86_64
|
|
230
|
+
|
|
231
|
+
- name: Assemble Debian Package
|
|
232
|
+
run: |
|
|
233
|
+
VERSION="${{ needs.release.outputs.version }}"
|
|
234
|
+
PKG_DIR="fsteg_${VERSION}_amd64"
|
|
235
|
+
tar -xzf bin-x86_64/*.tar.gz
|
|
236
|
+
|
|
237
|
+
mkdir -p "${PKG_DIR}/DEBIAN"
|
|
238
|
+
mkdir -p "${PKG_DIR}/usr/bin"
|
|
239
|
+
mkdir -p "${PKG_DIR}/usr/share/doc/fsteg"
|
|
240
|
+
|
|
241
|
+
install -m 755 fsteg "${PKG_DIR}/usr/bin/fsteg"
|
|
242
|
+
cp README.md LICENSE "${PKG_DIR}/usr/share/doc/fsteg/"
|
|
243
|
+
|
|
244
|
+
cat <<EOF > "${PKG_DIR}/DEBIAN/control"
|
|
245
|
+
Package: fsteg
|
|
246
|
+
Version: ${VERSION}
|
|
247
|
+
Section: utils
|
|
248
|
+
Priority: optional
|
|
249
|
+
Architecture: amd64
|
|
250
|
+
Maintainer: Kishan Agarwal <kishanagarwal028@gmail.com>
|
|
251
|
+
Description: High-fidelity FFT block-based frequency domain steganography CLI
|
|
252
|
+
Embeds and extracts arbitrary UTF-8 text messages in images via 2D-DFT.
|
|
253
|
+
EOF
|
|
254
|
+
|
|
255
|
+
dpkg-deb --build --root-owner-group "${PKG_DIR}"
|
|
256
|
+
echo "DEB_FILE=${PKG_DIR}.deb" >> "$GITHUB_ENV"
|
|
257
|
+
|
|
258
|
+
- name: Attach .deb to GitHub Release
|
|
259
|
+
uses: softprops/action-gh-release@v2
|
|
260
|
+
with:
|
|
261
|
+
files: ${{ env.DEB_FILE }}
|
|
262
|
+
|
|
263
|
+
- name: Upload .deb Artifact for APT Repo
|
|
264
|
+
uses: actions/upload-artifact@v4
|
|
265
|
+
with:
|
|
266
|
+
name: debian-package
|
|
267
|
+
path: ${{ env.DEB_FILE }}
|
|
268
|
+
|
|
269
|
+
# ─── 4.5. Host APT Repository on GitHub Pages ──────────────────────────────
|
|
270
|
+
apt-repo:
|
|
271
|
+
name: Update gh-pages APT Repository
|
|
272
|
+
needs: apt
|
|
273
|
+
runs-on: ubuntu-latest
|
|
274
|
+
environment: release
|
|
275
|
+
continue-on-error: true
|
|
276
|
+
steps:
|
|
277
|
+
- name: Checkout gh-pages branch
|
|
278
|
+
uses: actions/checkout@v4
|
|
279
|
+
with:
|
|
280
|
+
ref: gh-pages
|
|
281
|
+
|
|
282
|
+
- name: Download .deb package
|
|
283
|
+
uses: actions/download-artifact@v4
|
|
284
|
+
with:
|
|
285
|
+
name: debian-package
|
|
286
|
+
path: pool/main/
|
|
287
|
+
|
|
288
|
+
- name: Generate APT repository metadata
|
|
289
|
+
run: |
|
|
290
|
+
sudo apt-get update
|
|
291
|
+
sudo apt-get install -y dpkg-dev apt-utils
|
|
292
|
+
dpkg-scanpackages --multiversion pool/ > Packages
|
|
293
|
+
gzip -k -f Packages
|
|
294
|
+
apt-ftparchive release . > Release
|
|
295
|
+
|
|
296
|
+
- name: Commit and push APT repo
|
|
297
|
+
uses: stefanzweifel/git-auto-commit-action@v5
|
|
298
|
+
with:
|
|
299
|
+
commit_message: "Update APT repository with fsteg ${{ needs.release.outputs.version }}"
|
|
300
|
+
branch: gh-pages
|
|
301
|
+
|
|
302
|
+
# ─── 5. Update Homebrew Formula ────────────────────────────────────────────
|
|
303
|
+
homebrew:
|
|
304
|
+
name: Generate Homebrew Formula
|
|
305
|
+
needs: release
|
|
306
|
+
runs-on: ubuntu-latest
|
|
307
|
+
environment: release
|
|
308
|
+
steps:
|
|
309
|
+
- name: Checkout repository
|
|
310
|
+
uses: actions/checkout@v4
|
|
311
|
+
|
|
312
|
+
- name: Download artifacts
|
|
313
|
+
uses: actions/download-artifact@v4
|
|
314
|
+
with:
|
|
315
|
+
path: artifacts
|
|
316
|
+
merge-multiple: true
|
|
317
|
+
|
|
318
|
+
- name: Generate Homebrew Formula
|
|
319
|
+
run: |
|
|
320
|
+
VERSION="${{ needs.release.outputs.version }}"
|
|
321
|
+
ARM64_DARWIN_SHA=$(cat artifacts/fsteg-v${VERSION}-aarch64-apple-darwin.tar.gz.sha256)
|
|
322
|
+
X86_64_DARWIN_SHA=$(cat artifacts/fsteg-v${VERSION}-x86_64-apple-darwin.tar.gz.sha256)
|
|
323
|
+
AARCH64_LINUX_SHA=$(cat artifacts/fsteg-v${VERSION}-aarch64-unknown-linux-gnu.tar.gz.sha256)
|
|
324
|
+
X86_64_LINUX_SHA=$(cat artifacts/fsteg-v${VERSION}-x86_64-unknown-linux-gnu.tar.gz.sha256)
|
|
325
|
+
|
|
326
|
+
sed -e "s/__VERSION__/${VERSION}/g" \
|
|
327
|
+
-e "s/__ARM64_DARWIN_SHA256__/${ARM64_DARWIN_SHA}/g" \
|
|
328
|
+
-e "s/__X86_64_DARWIN_SHA256__/${X86_64_DARWIN_SHA}/g" \
|
|
329
|
+
-e "s/__AARCH64_LINUX_SHA256__/${AARCH64_LINUX_SHA}/g" \
|
|
330
|
+
-e "s/__X86_64_LINUX_SHA256__/${X86_64_LINUX_SHA}/g" \
|
|
331
|
+
packaging/homebrew/fsteg.rb.tpl > fsteg.rb
|
|
332
|
+
|
|
333
|
+
- name: Attach Homebrew Formula to Release
|
|
334
|
+
uses: softprops/action-gh-release@v2
|
|
335
|
+
with:
|
|
336
|
+
files: fsteg.rb
|
|
337
|
+
|
|
338
|
+
- name: Push to homebrew-tap repository
|
|
339
|
+
if: env.HOMEBREW_TAP_TOKEN != ''
|
|
340
|
+
uses: mislav/bump-homebrew-formula-action@v3
|
|
341
|
+
with:
|
|
342
|
+
formula-name: fsteg
|
|
343
|
+
formula-path: Formula/fsteg.rb
|
|
344
|
+
homebrew-tap: Kishan-Agarwal-28/homebrew-tap
|
|
345
|
+
tag-name: ${{ github.ref_name }}
|
|
346
|
+
download-url: https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/fsteg-${{ github.ref_name }}-aarch64-apple-darwin.tar.gz
|
|
347
|
+
env:
|
|
348
|
+
COMMITTER_TOKEN: ${{ secrets.HOMEBREW_TAP_TOKEN }}
|
|
349
|
+
|
|
350
|
+
# ─── 6. Chocolatey Package ─────────────────────────────────────────────────
|
|
351
|
+
chocolatey:
|
|
352
|
+
name: Package & Publish Chocolatey
|
|
353
|
+
needs: release
|
|
354
|
+
runs-on: windows-latest
|
|
355
|
+
environment: release
|
|
356
|
+
steps:
|
|
357
|
+
- name: Checkout repository
|
|
358
|
+
uses: actions/checkout@v4
|
|
359
|
+
|
|
360
|
+
- name: Download Windows artifact
|
|
361
|
+
uses: actions/download-artifact@v4
|
|
362
|
+
with:
|
|
363
|
+
name: binary-x86_64-pc-windows-msvc
|
|
364
|
+
path: artifacts
|
|
365
|
+
|
|
366
|
+
- name: Build Chocolatey Package
|
|
367
|
+
shell: pwsh
|
|
368
|
+
run: |
|
|
369
|
+
$version = "${{ needs.release.outputs.version }}"
|
|
370
|
+
$sha = (Get-Content "artifacts\${{ env.BIN_NAME }}-${{ github.ref_name }}-x86_64-pc-windows-msvc.zip.sha256").Trim().Split()[0]
|
|
371
|
+
$url = "https://github.com/${{ github.repository }}/releases/download/v$version/${{ env.BIN_NAME }}-v$version-x86_64-pc-windows-msvc.zip"
|
|
372
|
+
|
|
373
|
+
New-Item -ItemType Directory -Path "chocolatey\tools" -Force | Out-Null
|
|
374
|
+
Copy-Item "packaging\chocolatey\fsteg.nuspec" -Destination "chocolatey\fsteg.nuspec"
|
|
375
|
+
Copy-Item "packaging\chocolatey\tools\chocolateyUninstall.ps1" -Destination "chocolatey\tools\chocolateyUninstall.ps1"
|
|
376
|
+
|
|
377
|
+
(Get-Content "packaging\chocolatey\tools\chocolateyInstall.ps1.tpl") `
|
|
378
|
+
-replace '__URL__', $url `
|
|
379
|
+
-replace '__SHA256__', $sha |
|
|
380
|
+
Set-Content "chocolatey\tools\chocolateyInstall.ps1"
|
|
381
|
+
|
|
382
|
+
choco pack chocolatey\fsteg.nuspec --version $version --outputdirectory dist-choco
|
|
383
|
+
|
|
384
|
+
- name: Attach .nupkg to Release
|
|
385
|
+
uses: softprops/action-gh-release@v2
|
|
386
|
+
with:
|
|
387
|
+
files: dist-choco/*.nupkg
|
|
388
|
+
|
|
389
|
+
- name: Push to Chocolatey Community
|
|
390
|
+
if: env.CHOCOLATEY_API_KEY != ''
|
|
391
|
+
shell: pwsh
|
|
392
|
+
run: |
|
|
393
|
+
$version = "${{ needs.release.outputs.version }}"
|
|
394
|
+
choco push "dist-choco\fsteg.$version.nupkg" `
|
|
395
|
+
--source https://push.chocolatey.org/ `
|
|
396
|
+
--api-key ${{ secrets.CHOCOLATEY_API_KEY }}
|
|
397
|
+
env:
|
|
398
|
+
CHOCOLATEY_API_KEY: ${{ secrets.CHOCOLATEY_API_KEY }}
|
|
399
|
+
|
|
400
|
+
# ─── 7. Scoop Manifest ─────────────────────────────────────────────────────
|
|
401
|
+
scoop:
|
|
402
|
+
name: Generate Scoop Manifest
|
|
403
|
+
needs: release
|
|
404
|
+
runs-on: ubuntu-latest
|
|
405
|
+
steps:
|
|
406
|
+
- name: Checkout repository
|
|
407
|
+
uses: actions/checkout@v4
|
|
408
|
+
|
|
409
|
+
- name: Download Windows artifact
|
|
410
|
+
uses: actions/download-artifact@v4
|
|
411
|
+
with:
|
|
412
|
+
name: binary-x86_64-pc-windows-msvc
|
|
413
|
+
path: artifacts
|
|
414
|
+
|
|
415
|
+
- name: Generate Scoop Manifest
|
|
416
|
+
run: |
|
|
417
|
+
VERSION="${{ needs.release.outputs.version }}"
|
|
418
|
+
SHA=$(cat artifacts/fsteg-v${VERSION}-x86_64-pc-windows-msvc.zip.sha256 | awk '{print $1}')
|
|
419
|
+
|
|
420
|
+
sed -e "s/__VERSION__/${VERSION}/g" \
|
|
421
|
+
-e "s/__SHA256__/${SHA}/g" \
|
|
422
|
+
packaging/scoop/fsteg.json.tpl > fsteg.json
|
|
423
|
+
|
|
424
|
+
- name: Attach Scoop Manifest to Release
|
|
425
|
+
uses: softprops/action-gh-release@v2
|
|
426
|
+
with:
|
|
427
|
+
files: fsteg.json
|
|
428
|
+
|
|
429
|
+
# ─── 8. WinGet Manifest ────────────────────────────────────────────────────
|
|
430
|
+
winget:
|
|
431
|
+
name: Generate WinGet Manifest
|
|
432
|
+
needs: release
|
|
433
|
+
runs-on: ubuntu-latest
|
|
434
|
+
steps:
|
|
435
|
+
- name: Checkout repository
|
|
436
|
+
uses: actions/checkout@v4
|
|
437
|
+
|
|
438
|
+
- name: Download Windows artifact
|
|
439
|
+
uses: actions/download-artifact@v4
|
|
440
|
+
with:
|
|
441
|
+
name: binary-x86_64-pc-windows-msvc
|
|
442
|
+
path: artifacts
|
|
443
|
+
|
|
444
|
+
- name: Generate WinGet Manifest
|
|
445
|
+
run: |
|
|
446
|
+
VERSION="${{ needs.release.outputs.version }}"
|
|
447
|
+
SHA=$(cat artifacts/fsteg-v${VERSION}-x86_64-pc-windows-msvc.zip.sha256 | awk '{print $1}')
|
|
448
|
+
|
|
449
|
+
sed -e "s/__VERSION__/${VERSION}/g" \
|
|
450
|
+
-e "s/__SHA256__/${SHA}/g" \
|
|
451
|
+
packaging/winget/fsteg.yaml.tpl > fsteg.yaml
|
|
452
|
+
|
|
453
|
+
- name: Attach WinGet Manifest to Release
|
|
454
|
+
uses: softprops/action-gh-release@v2
|
|
455
|
+
with:
|
|
456
|
+
files: fsteg.yaml
|
|
457
|
+
|
|
458
|
+
# ─── 9. Arch Linux (Pacman PKGBUILD) ───────────────────────────────────────
|
|
459
|
+
pacman:
|
|
460
|
+
name: Generate Arch Linux PKGBUILD
|
|
461
|
+
needs: release
|
|
462
|
+
runs-on: ubuntu-latest
|
|
463
|
+
steps:
|
|
464
|
+
- name: Checkout repository
|
|
465
|
+
uses: actions/checkout@v4
|
|
466
|
+
|
|
467
|
+
- name: Download artifacts
|
|
468
|
+
uses: actions/download-artifact@v4
|
|
469
|
+
with:
|
|
470
|
+
path: artifacts
|
|
471
|
+
merge-multiple: true
|
|
472
|
+
|
|
473
|
+
- name: Generate PKGBUILD
|
|
474
|
+
run: |
|
|
475
|
+
VERSION="${{ needs.release.outputs.version }}"
|
|
476
|
+
X86_SHA=$(cat artifacts/fsteg-v${VERSION}-x86_64-unknown-linux-gnu.tar.gz.sha256 | awk '{print $1}')
|
|
477
|
+
ARM_SHA=$(cat artifacts/fsteg-v${VERSION}-aarch64-unknown-linux-gnu.tar.gz.sha256 | awk '{print $1}')
|
|
478
|
+
|
|
479
|
+
sed -e "s/__VERSION__/${VERSION}/g" \
|
|
480
|
+
-e "s/__X86_64_SHA__/${X86_SHA}/g" \
|
|
481
|
+
-e "s/__AARCH64_SHA__/${ARM_SHA}/g" \
|
|
482
|
+
packaging/arch/PKGBUILD.tpl > PKGBUILD
|
|
483
|
+
|
|
484
|
+
- name: Attach PKGBUILD to Release
|
|
485
|
+
uses: softprops/action-gh-release@v2
|
|
486
|
+
with:
|
|
487
|
+
files: PKGBUILD
|
fsteg-0.1.0/.gitignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.11
|
fsteg-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Kishan Agarwal
|
|
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.
|