grin/doc/release_instruction.md
Yeastplume 5cb8025ddd
[1.1.0] Merge master into 1.1.0 (#2720)
* cleanup legacy "3 dot" check (#2625)

* Allow to peers behind NAT to get up to preferred_max connections (#2543)

Allow to peers behind NAT to get up to preffered_max connections

If peer has only outbound connections it's mot likely behind NAT and we should not stop it from getting more outbound connections

* Reduce usage of unwrap in p2p crate (#2627)

Also change store crate a bit

* Simplify (and fix) output_pos cleanup during chain compaction (#2609)

* expose leaf pos iterator
use it for various things in txhashset when iterating over outputs

* fix

* cleanup

* rebuild output_pos index (and clear it out first) when compacting the chain

* fixup tests

* refactor to match on (output, proof) tuple

* add comments to compact() to explain what is going on.

* get rid of some boxing around the leaf_set iterator

* cleanup

* [docs] Add switch commitment documentation (#2526)

* remove references to no-longer existing switch commitment hash

(as switch commitments were removed in ca8447f3bd
and moved into the blinding factor of the Pedersen Commitment)

* some rewording (points vs curves) and fix of small formatting issues

* Add switch commitment documentation

* [docs] Documents in grin repo had translated in Korean.  (#2604)

*  Start to M/W intro translate in Korean
*  translate in Korean
*  add korean translation  on intro
* table_of_content.md translate in Korean.
*  table_of_content_KR.md finish translate in Korean, start to translate State_KR.md
*  add state_KR.md & commit some translation in State_KR.md
*  WIP stat_KR.md translation
*  add build_KR.md && stratum_KR.md
*  finish translate stratum_KR.md & table_of_content_KR.md
*  rename intro.KR.md to intro_KR.md
*  add intro_KR.md file path each language's  intro.md
*  add Korean translation file path to stratum.md & table_of_contents.md
*  fix difference with grin/master

* Fix TxHashSet file filter for Windows. (#2641)

* Fix TxHashSet file filter for Windows.

* rustfmt

* Updating regexp

* Adding in test case

* Display the current download rate rather than the average when syncing the chain (#2633)

* When syncing the chain, calculate the displayed download speed using the current rate from the most recent iteration, rather than the average download speed from the entire syncing process.

* Replace the explicitly ignored variables in the pattern with an implicit ignore

* remove root = true from editorconfig (#2655)

* Add Medium post to intro (#2654)

Spoke to @yeastplume who agreed it makes sense to add the "Grin Transactions Explained, Step-by-Step" Medium post to intro.md

Open for suggestions on a better location.

* add a new configure item for log_max_files (#2601)

* add a new configure item for log_max_files

* rustfmt

* use a constant instead of multiple 32

* rustfmt

* Fix the build warning of deprecated trim_right_matches (#2662)

* [DOC] state.md, build.md and chain directory documents translate in Korean.  (#2649)

*  add md files for translation.

*  start to translation fast-sync, code_structure. add file build_KR.md, states_KR.md

* add dandelion_KR.md && simulation_KR.md for Korean translation.

*  add md files for translation.

*  start to translation fast-sync, code_structure. add file build_KR.md, states_KR.md

* add dandelion_KR.md && simulation_KR.md for Korean translation.

* remove some useless md files for translation. this is rearrange set up translation order.

*  add dot end of sentence & translate build.md in korean

*  remove fast-sync_KR.md

*  finish build_KR.md translation

*  finish build_KR.md translation

*  finish translation state_KR.md & add phrase in state.md to move other language md file

* translate blocks_and_headers.md && chain_sync.md in Korean

*  add . in chain_sync.md , translation finished in doc/chain dir.

* fix some miss typos

* Api documentation fixes (#2646)

* Fix the API documentation for Chain Validate (v1/chain/validate).  It was documented as a POST, but it is actually a GET request, which can be seen in its handler ChainValidationHandler
* Update the API V1 route list response to include the headers and merkleproof routes.  Also clarify that for the chain/outputs route you must specify either byids or byheight to select outputs.

* refactor(ci): reorganize CI related code (#2658)

Break-down the CI related code into smaller more maintainable pieces.

* Specify grin or nanogrins in API docs where applicable (#2642)

* Set Content-Type in API client (#2680)

* Reduce number of unwraps in chain crate (#2679)

* fix: the restart of state sync doesn't work sometimes (#2687)

* let check_txhashset_needed return true on abnormal case (#2684)

*  Reduce number of unwwaps in api crate  (#2681)

* Reduce number of unwwaps in api crate

* Format use section

* Small QoL improvements for wallet developers (#2651)

* Small changes for wallet devs

* Move create_nonce into Keychain trait

* Replace match by map_err

* Add flag to Slate to skip fee check

* Fix secp dependency

* Remove check_fee flag in Slate

* Add Japanese edition of build.md (#2697)

* catch the panic to avoid peer thread quit early (#2686)

* catch the panic to avoid peer thread quit before taking the chance to ban
* move catch wrapper logic down into the util crate
* log the panic info
* keep txhashset.rs untouched
* remove a warning

* [DOC] dandelion.md, simulation.md ,fast-sync.md and pruning.md documents translate in Korean. (#2678)

* Show response code in API client error message (#2683)

It's hard to investigate what happens when an API client error is
printed out

* Add some better logging for get_outputs_by_id failure states (#2705)

* Switch commitment doc fixes (#2645)

Fix some typos and remove the use of parentheses in a
couple of places to make the reading flow a bit better.

* docs: update/add new README.md badges (#2708)

Replace existing badges with SVG counterparts and add a bunch of new ones.

* Update intro.md (#2702)

Add mention of censoring attack prevented by range proofs

* use sandbox folder for txhashset validation on state sync (#2685)

* use sandbox folder for txhashset validation on state sync

* rustfmt

* use temp directory as the sandbox instead actual db_root txhashset dir

* rustfmt

* move txhashset overwrite to the end of full validation

* fix travis-ci test

* rustfmt

* fix: hashset have 2 folders including txhashset and header

* rustfmt

* 
(1)switch to rebuild_header_mmr instead of copy the sandbox header mmr 
(2)lock txhashset when overwriting and opening and rebuild

* minor improve on sandbox_dir

* add Japanese edition of state.md (#2703)

* Attempt to fix broken TUI locale (#2713)

Can confirm that on the same machine 1.0.2 TUI looks great and is broken on
the current master. Bump of `cursive` version fixed it for me.
Fixes #2676

* clean the header folder in sandbox (#2716)

* forgot to clean the header folder in sandbox in #2685

* Reduce number of unwraps in servers crate (#2707)

It doesn't include stratum server which is sufficiently changed in 1.1
branch and adapters, which is big enough for a separate PR.

* rustfmt

* change version to beta
2019-04-01 11:47:48 +01:00

7.4 KiB

Grin - Instruction of Release

Note: [totally draft doc! to be reviewed and discussed]

Version Number Rule

In Grin, we're using Semantic Versioning 2.0.0. For a short description of the rule:

A version number include MAJOR.MINOR.PATCH, and increment the:

  1. MAJOR version when you make incompatible API changes,
  2. MINOR version when you add functionality in a backwards-compatible manner, and
  3. PATCH version when you make backwards-compatible bug fixes.

And additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.

The examples of the release version of Grin:

  • 0.3.0
  • 0.3.1
  • 1.5.90

The examples of label of pre-release:

  • 1.0.0-alpha.1
  • 1.0.0-beta.2
  • 1.0.0-test.5

In Grin, build metadata is used as the build number which comes from the Travis-CI job ID of building jobs, it's an unique ID for each building. Note: for the moment, this metadata is only used in the name of the released binary, and it's auto generated, no need to set it manually.

Here is an example of the build metadata of Grin release version:

  • 0.3.1-430839304

And as the end of this section, here's an example of the whole encoded version string:

  • 0.3.1-pre.1-430839316

Release Files (Binaries)

So far, Grin support both Mac and Linux, and 64bits only. There're 2 binaries in one version release, plus md5 checksum for each binary.

For example:

  • grin-0.3.1-pre.1-430839316-oxs.tgz
  • grin-0.3.1-pre.1-430839316-oxs.tgz-md5sum.txt
  • grin-0.3.1-pre.1-430839318-linux-amd64.tgz
  • grin-0.3.1-pre.1-430839318-linux-amd64.tgz-md5sum.txt

Change Log of Release

Currently, Grin release is using automatic change log generating, thanks to github-changelog-generator. These change logs are fully automated generated, and normally there's no human editing on these change logs, but in case of any exception display on release page, we could do a little manual fixing on that.

The github changelog generator heavily rely on the Github project *issues, pull requests, so for achieving a good change log on each release, we have to follow some rules on the daily management of github issues and pull request.

And this changelog generator will collect all the github closed issues and merged pull-requests, since last tag.

Also it will give a link to fully compare this release with the previous tag in github.

Rules of Github Issue and Pull-Request Management

As said above, we have to define some basic rules for github issue and pull-request, but don't worry, it's quite simple!

Rules of Issue

The most important rule is to Distinguish Issues by Labels:

  • Label bug issues as bug
  • Label enhancement issues as enhancement

And all closed issues w/o label will be put into group "closed issues with no labels", which is definitely not so good.

As opposite, all closed issues with the following labels will be automatically excluded from the change log:

  • question
  • duplicate
  • invalid
  • wontfix

For more details, please run github_changelog_generator --help, or check its github repo: github-changelog-generator

Rules of Pull-Request

And regarding to merged pull-requests, it will be put into group "all merged pull-requests". And it's strongly recommended that each pull-request give a commit message with prefix:

  • feat: A new feature
  • fix: A bug fix
  • docs: Documentation only changes
  • style: Formatting, missing semi-colons, white-space, etc
  • refactor: A code change that neither fixes a bug nor adds a feature
  • perf: A code change that improves performance
  • test: Adding missing tests
  • chore: Maintain. Changes to the build process or auxiliary tools/libraries/documentation

These prefix are part of Angular.js commit message conventions, and you can take a look at the practice in Angular.js github project.

There's no need to fully follow Angular.js commit message conventions. We just need use these prefix in each pull-request's commit message, that's all. Perhaps a simple pull-request template can be set as default in Github.

Release Branches

Each time when Grin release a new version, there's definitely a tag there with same version number. But it's not mandatory to have a branch with this version release.

We define the following rules for the release branch:

  1. Only MAJOR.MINOR version could have a release branch, but also NOT mandatory.
  2. Only when a fix is needed for a MAJOR.MINOR version, we create a release branch on the name of MAJOR.MINOR from the tag of MAJOR.MINOR.0, and only one branch for all the fixes on this MAJOR.MINOR version.
  3. New version based on this release branch must have same MAJOR.MINOR version number, only .PATCH can be changed.

Release Instruction

1. TAG

To trigger a version release, the ONLY thing which need to do manually is to make a tag. As the owner of a github repo, he/she just need to run 2 commands locally:

git tag 0.3.1-pre1 -m "0.3.1 pre release 1"
git push origin 0.3.1-pre1

Done. Remember to replace 0.3.1-pre1 as the real version, and warmly remind the Version Number Rule. For official release, just use 0.3.1 or something like that.

If you're NOT the owner of the github repo, but at least you have to be a committer which has the right to do a release, the following steps are needed to trigger a version release:

  1. Go to release page of the repo, click Draft a new release, remember to check the branch is what you're working on! set the Tag version to the release number (for example: 0.3.1-pre1), and set anything in Release title and description, then click Publish release. Don't worry the title and description parts because we need delete it in next step.
  2. Because github release will be auto-created by our release-jobs building script, we MUST delete the release which we just created in previous step! (Unfortunately, there's no way to only create tag by web.)

Even normally Travis-CI need tens of minutes to complete building, I suggest you complete step 2 quickly, otherwise the release-jobs script will fail on error "release already exist".

2. Travis-CI Building

For building in both mac and Linux, we enabled the CI on both platforms, since we start doing this automatic binaries release.

The release building is just one of the TEST_DIRS, named as none. So each time when version release building is triggered, all those exising Travis-CI tests are also triggered, this design is for the CI test purpose and we hope this new added auto release script has no any impact on these existing CI tests.

So, the point is: the release building job is that one tagged with TEST_DIR=none.

Note: release-jobs script will only be executed on deploy stage, and according to Travis-CI, it will be skipped for any pull-request trigger, and since we set tag: true it will be only executed when triggered by a tag.

3. Check the Release Page

The last step is to check the Github release page, after Travis-CI complete the whole building, normally it need half an hour or one hour.