|
| 1 | +#!/usr/bin/env ruby |
| 2 | +require "json" |
| 3 | + |
| 4 | +RELEASE_NAME = "Binaries" |
| 5 | + |
| 6 | +EXISTING_ASSETS = JSON.parse(` |
| 7 | + gh --repo freckle/weeder-action release view #{RELEASE_NAME} --json assets | |
| 8 | + jq '.assets | map(.name)' |
| 9 | +`) |
| 10 | + |
| 11 | +GHCs = %W[ |
| 12 | + 9.2.5 |
| 13 | + 9.2.4 |
| 14 | + 9.2.3 |
| 15 | + 9.2.2 |
| 16 | + 9.0.2 |
| 17 | + 9.0.1 |
| 18 | + 8.10.7 |
| 19 | + 8.10.6 |
| 20 | + 8.10.5 |
| 21 | + 8.10.4 |
| 22 | + 8.10.3 |
| 23 | + 8.10.2 |
| 24 | + 8.10.1 |
| 25 | + 8.8.4 |
| 26 | + 8.8.3 |
| 27 | + 8.8.2 |
| 28 | + 8.8.1 |
| 29 | +] |
| 30 | + |
| 31 | +Asset = Struct.new(:ghc, :os) do |
| 32 | + def name |
| 33 | + "weeder-#{ghc}-#{os}-x64.#{os_attributes.fetch(:ext)}" |
| 34 | + end |
| 35 | + |
| 36 | + def include |
| 37 | + { asset: name, ghc: ghc, release: RELEASE_NAME }. |
| 38 | + merge(os_attributes). |
| 39 | + merge(version_attributes) |
| 40 | + end |
| 41 | + |
| 42 | + def os_attributes |
| 43 | + case os |
| 44 | + when "linux" |
| 45 | + { runner: "ubuntu-latest", exe: "./weeder", ext: "tar.gz", zip: "tar -czf" } |
| 46 | + when "darwin" |
| 47 | + { runner: "macOS-latest", exe: "./weeder", ext: "tar.gz", zip: "tar -czf" } |
| 48 | + when "win32" |
| 49 | + { runner: "windows-latest", exe: "./weeder.exe", ext: "zip", zip: '"C:\Program Files\7-Zip\7z.exe" a -tzip' } |
| 50 | + else |
| 51 | + raise "Unexpected OS: #{os}, must be linux|darwin|win32" |
| 52 | + end |
| 53 | + end |
| 54 | + |
| 55 | + def version_attributes |
| 56 | + case ghc |
| 57 | + when /9\.2\..*/ |
| 58 | + { |
| 59 | + version: "2.4.0", |
| 60 | + resolver: "lts-20.3", |
| 61 | + "extra-deps": "" |
| 62 | + } |
| 63 | + when /9\.0\..*/ |
| 64 | + { |
| 65 | + version: "2.3.1", |
| 66 | + resolver: "lts-19.33", |
| 67 | + "extra-deps": "" |
| 68 | + } |
| 69 | + when /8\.10\..*/ |
| 70 | + { |
| 71 | + version: "2.2.0", |
| 72 | + resolver: "lts-18.28", |
| 73 | + "extra-deps": [ |
| 74 | + "dhall-1.40.2", |
| 75 | + "generic-lens-2.2.1.0", |
| 76 | + "generic-lens-core-2.2.1.0" |
| 77 | + ].join(",") |
| 78 | + } |
| 79 | + when /8\.8\..*/ |
| 80 | + { |
| 81 | + version: "2.2.0", |
| 82 | + resolver: "lts-16.31", |
| 83 | + "extra-deps": [ |
| 84 | + "dhall-1.40.2", |
| 85 | + "generic-lens-2.2.1.0", |
| 86 | + "generic-lens-core-2.2.1.0", |
| 87 | + "base16-bytestring-1.0.2.0", |
| 88 | + "prettyprinter-1.7.1", |
| 89 | + "repline-0.4.2.0", |
| 90 | + "haskeline-0.8.2" |
| 91 | + ].join(",") |
| 92 | + } |
| 93 | + end |
| 94 | + end |
| 95 | + |
| 96 | + def needed? |
| 97 | + !EXISTING_ASSETS.include?(name) |
| 98 | + end |
| 99 | +end |
| 100 | + |
| 101 | +def generate_matrix |
| 102 | + assets = %W[ linux darwin win32 ]. |
| 103 | + flat_map { |os| GHCs.map { |ghc| Asset.new(ghc, os) } }. |
| 104 | + filter(&:needed?) |
| 105 | + |
| 106 | + if assets.empty? |
| 107 | + { |
| 108 | + asset: ["none"], |
| 109 | + include: [{ |
| 110 | + asset: "none", |
| 111 | + runner: "ubuntu-latest" |
| 112 | + }] |
| 113 | + } |
| 114 | + else |
| 115 | + { |
| 116 | + asset: assets.map(&:name), |
| 117 | + include: assets.map(&:include) |
| 118 | + } |
| 119 | + end |
| 120 | +end |
| 121 | + |
| 122 | +puts JSON.dump(generate_matrix) |
0 commit comments