lapidist 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9fc5ae63afead95bedeacb3bfeeea0936bc40bdaacc56349ff35bd4dd55c549a
4
- data.tar.gz: ebe06f83cd53b2173fb37a1ec739094cd856e3e07207dafef7fadc622a79864e
3
+ metadata.gz: 773e9ebed34c07250d220af82f23d30e29d5acc17b53ecda703f6f04aebf23ea
4
+ data.tar.gz: bbf57e5b58eba1a3750537fb00ed2db56f15876790643237d3fa1b64f2194efd
5
5
  SHA512:
6
- metadata.gz: b8884c32ef89f516a8411e9496f33dce6de54ae04f6dfd37c1e31f63fe8f8301b8606a6bf6cddfabc90ecda3e2a9d84d352ae4cd6fda9880f297f3ef450f9b12
7
- data.tar.gz: d6254f7de0c65f96e651a09df170f15845a509805a56660f9b03c6880c2b8d927461f486cb39bf2726f2e43d130cf9ff0a28aec28759e0c2d1d2546a237f6aed
6
+ metadata.gz: 409a9acfad520af56fcc6b83b957f59a821183dc623fde09e509fd907a19524c6e218067fe1399ab38f09a529629c7568c561ddc9009849c6033759d785a5059
7
+ data.tar.gz: 6d48023ce3cebba63b65acd6dd3499e9d5771e034e0794f7f46048d8bf9e62061e6734d28b1d4c56d6212ab4417d8d8e021b86783f9a1573401d5ee1db767a7a
@@ -1,33 +1,114 @@
1
1
  = Lapidist: synchronized gem releases
2
2
 
3
- TODO.
3
+ == Scope
4
4
 
5
- == Installation
5
+ Certain projects are dependent on the interoperability of a web of gems.
6
+ Changes to dependent gems, especially ones closer to the root, can cause
7
+ many of the downstream gems to need upgrading.
6
8
 
7
- Add this line to your application's Gemfile:
9
+ For example, a release of Metanorma spans over 50 gems. Changes to
10
+ an underlying gem like https://github.com/metanorma/metanorma[`metanorma`]
11
+ will require all downstream gems to re-run all tests.
8
12
 
9
- [source,ruby]
10
- ----
11
- gem 'lapidist'
12
- ----
13
+ This software is created to simplify the release procedure of dependent
14
+ gems. It provides methods to:
13
15
 
14
- And then execute:
16
+ * Define this dependent web of gems
17
+ * Synchronized gem testing among this dependent web of gems
18
+ * Synchronized release of these gems (with version increments)
15
19
 
16
- [source,sh]
17
- ----
18
- $ bundle
19
- ----
20
20
 
