Skip to content
This repository has been archived by the owner on Feb 1, 2023. It is now read-only.

Commit

Permalink
Merge pull request #193 from firstlookmedia/develop
Browse files Browse the repository at this point in the history
Version 0.3.5
  • Loading branch information
micahflee authored Dec 2, 2019
2 parents 800314d + f18bca5 commit 819a170
Show file tree
Hide file tree
Showing 14 changed files with 534 additions and 75 deletions.
249 changes: 225 additions & 24 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -1,36 +1,237 @@
workflows:
version: 2
test:
jobs:
- test
version: 2
version: 2.1

jobs:

test:
environment:
FLM_ENV: "test"
docker:
- image: circleci/python:3-stretch-node-browsers
- image: circleci/python:3.7-buster
steps:
- run:
name: Install dependencies
command: |
sudo apt-get update
sudo apt-get install -y gnupg2 python3-pyqt5 tor xvfb
- run:
name: Start tor service
command: sudo service tor start
- checkout
- run:
name: Install python dependencies
command: pipenv install --dev
- run:
name: Run tests
command: pipenv run xvfb-run -s "-screen 0 1280x1024x24" python setup.py pytest

build-ubuntu-bionic:
docker:
- image: ubuntu:18.04
steps:
- run:
name: Install dependencies
command: |
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y git ssh ruby-dev rubygems build-essential fakeroot python-all python3-all dh-python python3-pyqt5 python3-stdeb python3-requests python3-socks python3-packaging python3-dateutil python3-pytest python3-pytest-runner gnupg2
gem install --no-ri --no-rdoc rake
gem install --no-ri --no-rdoc package_cloud
- checkout
- run:
name: Create the .deb package
command: |
./install/build_deb.sh
dpkg -i deb_dist/gpgsync_*.deb
- run:
name: Deploy to packagecloud.io
command: |
VERSION=$(cat share/version |cut -dv -f2)
package_cloud push firstlookmedia/code/ubuntu/bionic deb_dist/gpgsync_${VERSION}-1_all.deb
package_cloud push firstlookmedia/code/ubuntu/bionic deb_dist/gpgsync_${VERSION}-1.dsc
build-ubuntu-disco:
docker:
- image: ubuntu:19.04
steps:
- run:
name: Install dependencies
command: |
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y git ssh ruby-dev rubygems build-essential fakeroot python-all python3-all dh-python python3-pyqt5 python3-stdeb python3-requests python3-socks python3-packaging python3-dateutil python3-pytest python3-pytest-runner gnupg2
gem install --no-ri --no-rdoc rake
gem install --no-ri --no-rdoc package_cloud
- checkout
- run:
name: Create the .deb package
command: |
./install/build_deb.sh
dpkg -i deb_dist/gpgsync_*.deb
- run:
name: Deploy to packagecloud.io
command: |
VERSION=$(cat share/version |cut -dv -f2)
package_cloud push firstlookmedia/code/ubuntu/disco deb_dist/gpgsync_${VERSION}-1_all.deb
package_cloud push firstlookmedia/code/ubuntu/disco deb_dist/gpgsync_${VERSION}-1.dsc
build-ubuntu-eoan:
docker:
- image: ubuntu:19.10
steps:
- run:
name: Install dependencies
command: |
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y git ssh ruby-dev rubygems build-essential fakeroot python-all python3-all dh-python python3-pyqt5 python3-stdeb python3-requests python3-socks python3-packaging python3-dateutil python3-pytest python3-pytest-runner gnupg2
gem install --no-ri --no-rdoc rake
gem install --no-ri --no-rdoc package_cloud
- checkout
- run:
name: Create the .deb package
command: |
./install/build_deb.sh
dpkg -i deb_dist/gpgsync_*.deb
- run:
name: Deploy to packagecloud.io
command: |
VERSION=$(cat share/version |cut -dv -f2)
package_cloud push firstlookmedia/code/ubuntu/eoan deb_dist/gpgsync_${VERSION}-1_all.deb
package_cloud push firstlookmedia/code/ubuntu/eoan deb_dist/gpgsync_${VERSION}-1.dsc
build-debian-buster:
docker:
- image: debian:buster
steps:
- run:
name: Install dependencies
command: |
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y git ssh ruby-dev rubygems build-essential fakeroot python-all python3-all dh-python python3-pyqt5 python3-stdeb python3-requests python3-socks python3-packaging python3-dateutil python3-pytest python3-pytest-runner gnupg2
gem install --no-ri --no-rdoc rake
gem install --no-ri --no-rdoc package_cloud
- checkout
- run:
name: Create the .deb package
command: |
./install/build_deb.sh
dpkg -i deb_dist/gpgsync_*.deb
- run:
name: Deploy to packagecloud.io
command: |
VERSION=$(cat share/version |cut -dv -f2)
package_cloud push firstlookmedia/code/debian/buster deb_dist/gpgsync_${VERSION}-1_all.deb
package_cloud push firstlookmedia/code/debian/buster deb_dist/gpgsync_${VERSION}-1.dsc
build-debian-bullseye:
docker:
- image: debian:bullseye
steps:
- run:
name: Install dependencies
command: |
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y git ssh ruby-dev rubygems build-essential fakeroot python-all python3-all dh-python python3-pyqt5 python3-stdeb python3-requests python3-socks python3-packaging python3-dateutil python3-pytest python3-pytest-runner gnupg2
gem install --no-ri --no-rdoc rake
gem install --no-ri --no-rdoc package_cloud
- checkout
- run:
name: Create the .deb package
command: |
./install/build_deb.sh
dpkg -i deb_dist/gpgsync_*.deb
- run:
name: Deploy to packagecloud.io
command: |
VERSION=$(cat share/version |cut -dv -f2)
package_cloud push firstlookmedia/code/debian/bullseye deb_dist/gpgsync_${VERSION}-1_all.deb
package_cloud push firstlookmedia/code/debian/bullseye deb_dist/gpgsync_${VERSION}-1.dsc
build-fedora-30:
docker:
- image: fedora:30
steps:
- run:
name: Verify python versions
name: Install dependencies
command: |
dnf install -y git openssh ruby-devel make automake gcc gcc-c++ rpm-build qt5-devel python3-qt5 python3-requests python3-pytest-runner python3-packaging python3-dateutil gnupg2
gem install package_cloud
- checkout
- run:
name: Create the .rpm package
command: |
./install/build_rpm.sh
dnf install -y dist/gpgsync-*-1.noarch.rpm
- run:
name: Deploy to packagecloud.io
command: |
python3 --version
pip --version
- run: sudo apt install gnupg2 python3-pyqt5 tor
VERSION=$(cat share/version |cut -dv -f2)
package_cloud push firstlookmedia/code/fedora/30 dist/gpgsync-${VERSION}-1.noarch.rpm
package_cloud push firstlookmedia/code/fedora/30 dist/gpgsync-${VERSION}-1.src.rpm
build-fedora-31:
docker:
- image: fedora:31
steps:
- run:
name: Restart tor service
command: sudo service tor restart
name: Install dependencies
command: |
dnf install -y git openssh ruby-devel make automake gcc gcc-c++ rpm-build qt5-devel python3-qt5 python3-requests python3-pytest-runner python3-packaging python3-dateutil gnupg2
gem install package_cloud
- checkout
- run:
name: Install Python deps in a venv
name: Create the .rpm package
command: |
python3 -m venv venv
. venv/bin/activate
pip install -q --upgrade pip
pip install -r ./install/requirements.txt
pip install -r ./install/requirements-tests.txt
./install/build_rpm.sh
dnf install -y dist/gpgsync-*-1.noarch.rpm
- run:
name: run tests
name: Deploy to packagecloud.io
command: |
. venv/bin/activate
python setup.py pytest
VERSION=$(cat share/version |cut -dv -f2)
package_cloud push firstlookmedia/code/fedora/31 dist/gpgsync-${VERSION}-1.noarch.rpm
package_cloud push firstlookmedia/code/fedora/31 dist/gpgsync-${VERSION}-1.src.rpm
workflows:
version: 2
test:
jobs:
- test
build-tags:
jobs:
- build-ubuntu-bionic:
filters:
tags:
only: /^v.*/
branches:
ignore: /.*/
- build-ubuntu-disco:
filters:
tags:
only: /^v.*/
branches:
ignore: /.*/
- build-ubuntu-eoan:
filters:
tags:
only: /^v.*/
branches:
ignore: /.*/
- build-debian-buster:
filters:
tags:
only: /^v.*/
branches:
ignore: /.*/
- build-debian-bullseye:
filters:
tags:
only: /^v.*/
branches:
ignore: /.*/
- build-fedora-30:
filters:
tags:
only: /^v.*/
branches:
ignore: /.*/
- build-fedora-31:
filters:
tags:
only: /^v.*/
branches:
ignore: /.*/
39 changes: 15 additions & 24 deletions BUILD.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,20 @@

