3 changed files with 219 additions and 0 deletions
@ -0,0 +1,61 @@
|
||||
name: Build release workflow |
||||
|
||||
on: |
||||
push: |
||||
tags: |
||||
- '*' |
||||
|
||||
jobs: |
||||
create_release: |
||||
runs-on: ubuntu-24.04 |
||||
name: Create github release |
||||
outputs: |
||||
upload_url: > |
||||
${{ steps.get_release.outputs.upload_url || |
||||
steps.create_release.outputs.upload_url }} |
||||
steps: |
||||
- name: Try to Get Release |
||||
id: get_release |
||||
uses: zebra-lucky/actions-js-getRelease@0.0.3 |
||||
env: |
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
||||
with: |
||||
tag: ${{ github.ref }} |
||||
- name: Create Release |
||||
id: create_release |
||||
if: ${{ !steps.get_release.outputs.upload_url }} |
||||
uses: actions/create-release@v1 |
||||
env: |
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
||||
with: |
||||
tag_name: ${{ github.ref }} |
||||
release_name: ${{ github.ref }} |
||||
draft: false |
||||
prerelease: false |
||||
|
||||
build_with_pyinstaller: |
||||
needs: create_release |
||||
runs-on: ubuntu-24.04 |
||||
name: create PyInstaller build |
||||
steps: |
||||
- name: Set outputs for pkg_ver |
||||
id: set_vars |
||||
run: | |
||||
export JM_VERSION=${{ github.ref_name }} |
||||
echo "::set-output name=pkg_ver::$(echo $JM_VERSION)" |
||||
- name: Checkout |
||||
uses: actions/checkout@v1 |
||||
- name: build |
||||
env: |
||||
JM_VERSION: ${{ github.ref_name }} |
||||
run: | |
||||
./contrib/build-linux/pyinstaller-build/build.sh |
||||
- name: Upload Asset |
||||
uses: actions/upload-release-asset@v1 |
||||
env: |
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
||||
with: |
||||
upload_url: ${{ needs.create_release.outputs.upload_url }} |
||||
asset_path: dist/joinmarket-clientserver-${{ github.ref_name}}.tgz |
||||
asset_name: joinmarket-clientserver-${{ github.ref_name}}.tgz |
||||
asset_content_type: application/octet-stream |
||||
@ -0,0 +1,66 @@
|
||||
#!/bin/bash |
||||
|
||||
set -e |
||||
|
||||
PROJECT_ROOT="$(dirname "$(readlink -e "$0")")/../../.." |
||||
VENVPATH=$PROJECT_ROOT/jmvenv |
||||
JM_ROOT=$PROJECT_ROOT |
||||
|
||||
sudo apt-get install -y python3-dev python3-pip python3-venv git \ |
||||
build-essential automake pkg-config libtool libffi-dev libssl-dev |
||||
|
||||
|
||||
python3.12 -m venv $VENVPATH |
||||
|
||||
|
||||
. $VENVPATH/bin/activate |
||||
|
||||
|
||||
pip install .[gui] |
||||
pip install pyinstaller==6.14.2 |
||||
|
||||
# need to regenerate twisted/plugins/dropin.cache |
||||
python -c \ |
||||
'from twisted.plugin import IPlugin, getPlugins; list(getPlugins(IPlugin))' |
||||
|
||||
rm -rf deps |
||||
mkdir -p deps |
||||
cd deps |
||||
git clone https://github.com/bitcoin-core/secp256k1.git |
||||
cd secp256k1 |
||||
git checkout v0.6.0 |
||||
./autogen.sh |
||||
./configure --prefix $VENVPATH --enable-module-recovery \ |
||||
--enable-experimental --enable-module-ecdh --enable-benchmark=no |
||||
make |
||||
make check |
||||
make install |
||||
cd ../.. |
||||
|
||||
|
||||
rm -rf libsodium |
||||
git clone https://github.com/jedisct1/libsodium.git |
||||
cd libsodium |
||||
git checkout 1.0.20-RELEASE |
||||
./autogen.sh |
||||
./configure --prefix $VENVPATH |
||||
make check |
||||
sudo make install |
||||
cd .. |
||||
|
||||
cp contrib/build-linux/pyinstaller-build/joinmarket-clientserver.spec . |
||||
|
||||
pyinstaller -y joinmarket-clientserver.spec |
||||
|
||||
ls -l dist/joinmarket-clientserver/ |
||||
|
||||
cd dist |
||||
|
||||
export JM_VERSION="${JM_VERSION}" |
||||
|
||||
mv joinmarket-clientserver joinmarket-clientserver-${JM_VERSION} |
||||
|
||||
tar -czvf joinmarket-clientserver-${JM_VERSION}.tgz \ |
||||
joinmarket-clientserver-${JM_VERSION} |
||||
|
||||
ls -l |
||||
@ -0,0 +1,92 @@
|
||||
# -*- mode: python; coding: utf-8 -*- |
||||
|
||||
import itertools |
||||
import os |
||||
from pathlib import Path |
||||
|
||||
|
||||
PROJECT_ROOT = os.path.abspath('.') |
||||
|
||||
|
||||
binaries = [] |
||||
binaries += [(f'{PROJECT_ROOT}/jmvenv/lib/lib*', '.')] |
||||
|
||||
|
||||
datas = [] |
||||
datas += [(f'{PROJECT_ROOT}/jmvenv/lib/python3.12/site-packages/' |
||||
f'twisted/plugins/dropin.cache','twisted/plugins')] |
||||
datas += [(f'{PROJECT_ROOT}/jmvenv/lib/python3.12/site-packages/' |
||||
f'twisted/plugins/__init__.py', 'twisted/plugins')] |
||||
datas += [(f'{PROJECT_ROOT}/jmvenv/lib/python3.12/site-packages/' |
||||
f'twisted/plugins/txtorcon_endpoint_parser.py', 'twisted/plugins')] |
||||
|
||||
|
||||
scripts = [ |
||||
# 'scripts/add-utxo.py', |
||||
# 'scripts/bond-calculator.py', |
||||
# 'scripts/bumpfee.py', |
||||
# 'scripts/genwallet.py', |
||||
# 'scripts/jmwalletd.py', |
||||
# 'scripts/joinmarketd.py', |
||||
# 'scripts/joinmarket-qt.py', |
||||
# 'scripts/receive-payjoin.py', |
||||
# 'scripts/sendpayment.py', |
||||
# 'scripts/sendtomany.py', |
||||
'scripts/start-dn.py', |
||||
# 'scripts/tumbler.py', |
||||
#'scripts/wallet-tool.py', |
||||
# 'scripts/yg-privacyenhanced.py', |
||||
#'scripts/yield-generator-basic.py', |
||||
] |
||||
|
||||
|
||||
hiddenimports = [ |
||||
'chromalog.mark.helpers', |
||||
'chromalog.mark.helpers.simple', |
||||
'twisted.plugins', |
||||
# 'twisted.plugins.autobahn_endpoints', |
||||
# 'twisted.plugins.autobahn_twistd', |
||||
'twisted.plugins.txtorcon_endpoint_parser', |
||||
] |
||||
|
||||
|
||||
a = {} |
||||
pyz = {} |
||||
exe = {} |
||||
|
||||
|
||||
for s in scripts: |
||||
a[s] = Analysis( |
||||
[s], |
||||
pathex=[], |
||||
binaries=binaries, |
||||
datas=datas, |
||||
hiddenimports=hiddenimports, |
||||
hookspath=[], |
||||
hooksconfig={}, |
||||
runtime_hooks=[], |
||||
excludes=[], |
||||
noarchive=False, |
||||
optimize=0, |
||||
) |
||||
|
||||
pyz[s] = PYZ(a[s].pure) |
||||
|
||||
exe[s] = EXE( |
||||
pyz[s], a[s].scripts, [], |
||||
name=Path(s).stem, |
||||
exclude_binaries=True, debug=False, bootloader_ignore_signals=False, |
||||
strip=False, upx=True, console=True, disable_windowed_traceback=False, |
||||
argv_emulation=False, target_arch=None, codesign_identity=None, |
||||
entitlements_file=None, |
||||
) |
||||
|
||||
coll = COLLECT( |
||||
*list(exe.values()), |
||||
list(set(itertools.chain.from_iterable(b.binaries for b in a.values()))), |
||||
list(set(itertools.chain.from_iterable(d.datas for d in a.values()))), |
||||
strip=False, |
||||
upx=True, |
||||
upx_exclude=[], |
||||
name='joinmarket-clientserver', |
||||
) |
||||
Loading…
Reference in new issue