forked from git-lfs/git-lfs
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpackagecloud.rb
More file actions
executable file
·134 lines (121 loc) · 4.58 KB
/
packagecloud.rb
File metadata and controls
executable file
·134 lines (121 loc) · 4.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/usr/bin/env ruby
# Pushes all deb and rpm files from ./repos to PackageCloud.
packagecloud_user = ENV["PACKAGECLOUD_USER"] || "github"
packagecloud_token = ENV["PACKAGECLOUD_TOKEN"] || begin
puts "PACKAGECLOUD_TOKEN env required"
exit 1
end
require "json"
packagecloud_ruby_minimum_version = "1.0.4"
begin
gem "packagecloud-ruby", ">=#{packagecloud_ruby_minimum_version}"
require "packagecloud"
puts "Using packagecloud-ruby:#{Gem.loaded_specs["packagecloud-ruby"].version}"
rescue LoadError
puts "Requires packagecloud-ruby >=#{packagecloud_ruby_minimum_version}"
puts %(gem install packagecloud-ruby)
exit 1
end
credentials = Packagecloud::Credentials.new(packagecloud_user, packagecloud_token)
$client = Packagecloud::Client.new(credentials)
# matches package directories built by docker to one or more packagecloud distros
# https://packagecloud.io/docs#os_distro_version
$distro_name_map = {
# RHEL EOL https://access.redhat.com/support/policy/updates/errata
"centos/6" => [
"el/6", # End of Extended Support June 30, 2024
"scientific/6",
],
"centos/7" => [
"el/7",
"scientific/7",
# Fedora EOL check https://fedoraproject.org/wiki/End_of_life
# or https://en.wikipedia.org/wiki/Fedora_version_history#Version_history
"fedora/29", # EOL ~2020
"fedora/30", # EOL ~2020
# opensuse https://en.opensuse.org/Lifetime
# or https://en.wikipedia.org/wiki/OpenSUSE_version_history
"opensuse/15.1", # EOL 2020-11
# SLES EOL https://www.suse.com/lifecycle/
"sles/11.4", # LTSS ends 31 Mar 2022
"sles/12.1", # LTSS ends 31 May 2020
"sles/12.2", # LTSS ends 31 Mar 2021
"sles/12.3", # LTSS ends 30 Jun 2022
"sles/15.0" # Current
],
"centos/8" => [
"el/8",
"fedora/31", # EOL ~2021
],
# Debian EOL https://wiki.debian.org/LTS/
# Ubuntu EOL https://wiki.ubuntu.com/Releases
# Mint EOL https://linuxmint.com/download_all.php
"debian/8" => [
"debian/jessie", # EOL June 30, 2020
"ubuntu/trusty", # ESM April 2022
],
"debian/9" => [
"debian/stretch", # EOL June 2022
"linuxmint/sarah", # EOL April 2021
"linuxmint/serena", # EOL April 2021
"linuxmint/sonya", # EOL April 2021
"linuxmint/sylvia", # EOL April 2021
"linuxmint/tara", # EOL April 2023
"linuxmint/tessa", # EOL April 2023
"linuxmint/tina", # EOL April 2023
"linuxmint/tricia", # EOL April 2023
"ubuntu/xenial", # ESM April 2024
"ubuntu/bionic", # ESM April 2028
"ubuntu/disco", # EOL April 2020
],
"debian/10" => [
"debian/buster", # Current
"ubuntu/eoan", # EOL July 2020
"ubuntu/focal", # Current
]
}
# caches distro id lookups
$distro_id_map = {}
def distro_names_for(filename)
$distro_name_map.each do |pattern, distros|
return distros if filename.include?(pattern)
end
raise "no distro for #{filename.inspect}"
end
package_files = Dir.glob("repos/**/*.rpm") + Dir.glob("repos/**/*.deb")
package_files.each do |full_path|
next if full_path =~ /repo-release/
pkg = Packagecloud::Package.new(:file => full_path)
distro_names = distro_names_for(full_path)
distro_names.map do |distro_name|
distro_id = $distro_id_map[distro_name] ||= $client.find_distribution_id(distro_name)
if !distro_id
raise "no distro id for #{distro_name.inspect}"
end
puts "pushing #{full_path} to #{$distro_id_map.key(distro_id).inspect}"
result = $client.put_package("git-lfs", pkg, distro_id)
result.succeeded || begin
# We've already uploaded this package in an earlier invocation of this
# script and our attempt to upload over the existing package failed
# because PackageCloud doesn't allow that. Ignore the failure since we
# already have the package uploaded.
if result.response != '{"filename":["has already been taken"]}'
raise "packagecloud put_package failed, error: #{result.response}"
end
end
end
end
package_files.each do |full_path|
next if full_path.include?("SRPM") || full_path.include?("i386") || full_path.include?("i686")
next unless full_path =~ /\/git-lfs[-|_]\d/
os, distro = case full_path
when /debian\/8/ then ["Debian 8", "debian/jessie"]
when /debian\/9/ then ["Debian 9", "debian/stretch"]
when /debian\/10/ then ["Debian 10", "debian/buster"]
when /centos\/5/ then ["RPM RHEL 5/CentOS 5", "el/5"]
when /centos\/6/ then ["RPM RHEL 6/CentOS 6", "el/6"]
when /centos\/7/ then ["RPM RHEL 7/CentOS 7", "el/7"]
end
next unless os
puts "[#{os}](https://packagecloud.io/#{packagecloud_user}/git-lfs/packages/#{distro}/#{File.basename(full_path)}/download)"
end