21
- Or install it yourself as:
21
+ == Terms and definitions
22
+
23
+ leaf gem:: a gem that is no other software is dependent on
24
+ dependent gem:: a gem that other gems depend on
25
+ root gem:: a gem that does not depend on any other gem in the defined gem web
26
+ gem net:: a coherent set of gems that needs to interoperate and that requires synchronized releasing
27
+ caught gem:: gem under the release control of the releaser
28
+ release repository:: git repository or directory used for the releasing process
29
+
30
+ == Features
31
+
32
+ . Integration testing
33
+ ** all downstream gems can test against the work-in-progress upstream gems
34
+ ** management of `Gemfile` and `gemspec` version control
35
+
36
+ . Release process
37
+ ** automatic version bumps for gems
38
+ ** synchronized pushes of feature branches across gems
39
+ ** creation of PRs across gems
40
+ ** synchronized release of gems
41
+
42
+
43
+ == Usage
44
+
45
+ === Flow
46
+
47
+ This is a "`composite-git-flow`" kind of process.
48
+ Maybe it's called `git gush` or `git cascade`.
49
+
50
+ The typical scenario is:
51
+
52
+ . A leaf gem needs enhancing
53
+
54
+ . A leaf gem requires a dependent gem to be updated
55
+
56
+ . A dependent gem update means the testing on all its downstream gems needs to be updated
57
+
58
+ This is how the release flow looks like.
59
+
60
+
61
+
62
+ === Create a repository with all gem sources
63
+
64
+ For example, the https://github.com/metanorma/metanorma-release[`metanorma-release` repository]
65
+ is a Lapidist-compatible release repository.
66
+
67
+ It contains the source code for all gems in the Metanorma "`gem net`",
68
+ each separated into its own directory at the root-level.
69
+
70
+
71
+ === Updating code and integrated testing
72
+
73
+ . Go to the release repository
74
+
75
+ . Run a command to create feature branches in all gems. (TODO: what is the command?)
76
+
77
+ . Do the necessary work in the gem source code directory. (e.g. `isodoc` and `metanorma-iso`)
78
+
79
+ . Run a script that performs tests on all the gems at once using the newly created feature branches (TODO: what is the command?)
80
+
81
+ .. (alt) if you want Travis to test for you, push the release repository, and Travis will build for you. (assuming the release repository is git managed and/or submoduled, like `metanorma-release`)
82
+
83
+ . When all the gems pass, run a script to make PRs to every repository. (TODO: what is the command?)
84
+
85
+ .. If the feature branch for a gem is empty, the script will ignore it.
86
+
87
+ . Merge PRs by hand or by script (into master or a release branch) (TODO: what is the command?)
88
+
89
+
90
+ === Releasing
91
+
92
+ . When a release branch is ready (for all gems), run a script to: (TODO: what is the command?)
93
+ .. Bump version of those gems (`VERSION` variable in code)
94
+ .. Update the ``Gemfile``s (remove feature branches)
95
+ .. Update ``gemspec``s to lock versions
96
+
97
+ . Issue PRs for those gems to merge their release branches into `master`. (TODO: what is the command?)
98
+
99
+ . Merge the release PRs by hand or by script. (TODO: what is the command?)
100
+
101
+ Ideally, we want to update the base gems first, then the immediately dependent gems, and so forth to ensure that the builds always pass.
102
+
103
+
104
+
105
+ == Installation
22
106
 
23
107
  [source,sh]
24
108
  ----
25
109
  $ gem install lapidist
26
110
  ----
27
111
 
28
- == Usage
29
-
30
- TODO: Write usage instructions here
31
112
 
32
113
  == Development
33
114
 
@@ -48,7 +48,7 @@ def common_opts(opts, options)
48
48
  end
49
49
  end
50
50
 
51
- subcommands = {
51
+ subcommands = {
52
52
  'start' => OptionParser.new do |opts|
53
53
  opts.banner = "Usage: ci-master sync [options]"
54
54
 
@@ -61,6 +61,7 @@ subcommands = {
61
61
  options[:gems] = gems
62
62
  end
63
63
  end,
64
+
64
65
  'rake' => OptionParser.new do |opts|
65
66
  opts.banner = "Usage: ci-master rake [options]"
66
67
 
@@ -70,6 +71,7 @@ subcommands = {
70
71
  options[:branch] = branch
71
72
  end
72
73
  end,
74
+
73
75
  'finish' => OptionParser.new do |opts|
74
76
  opts.banner = "Usage: ci-master bump [options]"
75
77
 
@@ -79,6 +81,7 @@ subcommands = {
79
81
  options[:branch] = branch
80
82
  end
81
83
  end,
84
+
82
85
  'release' => OptionParser.new do |opts|
83
86
  opts.banner = "Usage: ci-master do [options]"
84
87
 
@@ -1,4 +1,4 @@
1
- require_relative "../../tool"
1
+ require_relative "../../lapidist"
2
2
 
3
3
  module Lapidist
4
4
  module Cli
@@ -1,3 +1,3 @@
1
1
  module Lapidist
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lapidist
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.