From de5bbf4a852c07521f8fa27532e03e8b4daddb79 Mon Sep 17 00:00:00 2001 From: woodser Date: Sat, 8 May 2021 13:54:59 -0400 Subject: [PATCH] remove extra docs again (#56) --- docs/README.md | 4 - docs/build.md | 74 ----------- docs/dev-setup.md | 97 -------------- docs/edit_configurations.png | Bin 28447 -> 0 bytes docs/release-process.md | 242 ----------------------------------- docs/testing.md | 81 ------------ 6 files changed, 498 deletions(-) delete mode 100644 docs/README.md delete mode 100644 docs/build.md delete mode 100644 docs/dev-setup.md delete mode 100644 docs/edit_configurations.png delete mode 100644 docs/release-process.md delete mode 100644 docs/testing.md diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index e8c3e6c67d..0000000000 --- a/docs/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# Docs - -- [idea-import.md](idea-import.md): Import sources into IntelliJ IDEA (Bisq) -- haveno mockups.pdf: early UI mockup made by Woodser, to be used for inspiration. \ No newline at end of file diff --git a/docs/build.md b/docs/build.md deleted file mode 100644 index 499f06142b..0000000000 --- a/docs/build.md +++ /dev/null @@ -1,74 +0,0 @@ -## Building Bisq - -1. **Install Git LFS** - - Bisq uses Git LFS (Large File Storage) to track certain large binary files. Follow the instructions at https://git-lfs.github.com to install it, then run the following to command to verify the installation: - - ```sh - git lfs version - ``` - - You should see the version of Git LFS you installed, for example: - - ```sh - git-lfs/2.10.0 (GitHub; darwin amd64; go 1.13.6) - ``` - -2. **Clone Bisq** - - ```sh - git clone https://github.com/bisq-network/bisq - cd bisq - ``` - -3. **Pull LFS data** - - ```sh - git lfs pull - ``` - -4. **Build Bisq** - - On macOS and Linux, execute: - ```sh - ./gradlew build - ``` - - On Windows: - ```cmd - gradlew.bat build - ``` - - If you prefer to skip tests to speed up the building process, just append _-x test_ to the previous commands. - -### Important notes - -1. You do _not_ need to install Gradle to build Bisq. The `gradlew` shell script will install it for you, if necessary. - -2. Bisq currently works with JDK 11 only. JDK 12 and above are not supported. You can find out which - version you have with: - - ```sh - javac -version - ``` - -If you do not have JDK 11 installed, check out scripts in the [scripts](../scripts) directory or download it manually from https://jdk.java.net/archive/. - -## Running Bisq - -Once Bisq is installed, its executables will be available in the root project directory. Run **Bisq Desktop** as follows: - -On macOS and Linux: -```sh -./bisq-desktop -``` - -On Windows: -```cmd -bisq-desktop.bat -``` - -## See also - - - [Importing Bisq into IntelliJ IDEA](./idea-import.md) - - [Bisq development environment setup guide](./dev-setup.md) diff --git a/docs/dev-setup.md b/docs/dev-setup.md deleted file mode 100644 index 82e35aa868..0000000000 --- a/docs/dev-setup.md +++ /dev/null @@ -1,97 +0,0 @@ -# Bisq dev setup guide - -This guide describes how to set up a complete Bisq development environment running against a local Bitcoin regtest network. You'll run your own Bisq seed node, arbitration and trading instances in order to allow for end-to-end development and testing. - - -## Prerequisites - -Follow the instructions in [build.md](build.md) to build Bisq from source, and it is also recommended to follow the instructions in [idea-import.md](idea-import.md) to be able to run everything from within IntelliJ IDEA. Please also read and follow the instructions in [CONTRIBUTING.md](../CONTRIBUTING.md) prior to submitting any pull requests. - - -## Overview - -When developing Bisq, you usually want to use Bitcoin in **regtest** mode and do all networking on **localhost** instead of using the Tor network. Typically, you'll want an environment set up with the following components: - - - Bitcoin Core or bitcoind in regtest mode - - A local Bisq seed node - - A local Bisq arbitrator & mediator instance - - 2 local Bisq trading instances (BTC buyer and BTC seller for executing a trade) - -You'll set up each of these in the steps that follow. - - -## Run Bitcoin Core (or bitcoind) in regtest mode - -The regtest mode operates a local Bitcoin network on your computer. This environment is ideally suited for testing because you are able to create blocks on demand (no need to wait for confirmations) and you don't need to download the blockchain. By creating blocks you act like a miner and you can generate new Bitcoin. - -You can find more information about the Bitcoin regtest mode [here](https://bitcoin.org/en/developer-examples#regtest-mode). - -Navigate to the [bitcoin.conf](https://en.bitcoin.it/wiki/Running_Bitcoin#Bitcoin.conf_Configuration_File) file and set `regtest=1` and `peerbloomfilters=1`, or add `-regtest -peerbloomfilters=1` as a program arguments when starting Bitcoin Core. - -At first startup you need to create 101 blocks using the command `generatetoaddress 101 address`* from the terminal inside Bitcoin Core, where `address` value could be obtained with the command `getnewaddress`. 101 blocks are required because of the coin maturity (100 blocks) so you need one more to have at least 50 BTC available for spending. - -Example: - - generatetoaddress 101 bcrt1qhqn0t94uc269szakr4ez0zh7erdd6tlm4pv6mg - -Later you can create new blocks with `generatetoaddress 1 address`*. - -*If you are using Bitcoin Core v.0.18 or less, use instead `generate 1`. - -## Understand Bisq P2P network options - -For the local P2P network we prefer to use `localhost`, not the Tor network as it is much faster. But if needed you can combine any of the following combinations of Bitcoin network mode and P2P network mode: - - - localhost + regtest - - localhost + testnet - - localhost + mainnet - - Tor + regtest - - Tor + testnet - - Tor + mainnet - - -## Understand Bisq program arguments - -There are several program arguments required to run in development mode. - -Here is an overview: - - - `--baseCurrencyNetwork`: The BTC network to use. Possible values are: `BTC_REGTEST`, `BTC_TESTNET`, `BTC_MAINNET` (default) - - `--useLocalhostForP2P`: Uses localhost instead of Tor for Bisq P2P network - - `--nodePort`: Port number for localhost mode. For seed nodes there is a convention with the last digit is marking the network type and there is a list of hard coded seed nodes addresses (see: `DefaultSeedNodeAddresses.java`). For regtest: 2002 and 3002. For testnet 2001, 3001 and 4001 and for mainnet: 2000, 3000 and 4000. For normal nodes the port can be chosen freely. - - `--useDevPrivilegeKeys`: Important for dev testing to allow the developer key for arbitration registration - - `--appName`: Custom application name which is used for the data directory. It is important to separate your nodes to not interfere. If not set, it uses the default `Bisq` directory. - - -## Run Bisq seednode - -For localhost/regtest mode run the `SeedNodeMain` class or `./bisq-seednode` script in the root project dir with following program arguments: - - --baseCurrencyNetwork=BTC_REGTEST --useLocalhostForP2P=true --useDevPrivilegeKeys=true --nodePort=2002 --appName=bisq-BTC_REGTEST_Seed_2002 - - -### Run Bisq arbitrator/mediator instance - -For localhost/regtest mode run the `BisqAppMain` class or `./bisq-desktop` script in the root project dir with following program arguments: - - --baseCurrencyNetwork=BTC_REGTEST --useLocalhostForP2P=true --useDevPrivilegeKeys=true --nodePort=4444 --appName=bisq-BTC_REGTEST_arbitrator - -Once it has started up go to `Account` and click `CMD +n`. This will open a new tab for `Arbitration registration`. Select the tab and you will see a popup with a pre-filled private key. That is the developer private key (which is only valid if `--useDevPrivilegeKeys` is set) which allows you to register a new arbitrator. Follow the next screen and complete registration. -Next you have to register a mediator as well. Click `CMD + d`. This will open a new tab for `Mediator registration`. Follow the same steps as for the arbitrator registration before. Registration of legacy arbitrators was done with `CMD +n`. It is not needed anymore so we refer with the term arbitrator to the new arbitrator (or refund agent). - -_Note: You need only register once but if you have shut down all nodes (including seed node) you need to start up the arbitrator again after you start the seed node so the arbitrator re-publishes his data to the P2P network. After it has started up you can close it again. You cannot trade without having an arbitrator available._ - - -### Run two Bisq trade instances - -For localhost/regtest mode run the `BisqAppMain` class or `./bisq-desktop` script in the root project dir with following program arguments: - - --baseCurrencyNetwork=BTC_REGTEST --useLocalhostForP2P=true --useDevPrivilegeKeys=true --nodePort=5555 --appName=bisq-BTC_REGTEST_Alice - -and - - --baseCurrencyNetwork=BTC_REGTEST --useLocalhostForP2P=true --useDevPrivilegeKeys=true --nodePort=6666 --appName=bisq-BTC_REGTEST_Bob - -At this point you can now perform trades between Alice and Bob using your local regtest environment and test from both the buyer's and seller's perspective. You can also open disputes with `cmd+o` and see how the arbitration system works (run the arbitrator in that case as well). - -_Remember to generate a new block in the Bitcoin Core console after taking an offer using the command `generatetoaddress 1 address` to trigger a block confirmation._ diff --git a/docs/edit_configurations.png b/docs/edit_configurations.png deleted file mode 100644 index 993128335d0236a8d2c5c4e2434666b5bf2dc55f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28447 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 Rz{mVUTSH&HO!fJ@e+LhAtn~l@ diff --git a/docs/release-process.md b/docs/release-process.md deleted file mode 100644 index 77c5cb3300..0000000000 --- a/docs/release-process.md +++ /dev/null @@ -1,242 +0,0 @@ -# Release Process - -* Update translations [translation-process.md](translation-process.md#synchronising-translations). -* Update data stores [data-stores.md](data-stores.md#update-stores). -* Update bitcoinj checkpoint [bitcoinj-checkpoint](bitcoinj-checkpoint.md#update-checkpoint). -* Write release notes (see below). -* Webpage (Prepare PR) - * Update version number in: - * [_config.yml](https://github.com/bisq-network/bisq-website/blob/master/_config.yml) - - * Update currency list - in [market_currency_selector.html](https://github.com/bisq-network/bisq-website/blob/master/_includes/market_currency_selector.html) ( - use [MarketsPrintTool](https://github.com/bisq-network/bisq/blob/master/desktop/src/test/java/bisq/desktop/MarketsPrintTool.java) - to create HTML content). - -### Bisq maintainers, suggestion for writing release notes - -To be able to create release notes before you make the final release tag, you can temporarily create a local tag and -remove it afterwards again. - - git tag v(new version, e.g. 0.9.4) #create tag - git tag -d v(new version, e.g. 0.9.4) #delete tag - -Write release notes. git shortlog helps a lot, for example: - - git shortlog --no-merges v(current version, e.g. 0.9.3)..v(new version, e.g. 0.9.4) - -Generate list of authors: - - git log --format='- %aN' v(current version, e.g. 0.9.3)..v(new version, e.g. 0.9.4) | sort -fiu - -1. Prepare the release notes with major changes from user perspective. -2. Prepare a short version of the release notes for the in-app update popup - -### Basic preparations - -For releasing a new Bisq version you'll need Linux, Windows and macOS. You can use a virtualization solution -like [VirtualBox](https://www.virtualbox.org/wiki/Downloads) for this purpose. - -#### VirtualBox recommended configuration - -Although performance of VMs might vary based on your hardware configuration following setup works pretty well on macOS. - -Use VirtualBox > 6.1 with following configuration: - -* System > Motherboard > Base Memory: 4096 MB -* System > Processor > Processor(s): 2 CPUs -* System > Processor > Execution Cap: 90% -* Display > Screen > Video Memory: 128 MB -* Display > Screen > Scale Factor: 200% -* Display > Screen > HiDPI Support: Use unscaled HiDPI Output (checked) -* Display > Screen > Acceleration: Enable 3D acceleration (checked) - -##### Windows VM - -* Windows 10 64bit -* Recommended virtual disk size: 55 GB - -##### Linux VM - -* Ubuntu 16.04.4 64bit -* Recommended virtual disk size: 25 GB - -##### macOS VM - -* macOS X 10.11 (El Capitan) 64bit -* Recommended virtual disk size: 40 GB - -#### For every OS - -* Install latest security updates - -#### For Windows - -* Update AntiVirus Software and virus definitions -* Install [WiX toolset](https://wixtoolset.org/releases/) -* Run full AV system scan - -### Build release - -#### macOS - -To be able to generate a signed and notarized binary you have to have an Apple developer account and create the required -certificate and provisioning file before running the build. - -1. Make sure all version numbers are updated (update version variables and - run [replace_version_number.sh](https://github.com/bisq-network/bisq/blob/master/desktop/package/macosx/replace_version_number.sh)) - . - -2. Set environment variables to ~/.profile file or the like... (one time effort) - * `BISQ_GPG_USER`: e.g. export BISQ_GPG_USER=manfred@bitsquare.io - * `BISQ_SHARED_FOLDER`: shared folder that is used between your VM host and client system - * `BISQ_PACKAGE_SIGNING_IDENTITY`: e.g. "Developer ID Application: Christoph Atteneder (WQT93T6D6C)" - * `BISQ_PRIMARY_BUNDLE_ID`: e.g. "network.bisq.CAT" - * `BISQ_PACKAGE_NOTARIZATION_AC_USERNAME`: your Apple developer email address - * `BISQ_PACKAGE_NOTARIZATION_ASC_PROVIDER`: Your developer ID (e.g. WQT93T6D6C) - -3. Run `./gradlew --console=plain packageInstallers` - -Build output expected in shared folder: - -1. `Bisq-${NEW_VERSION}.dmg` macOS notarized and signed installer -2. `desktop-${NEW_VERSION}-all.jar.SHA-256` sha256 sum of fat jar -3. `jar-lib-for-raspberry-pi-${NEW_VERSION}.zip` Jar libraries for Raspberry Pi - -* Before building the other binaries install the generated Bisq app on macOS and verify that everything works as - expected. - -#### Linux - -1. Checkout the release tag in your VM - -2. Set environment variables to ~/.profile file or the like... (one time effort) - * `BISQ_SHARED_FOLDER`: shared folder that is used between your VM host and client system - -3. Run `./gradlew --console=plain packageInstallers` - -Build output expected: - -1. `bisq_${NEW_VERSION}-1_amd64.deb` package for distributions that derive from Debian -2. `bisq-${NEW_VERSION}-1.x86_64.rpm` package for distributions that derive from Redhat based distros -3. `desktop-${NEW_VERSION}-all.jar.SHA-256` sha256 sum of fat jar - -* Install and run generated package - -#### Windows - -To be able to generate a signed binary you have to apply and install a developer certificate before running the build. - -1. Checkout the release tag in your VM - -2. Set environment variables to ~/.profile file or the like... (one time effort) - * `BISQ_SHARED_FOLDER`: shared folder that is used between your VM host and client system - -3. Run `./gradlew --console=plain packageInstallers` - -Build output expected: - -1. `Bisq-${NEW_VERSION}.exe` Windows signed installer -2. `desktop-${NEW_VERSION}-all.jar.SHA-256` sha256 sum of fat jar - -* Install and run generated package - -### Sign release on macOS - -* Run [finalize.sh](https://github.com/bisq-network/bisq/blob/master/desktop/package/macosx/finalize.sh) - -Build output expected: - -1. `F379A1C6.asc` Sig key of Manfred Karrer -2. `5BC5ED73.asc` Sig key of Chris Beams -3. `29CDFD3B.asc`Sig key of Christoph Atteneder -4. `signingkey.asc` Fingerprint of key that was used for these builds -5. `Bisq-${NEW_VERSION}.dmg` macOS installer -6. `Bisq-${NEW_VERSION}.dmg.asc` Signature for macOS installer -7. `Bisq-64bit-${NEW_VERSION}.deb` Debian package -8. `Bisq-64bit-${NEW_VERSION}.deb.asc` Signature for Debian package -9. `Bisq-64bit-${NEW_VERSION}.rpm` Redhat based distro package -10. `Bisq-64bit-${NEW_VERSION}.rpm.asc` Signature for Redhat based distro package -11. `Bisq-64bit-${NEW_VERSION}.exe` Windows installer -12. `Bisq-64bit-${NEW_VERSION}.exe.asc` Signature for Windows installer - -* Run a AV scan over all files on the Windows VM where the files got copied over. - -### Final test - -* Make at least one mainnet test trade with some exotic currency to not interfere with real traders. - -### Tag and push release to master - -If all was successful: - -* commit changes of new version number (update version number for release of e.g. v1.5.0) -* create tag for the release - -``` - git tag -s v(new version, e.g. 1.5.0) -m"Release v(new version, e.g. 1.5.0)" -``` - -* Revert back to SNAPSHOT where necessary (change version variable (e.g. 1.5.0) in shell - script [insert_snapshot_version.sh](https://github.com/bisq-network/bisq/blob/master/desktop/package/macosx/insert_snapshot_version.sh) - and run it) and commit these changes. - -* Push all commits to master including the new tag - -``` - git push --tags origin master -``` - -### GitHub - -#### Upload preparations - -* Check the fingerprint of the pgp key which was used for signing in signingkey.asc (e.g. 29CDFD3B for Christoph - Atteneder) - -* Add all files including signingkey.asc and the gpg pub keys to GitHub release page - -* Check all uploaded files with [virustotal.com](https://www.virustotal.com) - -* Select the release tag as the source for the GitHub release. - -* Release on GitHub - -#### Post GitHub release - -* Apply “A newer version is already available! Please don’t use this version anymore.” to old GitHub releases. - -* Merge the webpage PR and check if they got deployed properly. - -* Start the Alert sender app (CMD + M) remove the old version and send the update message. Check the checkbox for - update, set the version number (e.g. 0.9.4) and add the short version of the release notes. - -* After sending the Update message leave it running for about 1 minute to give time for good propagation. - -* Make a backup of that alert sender app data directory - -* To support source code signature verification for Arch Linux download `Source code (tar.gz)`, sign it and upload - signature. - -``` - # sign source code bundle - gpg --digest-algo SHA256 --local-user $BISQ_GPG_USER --output bisq-${NEW_VERSION}.tar.gz.asc --detach-sig --armor bisq-${NEW_VERSION}.tar.gz - - # verify signature of source code bundle - gpg --digest-algo SHA256 --verify bisq-${NEW_VERSION}.tar.gz{.asc*,} -``` - -### Announce the release - -* Forum - -* Keybase (#general channel) - -* Twitter - -* Optionally reddit /r/Bisq - -* Notify @freimair so that he can start - updating [the Arch User Repository](https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=bisq-git) - -* Celebrate diff --git a/docs/testing.md b/docs/testing.md deleted file mode 100644 index 40158b891b..0000000000 --- a/docs/testing.md +++ /dev/null @@ -1,81 +0,0 @@ -# Bisq Testing Guide - -This guide describes the testing process performed prior to each release. - -## Prerequisites - -In order to take part in the testing process, you will need to do the following: - -- Build Bisq from source (see [build.md](build.md)) -- Setup a development/testing environment (see [Makefile](../Makefile) or [dev-setup.md](dev-setup.md)) -- Request access to [TestPad](https://bisq.ontestpad.com) (our test management tool) - -## Communication Channels - -If you would like to discuss and/or contribute to Bisq's testing effort, join us in the #testing channel within the [Bisq Keybase team](https://keybase.io/team/bisq). -Here you could also request access to TestPad (https://bisq.ontestpad.com). - -## Compensation - -Testing activities are eligible for [compensation](https://docs.bisq.network/dao/phase-zero.html#how-to-request-compensation). -When submitting a compensation request, please include links to artifacts on TestPad (results/reports) indicating the activities that were performed (e.g. tests that were executed), as well as any bugs that were discovered and entered as a result of testing. - -## Testing Process - -[TestPad](https://bisq.ontestpad.com) is used to manage and track the manual testing process. -For specific usage or functionality of TestPad, please see the flash card introduction within TestPad. - -### Definitions - -Some definitions within the context of TestPad and how they apply to our specific testing process: - -- **Project:** Defines a particular testing scope with relevant tests. -- **Script:** Each script is a collection of related tests that are intended to be used to test a particular component. -- **Folder:** Defines a group of scripts for each release. - -### Test Structure - -Tests are written using Behaviour-Driven Development (BDD) style syntax (given/when/then). -- **Given:** This states the preconditions that are assumed for the test. It is not a test step (one that requires a result to be recorded), but instead you must ensure the preconditions are satisfied in order to perform the test. -- **When:** This states the actions to be performed for the test. This also does not require a result to be recorded. -- **Then:** This states the expected results of the test. This requires a result to be recorded. - -### Testing Workflow - -Once logged in to TestPad, select the `Desktop Client` project from the left navigation menu. - -Each upcoming release will have a new folder created with applicable scripts that need to be executed. - -#### Executing a Script - -Test runs allow for tracking the results of test execution. Each script may have several test runs created in order to perform the tests on different environments (e.g. operating systems) and assigned to different people. An overview of all test runs for the release can be observed from the main project view, which allows you to quickly find test runs assigned to yourself. - -To execute a test run: - -1. Open the script to be executed. - -1. Hover over the applicable test run column and select the play button to start executing the test run. - -1. Follow the script and perform each test. - - - Select a status for each test. Select from one of the following statuses: - - - **Pass:** the test has passed successfully. - - **Fail:** there is an issue (defect) related to the test. - - **Blocked:** the test cannot be performed for a particular reason. - - **Query:** you are unsure about the test and require further information. - - **Exclude:** the test does not need to be performed for a particular reason. - - - If necessary, use the `Comments` field to add any comments, notes and actual test results. This is especially beneficial to provide details if a test did not pass. - - - If applicable, link an existing or create a new issue (defect) if it was found during the test run execution. - -### Creating Issues - -When creating issues, it is important to provide sufficient information describing the problem encountered. In addition to a clear and concise description, this may include attaching screenshots or log files if necessary so the assigned developer can identify and resolve the issue. - -### Testing Tips - -- **Test from a new users perspective.** In addition to looking for obvious errors, be on the lookout for any usability or workflow concerns. - -- **Reset the "don't show again" flags.** This will allow you to verify the popup messages are valid and appropriate.