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 +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