Install Xcode from the Mac App Store. Once it's installed, run it for the first time to set it up. Also, run this to make sure command line tools are installed: `xcode-select --install`. And finally, open Xcode, go to Preferences > Locations, and make sure under Command Line Tools you select an installed version from the dropdown. (This is required for installing Qt5.)

Download and install Python 3.7.4 from https://www.python.org/downloads/release/python-374/. I downloaded `python-3.7.4-macosx10.9.pkg`.
Download and install Python 3.8.0 from https://www.python.org/downloads/release/python-380/. I downloaded `python-3.8.0-macosx10.9.pkg`.

Install Qt 5.13.0 for macOS from https://www.qt.io/offline-installers. I downloaded `qt-opensource-mac-x64-5.13.0.dmg`. In the installer, you can skip making an account, and all you need is `Qt` > `Qt 5.13.0` > `macOS`.
Install Qt 5.13.2 for macOS from https://www.qt.io/offline-installers. I downloaded `qt-opensource-mac-x64-5.13.2.dmg`. In the installer, you can skip making an account, and all you need is `Qt` > `Qt 5.13.2` > `macOS`. (The Qt installer has not been notarized yet, so if you're running macOS Catalina, it will take a very long time to open the first time and you'll see an error. To get past it you'll need to right-click on the dmg file, choose Open, and when you see the popup saying the software can't be authenticated, click Open again.)

