sparkle_appcast 0.1.1 → 0.1.2
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.md +26 -4
- data/lib/sparkle_appcast/appcast.rb +35 -10
- data/lib/sparkle_appcast/cli.rb +15 -15
- data/lib/sparkle_appcast/release_note.rb +4 -2
- data/lib/sparkle_appcast/rss.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 929419facdaf44c5ea9624ec0eb8229b099e5f63697bccffe903d077d9e90309
|
4
|
+
data.tar.gz: 0bb5d457ad0839d7896ebb3ed14a7343e2e6cfaa61da0d4e106e825e5c115ad5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0ae0f9ab4b47e86b7fc1c87345e2d34e6d4d44ea87f26a16222bf32bcd64397a2188441a7ccbad57b2c89afe73928efb68ca1269ee8032170393782d36e11de
|
7
|
+
data.tar.gz: 6a4fb943634c2e70dbff76dcab3c36a0e5d0efcf57f444fff4b6cec046560456a65a6b4fa51b74dba81ce87ee48eb9932cc21755858e71aa0bec818705231080
|
data/README.md
CHANGED
@@ -27,6 +27,10 @@ to create and update `appcast.xml` for [Sparkle](https://sparkle-project.org).
|
|
27
27
|
Create `appcast.xml` with an application archive at `FILE_PATH`.
|
28
28
|
The application archive file must contain exact one application bundle.
|
29
29
|
|
30
|
+
The value or content of each template-enabled key can include [Mustache](https://mustache.github.io/) style (``{{key}}``) template.
|
31
|
+
Each template is replaced with the value with the information of application bundle.
|
32
|
+
Use `info` command to list all possible template keys.
|
33
|
+
|
30
34
|
* `--key=KEY`
|
31
35
|
|
32
36
|
Path to DSA private key file. Required.
|
@@ -34,10 +38,12 @@ The application archive file must contain exact one application bundle.
|
|
34
38
|
* `--url=URL`
|
35
39
|
|
36
40
|
URL to the application archive file published. Required.
|
41
|
+
Template is enabled.
|
37
42
|
|
38
43
|
* `--release-note=RELEASE_NOTE`
|
39
44
|
|
40
|
-
Path to a release note text file in Markdown format. Required.
|
45
|
+
Path to a release note text file in [Markdown](https://daringfireball.net/projects/markdown/syntax) format. Required.
|
46
|
+
Template is enabled on the content of text file.
|
41
47
|
|
42
48
|
* `--output=OUTPUT`
|
43
49
|
|
@@ -47,7 +53,8 @@ The application archive file must contain exact one application bundle.
|
|
47
53
|
* `--title=TITLE`
|
48
54
|
|
49
55
|
Title for the release note. Optional.
|
50
|
-
Default to `
|
56
|
+
Default to `{{bundle_name}} {{bundle_short_version_string}} ({{bundle_version}})`
|
57
|
+
Template is enabled.
|
51
58
|
|
52
59
|
* `--publish-date=PUBLISH_DATE`
|
53
60
|
|
@@ -57,12 +64,27 @@ The application archive file must contain exact one application bundle.
|
|
57
64
|
* `--channel-title=CHANNEL_TITLE`
|
58
65
|
|
59
66
|
Title of the channel. Optional.
|
60
|
-
Default to `
|
67
|
+
Default to `{{bundle_name}} Changelog`.
|
68
|
+
Template is enabled.
|
61
69
|
|
62
70
|
* `--channel-description=CHANNEL_DESCRIPTION`
|
63
71
|
|
64
72
|
Description of the channel. Optional.
|
65
|
-
Default to `
|
73
|
+
Default to `Most recent changes with links to updates.`.
|
74
|
+
Template is enabled.
|
75
|
+
|
76
|
+
* `--channel-language=CHANNEL_LANGUAGE`
|
77
|
+
|
78
|
+
Language of the channel. Optional.
|
79
|
+
Default to `en`.
|
80
|
+
Template is enabled.
|
81
|
+
|
82
|
+
### `info [OPTIONS...] [FILE_PATH]`
|
83
|
+
|
84
|
+
Print information about the application bundle at `FILE_PATH`.
|
85
|
+
`FILE_PATH` can be either an application archive or application bundle.
|
86
|
+
|
87
|
+
Use `help info` for all possible options.
|
66
88
|
|
67
89
|
### `sign [OPTIONS...] [FILE_PATH]`
|
68
90
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require "mustache"
|
2
|
+
|
1
3
|
module SparkleAppcast
|
2
4
|
class Appcast
|
3
5
|
attr_reader :signer, :archive, :release_note, :url, :params
|
@@ -16,27 +18,50 @@ module SparkleAppcast
|
|
16
18
|
|
17
19
|
private
|
18
20
|
|
21
|
+
PARAMS_EXCLUDED_FROM_TEMPLATE = [
|
22
|
+
# The template is applied already to `description` value. See `base_params`.
|
23
|
+
:description,
|
24
|
+
:dsa_signature
|
25
|
+
]
|
26
|
+
|
19
27
|
def rss_params
|
28
|
+
@rss_params ||= base_params.inject({}) do |params, (key, value)|
|
29
|
+
unless PARAMS_EXCLUDED_FROM_TEMPLATE.include?(key)
|
30
|
+
case value
|
31
|
+
when String
|
32
|
+
value = Mustache.render(value, context)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
params[key] = value
|
36
|
+
params
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def base_params
|
20
41
|
{
|
21
|
-
|
22
|
-
|
23
|
-
|
42
|
+
# channel
|
43
|
+
channel_link: "{{feed_url}}",
|
44
|
+
|
45
|
+
# item
|
46
|
+
description: release_note.html(context),
|
24
47
|
publish_date: archive.created_at,
|
48
|
+
|
49
|
+
# enclosure
|
25
50
|
url: url,
|
26
51
|
length: archive.size,
|
27
|
-
version:
|
28
|
-
short_version_string:
|
29
|
-
minimum_system_version:
|
52
|
+
version: "{{bundle_version}}",
|
53
|
+
short_version_string: "{{bundle_short_version_string}}",
|
54
|
+
minimum_system_version: "{{minimum_system_version}}",
|
30
55
|
dsa_signature: dsa_signature
|
31
56
|
}.merge(params)
|
32
57
|
end
|
33
58
|
|
34
|
-
def title
|
35
|
-
"#{archive.bundle_info[:bundle_name]} #{archive.bundle_info[:bundle_short_version_string]} (#{archive.bundle_info[:bundle_version]})"
|
36
|
-
end
|
37
|
-
|
38
59
|
def dsa_signature
|
39
60
|
@dsa_signature ||= signer.sign(archive.data)
|
40
61
|
end
|
62
|
+
|
63
|
+
def context
|
64
|
+
@context ||= archive.bundle_info
|
65
|
+
end
|
41
66
|
end
|
42
67
|
end
|
data/lib/sparkle_appcast/cli.rb
CHANGED
@@ -10,25 +10,26 @@ module SparkleAppcast
|
|
10
10
|
end
|
11
11
|
|
12
12
|
desc "appcast FILE", "Create `appcast.xml` with an application archive file."
|
13
|
-
long_desc <<-END_OF_DESCRIPTION
|
14
|
-
Create `appcast.xml` with an application archive file.
|
15
|
-
The application archive file must contain exact one application bundle.
|
16
|
-
END_OF_DESCRIPTION
|
17
13
|
option :key, type: :string, required: true, desc: "Path to a DSA private key."
|
18
14
|
option :url, type: :string, required: true, desc: "URL to the application archive file published."
|
19
15
|
option :release_note, type: :string, required: true, desc: "Path to a release note text file in Markdown format."
|
20
16
|
option :output, type: :string, desc: "Path to an output `appcast.xml`."
|
21
|
-
option :title, type: :string, desc: "Title for the release note."
|
17
|
+
option :title, type: :string, default: "{{bundle_name}} {{bundle_short_version_string}} ({{bundle_version}})", desc: "Title for the release note."
|
22
18
|
option :publish_date, type: :string, desc: "Publish date time in local timezone."
|
23
|
-
option :channel_title, type: :string, default: "
|
24
|
-
option :channel_description, type: :string, default: "
|
19
|
+
option :channel_title, type: :string, default: "{{bundle_name}} Changelog", desc: "Title of the channel."
|
20
|
+
option :channel_description, type: :string, default: "Most recent changes with links to updates.", desc: "Description of the channel."
|
21
|
+
option :channel_language, type: :string, default: "en", desc: "Language of the channel."
|
25
22
|
def appcast(file)
|
26
|
-
params = {
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
23
|
+
params = {}
|
24
|
+
[
|
25
|
+
:title,
|
26
|
+
:publish_date,
|
27
|
+
:channel_title,
|
28
|
+
:channel_description,
|
29
|
+
:channel_language
|
30
|
+
].each do |key|
|
31
|
+
params[key] = options[key] if options[key] && !options[key].empty?
|
32
|
+
end
|
32
33
|
|
33
34
|
appcast = Appcast.new(
|
34
35
|
Archive.new(file),
|
@@ -48,7 +49,7 @@ module SparkleAppcast
|
|
48
49
|
end
|
49
50
|
end
|
50
51
|
|
51
|
-
desc "info FILE", "Print
|
52
|
+
desc "info FILE", "Print information about the application bundle."
|
52
53
|
Bundle::INFO_KEYS.each do |key|
|
53
54
|
option key, type: :boolean, desc: "Print #{key}."
|
54
55
|
end
|
@@ -63,7 +64,6 @@ module SparkleAppcast
|
|
63
64
|
exclude_keys = []
|
64
65
|
Bundle::INFO_KEYS.each do |key|
|
65
66
|
case options[key]
|
66
|
-
when nil
|
67
67
|
when true
|
68
68
|
include_keys << key
|
69
69
|
when false
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require "mustache"
|
2
|
+
|
1
3
|
module SparkleAppcast
|
2
4
|
class ReleaseNote
|
3
5
|
def self.markdown(text)
|
@@ -10,8 +12,8 @@ module SparkleAppcast
|
|
10
12
|
@path = path
|
11
13
|
end
|
12
14
|
|
13
|
-
def html
|
14
|
-
|
15
|
+
def html(context = {})
|
16
|
+
self.class.markdown(Mustache.render(text, context))
|
15
17
|
end
|
16
18
|
|
17
19
|
def text
|
data/lib/sparkle_appcast/rss.rb
CHANGED
@@ -50,7 +50,7 @@ module SparkleAppcast
|
|
50
50
|
channel.add_element("title").add_text(params[:channel_title]) if params[:channel_title]
|
51
51
|
channel.add_element("description").add_text(params[:channel_description]) if params[:channel_description]
|
52
52
|
channel.add_element("link").add_text(params[:channel_link]) if params[:channel_link]
|
53
|
-
channel.add_element("language").add_text(params[:
|
53
|
+
channel.add_element("language").add_text(params[:channel_language]) if params[:channel_language]
|
54
54
|
|
55
55
|
# <item> ... </item>
|
56
56
|
channel.add_element("item").tap do |item|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sparkle_appcast
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yoshimasa Niwa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-02-
|
11
|
+
date: 2018-02-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: mustache
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: plist
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|