onionshare/.circleci/config.yml
2022-04-19 21:14:04 -04:00

338 lines
12 KiB
YAML

version: 2.1
orbs:
win: circleci/windows@4.0.0
workflows:
version: 2
test_and_build:
jobs:
- test-cli
- test-gui
- build-win64:
requires:
- test-cli
- test-gui
- build-win32:
requires:
- test-cli
- test-gui
- build-macos:
requires:
- test-cli
- test-gui
# - build-snapcraft:
# requires:
# - test-cli
# - test-gui
jobs:
test-cli:
docker:
- image: cimg/python:3.9
working_directory: ~/repo
steps:
- checkout
- run:
name: Install dependencies
command: |
sudo apt-get update
sudo apt-get -y install tor obfs4proxy
pip install poetry
cd ~/repo/cli
poetry install
- run:
name: Run tests
command: |
cd ~/repo/cli
poetry run pytest -v ./tests
poetry run onionshare-cli --local-only ./tests --auto-stop-timer 2
poetry run onionshare-cli --local-only --receive --auto-stop-timer 2
poetry run onionshare-cli --local-only --website ../docs --auto-stop-timer 2
poetry run onionshare-cli --local-only --chat --auto-stop-timer 2
test-gui:
docker:
- image: cimg/python:3.9
working_directory: ~/repo
steps:
- checkout
- run:
name: Install dependencies
command: |
sudo apt-get update
sudo apt-get install -y tor obfs4proxy gcc python3-dev python3-pyside2.qtcore python3-pyside2.qtwidgets python3-pyside2.qtgui
sudo apt-get install -y xvfb x11-utils libxkbcommon-x11-0 libxcb-randr0-dev libxcb-xtest0-dev libxcb-xinerama0-dev libxcb-shape0-dev libxcb-xkb-dev libxcb-render-util0 libxcb-icccm4 libxcb-keysyms1 libxcb-image0
cd ~/repo/desktop
poetry install
- run:
name: Run tests
command: |
cd ~/repo/desktop
QT_DEBUG_PLUGINS=1 xvfb-run poetry run pytest -v ./tests/test_gui_*.py
build-win64:
executor:
name: win/default
shell: powershell.exe
steps:
- checkout
- run:
name: Install Python 3.9.12
command: |
choco install python3 --version=3.9.12
- run:
name: Install poetry
command: (Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py -UseBasicParsing).Content | python -
- run:
name: Install poetry dependencies
command: |
cd ~\project\desktop
poetry install
- run:
name: Download tor (Windows Expert Bundle)
command: |
mkdir ~\Downloads\tor
cd ~\Downloads\tor
$URL = "https://www.torproject.org/dist/torbrowser/11.0.10/tor-win32-0.4.6.10.zip"
$Filename = "tor-win32-0.4.6.10.zip"
$ExpectedHash = "d3f62317507dbe1a1aa74b9e0e03996dbded2143f94409270828f6a8bcdda16a"
Invoke-WebRequest -Uri $URL -OutFile $Filename
$FileHash = Get-FileHash $Filename
if($FileHash.Hash -ne $ExpectedHash) { throw "Invalid hash" }
Expand-Archive -LiteralPath tor-win32-0.4.6.10.zip -DestinationPath ~\project\desktop\onionshare\resources\tor
- run:
name: Build obfs4proxy
command: |
mkdir ~\Downloads\obfs4proxy
cd Downloads\obfs4proxy
git clone https://gitlab.com/yawning/obfs4
cd obfs4
go build .\obfs4proxy
Move-Item -Path .\obfs4proxy.exe -Destination ~\project\desktop\onionshare\resources\tor\Tor\obfs4proxy.exe
- run:
name: Build snowflake-client
command: |
go install git.torproject.org/pluggable-transports/snowflake.git/client@latest
Move-Item -Path ~\go\bin\client.exe -Destination ~\project\desktop\onionshare\resources\tor\Tor\snowflake-client.exe
- run:
name: Build meek-client
command: |
go install git.torproject.org/pluggable-transports/meek.git/meek-client@v0.37.0
Move-Item -Path ~\go\bin\meek-client.exe -Destination ~\project\desktop\onionshare\resources\tor\Tor\meek-client.exe
- run:
name: Build OnionShare
command: |
cd ~\project\desktop
poetry run python .\setup-freeze.py build
poetry run python .\scripts\build-windows.py cleanup-build
- run:
name: Compress
command: |
mv ~\project\desktop\build\exe.win-amd64-3.9\ ~\onionshare-win64
Compress-Archive -LiteralPath ~\onionshare-win64 -DestinationPath ~\onionshare-win64.zip
- store_artifacts:
path: ~\onionshare-win64.zip
build-win32:
executor:
name: win/default
shell: powershell.exe
steps:
- checkout
- run:
name: Install Python 3.9.12 (32-bit)
command: |
choco install python3 --params "/InstallDir32:C:\Python-32bit" --version=3.9.12
- run:
name: Install golang (32-bit)
command: |
cd ~\Downloads
Invoke-WebRequest -Uri https://go.dev/dl/go1.18.windows-386.msi -OutFile go1.18.windows-386.msi
msiexec.exe /i go1.18.windows-386.msi /quiet /L*V go-install.log
- run:
name: Install poetry (32-bit)
command: C:\Python-32bit\Scripts\pip install poetry
- run:
name: Install poetry dependencies
command: |
cd ~\project\desktop
C:\Python-32bit\Scripts\poetry install
- run:
name: Download tor (Windows Expert Bundle)
command: |
mkdir ~\Downloads\tor
cd ~\Downloads\tor
$URL = "https://www.torproject.org/dist/torbrowser/11.0.10/tor-win32-0.4.6.10.zip"
$Filename = "tor-win32-0.4.6.10.zip"
$ExpectedHash = "d3f62317507dbe1a1aa74b9e0e03996dbded2143f94409270828f6a8bcdda16a"
Invoke-WebRequest -Uri $URL -OutFile $Filename
$FileHash = Get-FileHash $Filename
if($FileHash.Hash -ne $ExpectedHash) { throw "Invalid hash" }
Expand-Archive -LiteralPath tor-win32-0.4.6.10.zip -DestinationPath ~\project\desktop\onionshare\resources\tor
- run:
name: Build obfs4proxy
command: |
mkdir ~\Downloads\obfs4proxy
cd Downloads\obfs4proxy
git clone https://gitlab.com/yawning/obfs4
cd obfs4
"C:\\Program Files (x86)\\Go\\bin\\go" build .\obfs4proxy
Move-Item -Path .\obfs4proxy.exe -Destination ~\project\desktop\onionshare\resources\tor\Tor\obfs4proxy.exe
- run:
name: Build snowflake-client
command: |
"C:\\Program Files (x86)\\Go\\bin\\go" install git.torproject.org/pluggable-transports/snowflake.git/client@latest
Move-Item -Path ~\go\bin\client.exe -Destination ~\project\desktop\onionshare\resources\tor\Tor\snowflake-client.exe
- run:
name: Build meek-client
command: |
"C:\\Program Files (x86)\\Go\\bin\\go" install git.torproject.org/pluggable-transports/meek.git/meek-client@v0.37.0
Move-Item -Path ~\go\bin\meek-client.exe -Destination ~\project\desktop\onionshare\resources\tor\Tor\meek-client.exe
- run:
name: Build OnionShare
command: |
cd ~\project\desktop
C:\Python-32bit\Scripts\poetry run python .\setup-freeze.py build
C:\Python-32bit\Scripts\poetry run python .\scripts\build-windows.py cleanup-build
- run:
name: Compress
command: |
mv ~\project\desktop\build\exe.win32-3.9\ ~\onionshare-win32
Compress-Archive -LiteralPath ~\onionshare-win32 -DestinationPath ~\onionshare-win32.zip
- store_artifacts:
path: ~\onionshare-win32.zip
build-macos:
macos:
xcode: 12.5.1
environment:
BUILD_PREFIX: /Users/distiller/root
steps:
- checkout
- run:
name: Make BUILD_PREFIX directory
command: mkdir $BUILD_PREFIX
- run:
name: Install Homebrew dependencies
command: |
brew install wget
brew install go
- run:
name: Build libevent
command: |
# Download and verify
cd ~/Downloads
URL=https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz
FILENAME=libevent-2.1.12-stable.tar.gz
EXPECTED_SHA256=92e6de1be9ec176428fd2367677e61ceffc2ee1cb119035037a27d346b0403bb
wget $URL
SHA256=$(shasum -a 256 $FILENAME | cut -d" " -f1)
if [ "$SHA256" != "$EXPECTED_SHA256" ]; then echo "Failed" && exit -1; fi
tar -xvf $FILENAME
# Build
cd libevent-2.1.12-stable
./configure --disable-openssl --prefix=$BUILD_PREFIX
make
make install
- run:
name: Build tor
command: |
# Download and verify
cd ~/Downloads
URL=https://dist.torproject.org/tor-0.4.6.10.tar.gz
FILENAME=tor-0.4.6.10.tar.gz
EXPECTED_SHA256=94ccd60e04e558f33be73032bc84ea241660f92f58cfb88789bda6893739e31c
wget $URL
SHA256=$(shasum -a 256 $FILENAME | cut -d" " -f1)
if [ "$SHA256" != "$EXPECTED_SHA256" ]; then echo "Failed" && exit -1; fi
tar -xvf $FILENAME
# Build
cd tor-0.4.6.10
./configure --prefix=$BUILD_PREFIX
make
make install
- run:
name: Build obfs4proxy
command: |
# Get source code
mkdir ~/Downloads/obfs4proxy
cd ~/Downloads/obfs4proxy
git clone https://gitlab.com/yawning/obfs4
cd obfs4
# Build
go build -o obfs4proxy ./obfs4proxy
- run:
name: Build snowflake-client
command: |
# Get source code
mkdir ~/Downloads/snowflake-client
cd ~/Downloads/snowflake-client
git clone https://git.torproject.org/pluggable-transports/snowflake.git
cd snowflake
# Build
go build -o snowflake-client ./client
- run:
name: Build meek-client
command: |
# Get source code
mkdir ~/Downloads/meek-client
cd ~/Downloads/meek-client
git clone https://git.torproject.org/pluggable-transports/meek.git
cd meek
# Build
go build -o meek-client ./meek-client
- run:
name: Install Python 3.9.12
command: |
wget https://www.python.org/ftp/python/3.9.12/python-3.9.12-macosx10.9.pkg -O ~/Downloads/python.pkg
sudo installer -pkg ~/Downloads/python.pkg -target /
- run:
name: Install poetry
command: |
pip3 install poetry
ln -s /Library/Frameworks/Python.framework/Versions/3.9/bin/poetry /usr/local/bin
- run:
name: Install poetry dependencies
command: |
cd ~/project/desktop
poetry install
- run:
name: Build OnionShare
command: |
cd ~/project/desktop
poetry run python ./setup-freeze.py build
poetry run python ./setup-freeze.py bdist_mac
poetry run python ./scripts/build-macos.py cleanup-build
- run:
name: Compress
command: |
cd ~/project/desktop/build
zip -r ~/onionshare-macos.zip OnionShare.app
- store_artifacts:
path: ~/onionshare-macos.zip
# build-snapcraft:
# docker:
# - image: snapcore/snapcraft:stable
# working_directory: ~/repo
# steps:
# - checkout
# - run:
# name: Install extra snaps without snapd
# command: |
# mkdir ~/tmp
# install_snap () { cd ~/tmp && snap download $1 && mkdir -p /snap/$1 && unsquashfs -d /snap/$1/current *.snap && rm ~/tmp/*; }
# install_snap "core18"
# install_snap "go"
# install_snap "gnome-3-34-1804"
# install_snap "gnome-3-34-1804-sdk"
# - run:
# name: Build the snap
# command: |
# cd ~/repo
# snapcraft
# mv onionshare-*_amd64.snap ~/onionshare_amd64.snap
# - store_artifacts:
# path: ~/onionshare_amd64.snap