Now install some python dependencies with pip (note, there's issues building a .app if you install this in a virtualenv):
If you don't have it already, install pipenv (`pip3 install --user pipenv`). Then install dependencies:

```sh
pip3 install -r install/requirements.txt
pip3 install -r install/requirements-tests.txt
pip3 install -r install/requirements-macos.txt
pip3 install -r install/requirements-package.txt
pipenv install --dev
```

Here's how you run GPG Sync, without having to build an app bundle:

```sh
./dev_scripts/gpgsync
pipenv run ./dev_scripts/gpgsync
```

Here's how you build an app bundle:
Expand All @@ -42,24 +39,20 @@ Now you should have `dist/GPGSync-{version}.pkg`.

## Windows

Download Python 3.7.4, 32-bit (x86) from https://www.python.org/downloads/release/python-374/. I downloaded `python-3.7.4.exe`. When installing it, make sure to check the "Add Python 3.7 to PATH" checkbox on the first page of the installer.
Download Python 3.8.0, 32-bit (x86) from https://www.python.org/downloads/release/python-380/. I downloaded `python-3.8.0.exe`. When installing it, make sure to check the "Add Python 3.8 to PATH" checkbox on the first page of the installer.

Open a command prompt, cd to the gpgsync folder, and install dependencies with pip:
Open a command prompt and cd to the gpgsync folder. If you don't have it already, install pipenv (`pip install pipenv`). Then install dependencies:

```cmd
pip install -r install\requirements.txt
pip install -r install\requirements-tests.txt
pip install -r install\requirements-windows.txt
# skip this if you're building for distribution
pip install -r install\requirements-package.txt
pipenv install --dev
```

Install the Qt 5.13.0 from https://www.qt.io/download-open-source/. I downloaded `qt-opensource-windows-x86-5.13.0.exe`. In the installer, you can skip making an account, and all you need `Qt` > `Qt 5.13.0` > `MSVC 2017 32-bit`.
Install the Qt 5.13.2 from https://www.qt.io/offline-installers. I downloaded `qt-opensource-windows-x86-5.13.2.exe`. In the installer, you can skip making an account, and all you need `Qt` > `Qt 5.13.2` > `MSVC 2017 32-bit`.

After that you can launch GPG Sync during development with:

```
python dev_scripts\gpg_sync --debug
pipenv run python dev_scripts\gpgsync -v
```

### To make a .exe:
Expand Down Expand Up @@ -232,16 +225,16 @@ Note that one of the tests will fail if you don't have SOCKS5 proxy server liste

# Release instructions

This section documents the release process. Unless you're a GPG Developer developer making a release, you'll probably never need to follow it.
This section documents the release process. Unless you're a GPG Sync developer making a release, you'll probably never need to follow it.

## Changelog, version, and signed git tag

Before making a release, all of these should be complete:

- `share/version` should have the correct version
- `install/gpgsync.nsi` should have the correct version, for the Windows installer
- CHANGELOG.md should be updated to include a list of all major changes since the last release
- There must be a PGP-signed git tag for the version, e.g. for GPG Sync 0.3.4, the tag must be v0.3.4
- `CHANGELOG.md` should be updated to include a list of all major changes since the last release
- There must be a PGP-signed git tag for the version, e.g. for GPG Sync 0.3.4, the tag must be `v0.3.4`

The first step for the macOS and Windows releases is the same:

Expand All @@ -264,7 +257,7 @@ To make a macOS release, go to macOS build machine:

- Build machine should be running macOS 10.13
- Verify and checkout the git tag for this release
- Run `./install.build_app.sh`; this will make `dist/GPG Sync.app` but won't codesign it
- Run `./install/build_app.sh`; this will make `dist/GPG Sync.app` but won't codesign it
- Copy `dist/GPG Sync.app` from the build machine to the `dist` folder on the release machine

Then move to the macOS release machine:
Expand All @@ -278,8 +271,6 @@ Then move to the macOS release machine:
- Wait for it to get approved, check status with: `xcrun altool --notarization-history 0 -u "micah@firstlook.org" -p "@keychain:gpgsync-notarize"`
- After it's approved, staple the ticket: `xcrun stapler staple GPGSync-$VERSION.pkg`

- Copy `GPGSync-$VERSION.pkg` to developer machine

This process ends up with the final file:

```
Expand All @@ -305,5 +296,5 @@ gpgsync-$VERSION-setup.exe

To publish the release:

- Create a new release on GitHub, put the changelog in the description of the release, and the Windows and macOS installers
- Create a new release on GitHub, put the changelog in the description of the release, and upload the Windows and macOS installers
- Make a PR to [homebrew-cask](https://github.com/homebrew/homebrew-cask) to update the macOS version
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# GPG Sync Changelog

## 0.3.5

* Notarized package in macOS
* Better linux packaging
* Better python dependency management

## 0.3.4

* Uses modern keyserver, keys.openpgp.org, by default
Expand Down
Loading

0 comments on commit 819a170

Please sign in to comment.