actions-updater 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +7 -0
  2. data/VERSION +1 -0
  3. data/bin/actions-updater +35 -0
  4. data/lib/action.rb +57 -0
  5. metadata +46 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 821d7ec0b1fbeec3f09f50c033b24ac1f3b252ddda31324e14556063c388a6c7
4
+ data.tar.gz: 63bda3da8ae237bb029caa895d864eaad3c1fe5be5b478bb7e97448aebe5773f
5
+ SHA512:
6
+ metadata.gz: a54de5dcee46094b81b77619b86c304ea07a11dabe60b26072e4dc298b9c2e35148d5c316e7f64af5f37af57cb5d1fa9ed36f09bd2516b9e0217991d99ac0e71
7
+ data.tar.gz: 1896f326dc1f8142aad9c1ab9a0610cae407384aaec7a324cb85490a20ad748e8e86c320bf32ddeb728760ad7506c75d940bd4824542621e94d1ea77d3ee8dd5
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.4
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'optparse'
5
+ require 'action'
6
+
7
+ OptionParser.new do |parser|
8
+ parser.version = File.read("#{__dir__}/../VERSION")
9
+ parser.banner += ' workflows ...'
10
+ parser.on('-n', '--newer', 'deal only with actions that have an update') do
11
+ @newer = true
12
+ end
13
+ parser.on('-w', '--write', 'write updates back to workflow files') do
14
+ @write = true
15
+ end
16
+ end.parse!
17
+
18
+ ARGV.each do |path|
19
+ puts "==> #{path}"
20
+ yaml = File.read(path)
21
+ actions = Action.array_from_yaml(yaml)
22
+ actions.each do |current_action|
23
+ new_action = current_action.clone
24
+ new_action.ref = current_action.latest_tag
25
+
26
+ next if current_action == new_action && @newer
27
+
28
+ puts "#{current_action} -> #{new_action}"
29
+
30
+ next unless @write
31
+
32
+ yaml.gsub!(/#{current_action}/, new_action.to_s)
33
+ File.open(path, 'w') { |f| f.puts yaml }
34
+ end
35
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yaml'
4
+
5
+ class Action
6
+ attr_accessor :user, :repo, :dir, :ref
7
+ attr_reader :url
8
+
9
+ USES_REGEX = %r{^(?<user>[^/]+)[/](?<repo>[^/]+)[/]?(?<dir>.+)?[@](?<ref>.+)$}.freeze
10
+ TAGS_REGEX = %r{refs/tags/(.*)$}.freeze
11
+ DOMAIN = 'https://github.com'
12
+ TAG_REJECT_REASONS = %w[
13
+ alpha
14
+ beta
15
+ rc
16
+ ^{}
17
+ ].freeze
18
+
19
+ def self.array_from_yaml(yaml)
20
+ hash = YAML.safe_load(yaml)
21
+ useses = hash['jobs'].values.map do |job|
22
+ job['steps'].map do |step|
23
+ step['uses']
24
+ end
25
+ end
26
+ useses.flatten.compact.uniq.map do |uses|
27
+ new(uses)
28
+ end
29
+ end
30
+
31
+ def initialize(uses)
32
+ captures = uses.match(USES_REGEX).named_captures
33
+ @user = captures['user']
34
+ @repo = captures['repo']
35
+ @dir = captures['dir']
36
+ @ref = captures['ref']
37
+ @url = "#{DOMAIN}/#{@user}/#{@repo}"
38
+ end
39
+
40
+ def to_s
41
+ "#{@user}/#{@repo}#{@dir ? '/' : ''}#{@dir}#{@ref ? '@' : ''}#{@ref}"
42
+ end
43
+
44
+ def ==(other)
45
+ to_s == other.to_s
46
+ end
47
+
48
+ def latest_tag
49
+ tags = `git ls-remote -t #{@url}`.scan(TAGS_REGEX).flatten
50
+ tags.reject! do |tag|
51
+ TAG_REJECT_REASONS.any? do |reason|
52
+ tag.include?(reason)
53
+ end
54
+ end
55
+ tags.last
56
+ end
57
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: actions-updater
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.4
5
+ platform: ruby
6
+ authors:
7
+ - Dawid Dziurla
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-12-06 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email:
15
+ executables:
16
+ - actions-updater
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - VERSION
21
+ - bin/actions-updater
22
+ - lib/action.rb
23
+ homepage: https://github.com/dawidd6/actions-updater
24
+ licenses:
25
+ - MIT
26
+ metadata: {}
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubygems_version: 3.0.6
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: Updater of used Github Actions in workflow files
46
+ test_files: []