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 +4 -4
- data/README.adoc +97 -16
- data/exe/lapidist +4 -1
- data/lib/lapidist/cli/command.rb +1 -1
- data/lib/lapidist/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 773e9ebed34c07250d220af82f23d30e29d5acc17b53ecda703f6f04aebf23ea
|
4
|
+
data.tar.gz: bbf57e5b58eba1a3750537fb00ed2db56f15876790643237d3fa1b64f2194efd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 409a9acfad520af56fcc6b83b957f59a821183dc623fde09e509fd907a19524c6e218067fe1399ab38f09a529629c7568c561ddc9009849c6033759d785a5059
|
7
|
+
data.tar.gz: 6d48023ce3cebba63b65acd6dd3499e9d5771e034e0794f7f46048d8bf9e62061e6734d28b1d4c56d6212ab4417d8d8e021b86783f9a1573401d5ee1db767a7a
|
data/README.adoc
CHANGED
@@ -1,33 +1,114 @@
|
|
1
1
|
= Lapidist: synchronized gem releases
|
2
2
|
|
3
|
-
|
3
|
+
== Scope
|
4
4
|
|
5
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
|
data/exe/lapidist
CHANGED
@@ -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
|
|
data/lib/lapidist/cli/command.rb
CHANGED
data/lib/lapidist/version.rb
CHANGED