Class: Kettle::Dev::GhaShaPinsCLI::PersistentActionCache
- Inherits:
-
Object
- Object
- Kettle::Dev::GhaShaPinsCLI::PersistentActionCache
- Defined in:
- lib/kettle/dev/gha_sha_pins_cli.rb
Overview
Persistent cache of GitHub Action release versions and target SHAs.
Constant Summary collapse
- VERSION =
1
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(path:, ttl_seconds: DEFAULT_CACHE_TTL_SECONDS, clock: -> { Time.now }) ⇒ PersistentActionCache
constructor
A new instance of PersistentActionCache.
- #to_h ⇒ Object
- #versions_for_repo(repo_ref, fresh: true) ⇒ Object
- #write_versions(repo_ref, versions) ⇒ Object
Constructor Details
#initialize(path:, ttl_seconds: DEFAULT_CACHE_TTL_SECONDS, clock: -> { Time.now }) ⇒ PersistentActionCache
Returns a new instance of PersistentActionCache.
909 910 911 912 913 914 |
# File 'lib/kettle/dev/gha_sha_pins_cli.rb', line 909 def initialize(path:, ttl_seconds: DEFAULT_CACHE_TTL_SECONDS, clock: -> { Time.now }) @path = path @ttl_seconds = ttl_seconds @clock = clock @data = nil end |
Class Method Details
.default_path ⇒ Object
901 902 903 904 905 906 907 |
# File 'lib/kettle/dev/gha_sha_pins_cli.rb', line 901 def self.default_path state_home = ENV["XDG_STATE_HOME"] state_home = File.join(Dir.home, ".local", "state") if state_home.to_s.empty? File.join(state_home, "kettle-dev", "gha-sha-pins-cache.json") rescue ArgumentError nil end |
Instance Method Details
#to_h ⇒ Object
960 961 962 |
# File 'lib/kettle/dev/gha_sha_pins_cli.rb', line 960 def to_h data end |
#versions_for_repo(repo_ref, fresh: true) ⇒ Object
916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 |
# File 'lib/kettle/dev/gha_sha_pins_cli.rb', line 916 def versions_for_repo(repo_ref, fresh: true) action = action_data(repo_ref) return nil unless action versions = action.fetch("versions", {}).values return nil if versions.empty? entries = if fresh versions.select { |entry| fresh_entry?(entry) } else versions end return nil if entries.empty? return nil if fresh && entries.length != versions.length entries.filter_map { |entry| deserialize_version_entry(entry) } .sort_by { |entry| entry[:version_obj] } .reverse end |
#write_versions(repo_ref, versions) ⇒ Object
936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 |
# File 'lib/kettle/dev/gha_sha_pins_cli.rb', line 936 def write_versions(repo_ref, versions) return if @path.to_s.empty? return if repo_ref.to_s.empty? action = data.fetch("actions")[repo_ref] ||= {} stored_versions = action["versions"] ||= {} = @clock.call.utc.iso8601 versions.each do |entry| version = entry[:version].to_s next if version.empty? stored_versions[version] = { "tag" => entry[:tag].to_s, "version" => version, "sha" => entry[:sha].to_s, "cached_at" => } end action["targets"] = target_cache(stored_versions.values) save! end |