lapidist 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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.