From ef64786cda0607231707c29526555948c085a2d7 Mon Sep 17 00:00:00 2001 From: zimbatm Date: Fri, 28 Sep 2018 16:02:51 +0100 Subject: terraform: move providers to terraform-providers Before, providers were only built indirectly. Since proviers don't depend on terraform to build they can be moved into their own collection of packages. This also has the advantage that they can be reached directly using an attribute path (Eg: terraform-providers.nixos). Co-authored-by: Wael Nasreddine --- .../cluster/terraform-providers/data.nix | 619 +++++++++++++++++++++ .../cluster/terraform-providers/default.nix | 20 + .../cluster/terraform-providers/providers.txt | 13 + .../cluster/terraform-providers/update-all | 143 +++++ 4 files changed, 795 insertions(+) create mode 100644 pkgs/applications/networking/cluster/terraform-providers/data.nix create mode 100644 pkgs/applications/networking/cluster/terraform-providers/default.nix create mode 100644 pkgs/applications/networking/cluster/terraform-providers/providers.txt create mode 100755 pkgs/applications/networking/cluster/terraform-providers/update-all (limited to 'pkgs/applications/networking/cluster/terraform-providers') diff --git a/pkgs/applications/networking/cluster/terraform-providers/data.nix b/pkgs/applications/networking/cluster/terraform-providers/data.nix new file mode 100644 index 000000000000..fead9af601f7 --- /dev/null +++ b/pkgs/applications/networking/cluster/terraform-providers/data.nix @@ -0,0 +1,619 @@ +# Generated with ./update-all +{ + acme = + { + owner = "terraform-providers"; + repo = "terraform-provider-acme"; + version = "1.0.1"; + sha256 = "1yh0dqmrwa1gqpnzj4mdv9p9081azpcskqjrbmy2lzmn3di2ag3r"; + }; + alicloud = + { + owner = "terraform-providers"; + repo = "terraform-provider-alicloud"; + version = "1.17.0"; + sha256 = "1zmywmcgfmx5ccp0qxj912sqymisxdg2s84b4qclfa225hrbaqpn"; + }; + archive = + { + owner = "terraform-providers"; + repo = "terraform-provider-archive"; + version = "1.1.0"; + sha256 = "1fsynv725cmqz819v9p4i4h4w4y77mbya5y9v81sqvacqvr3i05h"; + }; + arukas = + { + owner = "terraform-providers"; + repo = "terraform-provider-arukas"; + version = "1.0.0"; + sha256 = "1v8jzns8czy8navdrabsvc9zk1s9vs1718ngjlx9vs13r3bkm2fc"; + }; + atlas = + { + owner = "terraform-providers"; + repo = "terraform-provider-atlas"; + version = "0.1.1"; + sha256 = "0k73vv14vnjl5qm33w54s5zzi0mmk1kn2zs3qkfq71aqi9ml7d14"; + }; + aws = + { + owner = "terraform-providers"; + repo = "terraform-provider-aws"; + version = "1.38.0"; + sha256 = "1jhr2l8p7wf7kgr2y0c40n1jb9p2153xkpcp4b2half2vhsh1nwi"; + }; + azurerm = + { + owner = "terraform-providers"; + repo = "terraform-provider-azurerm"; + version = "1.15.0"; + sha256 = "1pdmj0ww5y2nwxivlf5l886nwd76hpqhwdayab2fp16zyl1qbpfd"; + }; + azurestack = + { + owner = "terraform-providers"; + repo = "terraform-provider-azurestack"; + version = "0.4.0"; + sha256 = "1c9am0v4aq95k1jblc767vykk76dp0d6z2fvy148ag77cy2jgryc"; + }; + bigip = + { + owner = "terraform-providers"; + repo = "terraform-provider-bigip"; + version = "0.12.0"; + sha256 = "0fmmlx757hph45ffm19zafjfkldg41qkw83vz0jjmvxicza1afbd"; + }; + bitbucket = + { + owner = "terraform-providers"; + repo = "terraform-provider-bitbucket"; + version = "1.0.0"; + sha256 = "0gi8p1q0y8x5y8lqihijkpqs3v152h0q7icv7ixk33xsdcvb418y"; + }; + brightbox = + { + owner = "terraform-providers"; + repo = "terraform-provider-brightbox"; + version = "1.0.5"; + sha256 = "0sn7k5bqgms5sxjhjikmby0jf2n6y14z6s4wsifxaw7b0082fy28"; + }; + chef = + { + owner = "terraform-providers"; + repo = "terraform-provider-chef"; + version = "0.1.0"; + sha256 = "17fppyhxi0rd5v8khw2psdn2hdv5j79hxhinwkzrq5s4iccqk5dw"; + }; + circonus = + { + owner = "terraform-providers"; + repo = "terraform-provider-circonus"; + version = "0.1.1"; + sha256 = "05n1q9hc0h31icxsmyi2y60wiwd5fs2hz1dqm3bl6hgh5x3ss1im"; + }; + clc = + { + owner = "terraform-providers"; + repo = "terraform-provider-clc"; + version = "0.1.0"; + sha256 = "0gvsjnwk6xkgxai1gxsjf0hsjxbv8d8jg5hq8yd3hjhc6785fgnf"; + }; + cloudflare = + { + owner = "terraform-providers"; + repo = "terraform-provider-cloudflare"; + version = "1.5.0"; + sha256 = "0l8bmnxmjr2g3xxw8w0ay91cvs4kzc65wkdwybfahvq9r6mww45n"; + }; + cloudscale = + { + owner = "terraform-providers"; + repo = "terraform-provider-cloudscale"; + version = "1.0.1"; + sha256 = "0lhzwbm1a2s11s0ahb3vxfvshh385fgy1ficvip4rl31dahhwrav"; + }; + cloudstack = + { + owner = "terraform-providers"; + repo = "terraform-provider-cloudstack"; + version = "0.1.5"; + sha256 = "139wq6rr6fczjz496fqkxh6cmscx5hfnv2hvhfwpkhvqipsnlxmq"; + }; + cobbler = + { + owner = "terraform-providers"; + repo = "terraform-provider-cobbler"; + version = "1.0.1"; + sha256 = "1z0iijfrbbdrgszvc7jlcr4105zragbc0iq8x48vi24yipqgf5a8"; + }; + consul = + { + owner = "terraform-providers"; + repo = "terraform-provider-consul"; + version = "2.1.0"; + sha256 = "1qm29vj8ms37zb4b3bhdv4b4vrl0am134zmc654lb2g582cnj9yw"; + }; + datadog = + { + owner = "terraform-providers"; + repo = "terraform-provider-datadog"; + version = "1.3.0"; + sha256 = "0d3xccfkzibjp4jl8irja1cdhppdn3b7nh4wy857zvfxpfhz7aj2"; + }; + digitalocean = + { + owner = "terraform-providers"; + repo = "terraform-provider-digitalocean"; + version = "0.1.3"; + sha256 = "10crxciw7y2gnm8vqp007vw0k7c1a1xk2z2zsjr5rksk6qlnri4k"; + }; + dme = + { + owner = "terraform-providers"; + repo = "terraform-provider-dme"; + version = "0.1.0"; + sha256 = "1ipqw1sbx0i9rhxawsysrqxvf10z8ra2y86xwd4iz0f12x9drblv"; + }; + dns = + { + owner = "terraform-providers"; + repo = "terraform-provider-dns"; + version = "2.0.0"; + sha256 = "1km0pq1wp0bdccb612z9n0kj9w7hn1yvhk7xszwp2mzs8qmd7flv"; + }; + dnsimple = + { + owner = "terraform-providers"; + repo = "terraform-provider-dnsimple"; + version = "0.1.0"; + sha256 = "0gkd5i69ldm5zn34p3k68aqk798g6g0d60gw7yp316l7mskvrx7h"; + }; + docker = + { + owner = "terraform-providers"; + repo = "terraform-provider-docker"; + version = "1.0.1"; + sha256 = "1q5bsdvp47gvpiyqlzgrpxczlh6m9g870pn84ks49xfkwk5izpz6"; + }; + dyn = + { + owner = "terraform-providers"; + repo = "terraform-provider-dyn"; + version = "1.1.0"; + sha256 = "0sx4h3drb230m69lsmafyfd2cfvwnb9gld8s6ky54115kd3nckml"; + }; + external = + { + owner = "terraform-providers"; + repo = "terraform-provider-external"; + version = "1.0.0"; + sha256 = "1sh0m8d6wp76h1b89j820yl3caji0f0wlgq3pwa5nk99h73rlndn"; + }; + fastly = + { + owner = "terraform-providers"; + repo = "terraform-provider-fastly"; + version = "0.3.0"; + sha256 = "1hh4s81g256iy1rvp9snqbyhidz8n6p7pzanlxp89ffrq9p32sp0"; + }; + flexibleengine = + { + owner = "terraform-providers"; + repo = "terraform-provider-flexibleengine"; + version = "1.1.0"; + sha256 = "07g6kc211crxf9nvgvghg05jdahd1fb09lpwfcps9ph259pwwam3"; + }; + github = + { + owner = "terraform-providers"; + repo = "terraform-provider-github"; + version = "1.3.0"; + sha256 = "1k7816dbpsjjbm3pa6l0qlrxw5hh8z5iwdr8mp1mp5liidhl6bqs"; + }; + gitlab = + { + owner = "terraform-providers"; + repo = "terraform-provider-gitlab"; + version = "1.0.0"; + sha256 = "1kxmzdzdb6fc64i2bzch6020zfk0ygms9gh5mm1bypsyqmj4qc6r"; + }; + google = + { + owner = "terraform-providers"; + repo = "terraform-provider-google"; + version = "1.18.0"; + sha256 = "0zwy1imby0xqvb86a82rdvglipf2sfpi3rmsj72iikp7vi3mqk64"; + }; + grafana = + { + owner = "terraform-providers"; + repo = "terraform-provider-grafana"; + version = "1.2.0"; + sha256 = "1kn2bbdgci6nfl2gyk4w8w203fscqws2748idv9m53ikczg8n573"; + }; + hcloud = + { + owner = "terraform-providers"; + repo = "terraform-provider-hcloud"; + version = "1.3.0"; + sha256 = "0sb9pajsy0if18vgw5pllgv8qvb4v7pv65m2f3hfkck2za82ndwb"; + }; + heroku = + { + owner = "terraform-providers"; + repo = "terraform-provider-heroku"; + version = "1.4.0"; + sha256 = "159a9add5v4dj2bry1b85i74q2lb4pjjypkm5hzrbqys6gn2imhn"; + }; + http = + { + owner = "terraform-providers"; + repo = "terraform-provider-http"; + version = "1.0.1"; + sha256 = "1bnqrx4xya3lm5wp4byy6npazll6w1g6bv4rawgncswsgx08zqng"; + }; + huaweicloud = + { + owner = "terraform-providers"; + repo = "terraform-provider-huaweicloud"; + version = "1.2.0"; + sha256 = "0r05dfgpzci0lpc2ivbrj6ivib8svbks9612by3w3zakzclpv467"; + }; + icinga2 = + { + owner = "terraform-providers"; + repo = "terraform-provider-icinga2"; + version = "0.1.1"; + sha256 = "0z7lxrspm33j7bkkm2n7ac0jgyaz3y3lql3gd30p10nvpilrg07v"; + }; + ignition = + { + owner = "terraform-providers"; + repo = "terraform-provider-ignition"; + version = "1.0.1"; + sha256 = "1j9rgwrb4bnm8a44rg3d9fry46wlpfkwxxpkpw9y6l24php0qxh8"; + }; + influxdb = + { + owner = "terraform-providers"; + repo = "terraform-provider-influxdb"; + version = "1.0.2"; + sha256 = "05l2i0z35x6462mm1inn6jhp1pfi7df6hv52lhcyypk0lv2rgqf9"; + }; + kubernetes = + { + owner = "terraform-providers"; + repo = "terraform-provider-kubernetes"; + version = "1.2.0"; + sha256 = "0slvhj8f7p27r9v4vb5vjyqpmzlpaji1djzwsxsf247df68mka61"; + }; + librato = + { + owner = "terraform-providers"; + repo = "terraform-provider-librato"; + version = "0.1.0"; + sha256 = "0bxadwj5s7bvc4vlymn3w6qckf14hz82r7q98w2nh55sqr52d923"; + }; + local = + { + owner = "terraform-providers"; + repo = "terraform-provider-local"; + version = "1.1.0"; + sha256 = "1qxfyyg8k43rw0gny4dadamc2a9hk3x6ybdivifjc17m7il0janc"; + }; + logentries = + { + owner = "terraform-providers"; + repo = "terraform-provider-logentries"; + version = "1.0.0"; + sha256 = "04xprkb9zwdjyzmsdf10bgmn8sa8q7jw0izz8lw0cc9hag97qgbq"; + }; + logicmonitor = + { + owner = "terraform-providers"; + repo = "terraform-provider-logicmonitor"; + version = "1.2.0"; + sha256 = "1zir35i8j5w7ra4i7f9k0ghac9b3bar0dy16sqy1kqwbh4ikmhb8"; + }; + mailgun = + { + owner = "terraform-providers"; + repo = "terraform-provider-mailgun"; + version = "0.1.0"; + sha256 = "1hjhjfxqbr43wa248c6hc91lx5b2gdw4vl92l2i6aqp17rbc0wfj"; + }; + mysql = + { + owner = "terraform-providers"; + repo = "terraform-provider-mysql"; + version = "1.1.0"; + sha256 = "06alk5vd20wzf493dw8hb80q0sx0kw4j8g1sd0193fhni0k4rflw"; + }; + netlify = + { + owner = "terraform-providers"; + repo = "terraform-provider-netlify"; + version = "0.1.0"; + sha256 = "1lf66nzqcgzjwvh1lv2jp8gcj6apdanlinci5pri8mgv5r1pv40l"; + }; + newrelic = + { + owner = "terraform-providers"; + repo = "terraform-provider-newrelic"; + version = "1.0.1"; + sha256 = "0g4fd2rvx90f2bmjl6jjdvrsx7ayhf30vj9y3mklhxgsd9x83wpq"; + }; + nomad = + { + owner = "terraform-providers"; + repo = "terraform-provider-nomad"; + version = "1.2.0"; + sha256 = "1z3knyjn5ymbk4vaja4ka9zn57cgl7vr7hqv6ybqw0q9i2ykaici"; + }; + ns1 = + { + owner = "terraform-providers"; + repo = "terraform-provider-ns1"; + version = "1.0.0"; + sha256 = "0zjdhz6miwlg3b68pbd99c6nw7hhyzxy736734xz8g3w89xn18f5"; + }; + nsxt = + { + owner = "terraform-providers"; + repo = "terraform-provider-nsxt"; + version = "1.0.0"; + sha256 = "09yliw59wp9flfgmkznbf4syl510wpxsplzr8sa9m2vw0yc78jnq"; + }; + null = + { + owner = "terraform-providers"; + repo = "terraform-provider-null"; + version = "1.0.0"; + sha256 = "12vpa09xrq8z1pjq0bwzq3889c4fl6c5kvynwqy0z1pdx21m60ha"; + }; + oci = + { + owner = "terraform-providers"; + repo = "terraform-provider-oci"; + version = "3.1.1"; + sha256 = "0wrvb44gs0c1khvam5lrq53l2889japg7d4nyk2hrpywy9japc8m"; + }; + oneandone = + { + owner = "terraform-providers"; + repo = "terraform-provider-oneandone"; + version = "1.3.0"; + sha256 = "0c412nqg3k17124i51nn3ffra6gcll904h37h7hyvz97cdblcncn"; + }; + opc = + { + owner = "terraform-providers"; + repo = "terraform-provider-opc"; + version = "1.2.1"; + sha256 = "0mnvi47kbdwwpfzdlcd1mhd15w5b0ivwxi1a5lvs0zyqf0g0cas8"; + }; + openstack = + { + owner = "terraform-providers"; + repo = "terraform-provider-openstack"; + version = "1.9.0"; + sha256 = "0prmdj78jsyrns876cglfp8a3dbpfl33bwb0dj072flh4yknfrdr"; + }; + opentelekomcloud = + { + owner = "terraform-providers"; + repo = "terraform-provider-opentelekomcloud"; + version = "1.1.0"; + sha256 = "04pcgygcz2ld5hp7f29j2z3d4ypy4fm4m1zbbs9l9gc3fya88iny"; + }; + opsgenie = + { + owner = "terraform-providers"; + repo = "terraform-provider-opsgenie"; + version = "0.1.0"; + sha256 = "0zs0cl6jl4rijcs6vv5k8k5pyf0zs52dlgqcnb1gzslh8sg5pdkm"; + }; + oraclepaas = + { + owner = "terraform-providers"; + repo = "terraform-provider-oraclepaas"; + version = "1.3.2"; + sha256 = "138522cidaiy2akqqblik3w6qnx8zgn70ih7am1sxn13vqm1vlhb"; + }; + ovh = + { + owner = "terraform-providers"; + repo = "terraform-provider-ovh"; + version = "0.3.0"; + sha256 = "05bzkwa50alh8mpslh64dddp815m8df240w1mmphdmp9rsi6hqp8"; + }; + packet = + { + owner = "terraform-providers"; + repo = "terraform-provider-packet"; + version = "1.2.4"; + sha256 = "11ga29d5bzmn6rzlb6sb28nh1zbbwglinzn185pysqx6n21l6wva"; + }; + pagerduty = + { + owner = "terraform-providers"; + repo = "terraform-provider-pagerduty"; + version = "1.2.0"; + sha256 = "037mdcvpcpjj0dpwg0nny862j631ajhv472a847p2ajgk02bq1wf"; + }; + panos = + { + owner = "terraform-providers"; + repo = "terraform-provider-panos"; + version = "1.4.0"; + sha256 = "033xpglbn0q805b129kf1ywl13m4pgrkwlvgl347nldysryiasxq"; + }; + postgresql = + { + owner = "terraform-providers"; + repo = "terraform-provider-postgresql"; + version = "0.1.2"; + sha256 = "08wv03j70mych4nnamivjihwvca3aksjxgjlj8yasz5292qgl05w"; + }; + powerdns = + { + owner = "terraform-providers"; + repo = "terraform-provider-powerdns"; + version = "0.1.0"; + sha256 = "1k9xjx2smk6478dsrcnqk1k6r2pddpa9n8aghq5d1a5yhfsq5zzz"; + }; + profitbricks = + { + owner = "terraform-providers"; + repo = "terraform-provider-profitbricks"; + version = "1.4.0"; + sha256 = "1yrmlpqc1bzgs3c8pxhfbscf4anjri6gv6sd8i8rn764z8xhwaff"; + }; + rabbitmq = + { + owner = "terraform-providers"; + repo = "terraform-provider-rabbitmq"; + version = "1.0.0"; + sha256 = "1md928243r4c46ihjnavz2375nxnfyhknyc86r9853hwhhyhsx5d"; + }; + rancher = + { + owner = "terraform-providers"; + repo = "terraform-provider-rancher"; + version = "1.2.1"; + sha256 = "1z0gqchb268w5mw0519fbx4126nkxb9kvvay8vjj287yxdpi5grj"; + }; + random = + { + owner = "terraform-providers"; + repo = "terraform-provider-random"; + version = "2.0.0"; + sha256 = "0plg139pbvqwbs5hcl7d5kjn7vwknjr4n0ysc2j5s25iyhikkv9s"; + }; + rightscale = + { + owner = "terraform-providers"; + repo = "terraform-provider-rightscale"; + version = "1.3.0"; + sha256 = "1brzxyd5hg99x75qh0p707lr9cvqpzx2az1swr624w3rzhjl2ygm"; + }; + rundeck = + { + owner = "terraform-providers"; + repo = "terraform-provider-rundeck"; + version = "0.1.0"; + sha256 = "0rp8cgnp8in52g7zkl2lj42hns0g27m8f7l42lhfnv6n2vv5qxcg"; + }; + runscope = + { + owner = "terraform-providers"; + repo = "terraform-provider-runscope"; + version = "0.4.0"; + sha256 = "1n3q2hdwvkkn5rphrcl5qfv4ry2mrr13dcjwzhbym2i1nhpxkld0"; + }; + scaleway = + { + owner = "terraform-providers"; + repo = "terraform-provider-scaleway"; + version = "1.6.0"; + sha256 = "1ykcakfw0gp239jp4brpjynxzzvlhldfpv12hkgymj22s37n5jnn"; + }; + softlayer = + { + owner = "terraform-providers"; + repo = "terraform-provider-softlayer"; + version = "0.0.1"; + sha256 = "1xcg5zm2n1pc3l7ng94k589r7ykv6fxsmr5qn9xmmpdf912rdnfq"; + }; + spotinst = + { + owner = "terraform-providers"; + repo = "terraform-provider-spotinst"; + version = "1.4.0"; + sha256 = "0kb09v18ksh2r4b5k9iv4rzq403zk1shpakk54pmq8s6i5jd085g"; + }; + statuscake = + { + owner = "terraform-providers"; + repo = "terraform-provider-statuscake"; + version = "0.2.0"; + sha256 = "065izach0hq04664hz7rc3gd0r3l06lzwcbj5800zjfv1inp6pxs"; + }; + telefonicaopencloud = + { + owner = "terraform-providers"; + repo = "terraform-provider-telefonicaopencloud"; + version = "1.0.0"; + sha256 = "1761wkjz3d2458xl7855lxklyxgyk05fddh92rp6975y0ca6xa5m"; + }; + template = + { + owner = "terraform-providers"; + repo = "terraform-provider-template"; + version = "1.0.0"; + sha256 = "0jl6bp6gwg96sdk5j6s13vv1j9gxjpy2yva3barmzv9138i665mz"; + }; + terraform = + { + owner = "terraform-providers"; + repo = "terraform-provider-terraform"; + version = "1.0.2"; + sha256 = "1aj6g6l68n9kqmxfjlkwwxnac7fhha6wrmvsw4yylf0qyssww75v"; + }; + tfe = + { + owner = "terraform-providers"; + repo = "terraform-provider-tfe"; + version = "0.2.0"; + sha256 = "1d3yiaxmmlnnjmx6vnckvdnqgyxakc9i70dgxdbn8ihw5i6anvik"; + }; + tls = + { + owner = "terraform-providers"; + repo = "terraform-provider-tls"; + version = "1.2.0"; + sha256 = "0hvj00j8a820j18yi90xzhd635pkffivp1116d84wyqxya5acd4p"; + }; + triton = + { + owner = "terraform-providers"; + repo = "terraform-provider-triton"; + version = "0.5.1"; + sha256 = "1bn5x6nmhfkrzpxhyfclls85l9qqffvzx1xsgcb3368lhwzarn2f"; + }; + ultradns = + { + owner = "terraform-providers"; + repo = "terraform-provider-ultradns"; + version = "0.1.0"; + sha256 = "0bq2y6bxdax7qnmq6vxh8pz9sqy1r3m05dv7q5dbv2xvba1b88hj"; + }; + vault = + { + owner = "terraform-providers"; + repo = "terraform-provider-vault"; + version = "1.1.4"; + sha256 = "00i9rl9pnmicvndkmvcmlj6y80341dmkqnhq09f94yljh1w1zpvv"; + }; + vcd = + { + owner = "terraform-providers"; + repo = "terraform-provider-vcd"; + version = "1.0.0"; + sha256 = "0sjqdb37lalvizf4imxwn7nmry1c76dw2fpnrfmal34gghddm91p"; + }; + vsphere = + { + owner = "terraform-providers"; + repo = "terraform-provider-vsphere"; + version = "1.8.1"; + sha256 = "0y6n7mvv1f3jqsxlvf68iq85k69fj7a333203vkvc83dba84aqki"; + }; + nixos = + { + owner = "tweag"; + repo = "terraform-provider-nixos"; + version = "0.0.1"; + sha256 = "00vz6qjq1pk39iqg4356b8g3c6slla9jifkv2knk46gc9q93q0lf"; + }; +} diff --git a/pkgs/applications/networking/cluster/terraform-providers/default.nix b/pkgs/applications/networking/cluster/terraform-providers/default.nix new file mode 100644 index 000000000000..a535ab06f453 --- /dev/null +++ b/pkgs/applications/networking/cluster/terraform-providers/default.nix @@ -0,0 +1,20 @@ +{ lib, buildGoPackage, fetchFromGitHub }: +let + list = import ./data.nix; + + toDrv = data: + buildGoPackage rec { + inherit (data) owner repo version sha256; + name = "${repo}-${version}"; + goPackagePath = "github.com/${owner}/${repo}"; + src = fetchFromGitHub { + inherit owner repo sha256; + rev = "v${version}"; + }; + + # Terraform allow checking the provider versions, but this breaks + # if the versions are not provided via file paths. + postBuild = "mv go/bin/${repo}{,_v${version}}"; + }; +in + lib.mapAttrs (n: v: toDrv v) list diff --git a/pkgs/applications/networking/cluster/terraform-providers/providers.txt b/pkgs/applications/networking/cluster/terraform-providers/providers.txt new file mode 100644 index 000000000000..d0c4a6505981 --- /dev/null +++ b/pkgs/applications/networking/cluster/terraform-providers/providers.txt @@ -0,0 +1,13 @@ +# lines starting with a # are comments + +# The accepted format (double escape all grep expresssions): +# [grep-expression] [grep-v-expression] - include all repositories in the organisation. +# grep-expression: filter repo matching the expression +# grep-v-expression: filter repo not matching the expression +# / - include only the named repository. + +# include all terraform-providers +terraform-providers terraform-provider- terraform-provider-\\(azure-classic\\|scaffolding\\|google-beta\\) + +# include terraform-provider-nixos +tweag/terraform-provider-nixos diff --git a/pkgs/applications/networking/cluster/terraform-providers/update-all b/pkgs/applications/networking/cluster/terraform-providers/update-all new file mode 100755 index 000000000000..2009d474db7b --- /dev/null +++ b/pkgs/applications/networking/cluster/terraform-providers/update-all @@ -0,0 +1,143 @@ +#!/usr/bin/env nix-shell +#! nix-shell -i bash -p bash coreutils curl jq nix +# vim: ft=sh sw=2 et +# +# This scripts scans the github terraform-providers repo for new releases, +# generates the corresponding nix code and finally generates an index of +# all the providers given in ./providers.txt. +set -euo pipefail + +# the maximum number of attempts before giving up inside of GET and prefetch_github +readonly maxAttempts=30 + +GET() { + local url=$1 + local retry=1 + echo "fetching $url" >&2 + while ! curl -#fL -u "$GITHUB_AUTH" "$url"; do + echo "The curl command has failed. Attempt $retry/${maxAttempts}" >&2 + if [[ "${retry}" -eq "${maxAttempts}" ]]; then + exit 1 + fi + retry=$(( retry + 1 )) + sleep 5 + done +} + +get_org_repos() { + local org=$1 + local page=1 + GET "https://api.github.com/orgs/$org/repos?per_page=100" | jq -r '.[].name' +} + +get_repo_tags() { + local owner=$1 + local repo=$2 + GET "https://api.github.com/repos/$owner/$repo/git/refs/tags?per_page=100" | \ + jq -r '.[].ref' | \ + grep -v 'v\.' | \ + cut -d '/' -f 3- | \ + sort --version-sort +} + +prefetch_github() { + local owner=$1 + local repo=$2 + local rev=$3 + local retry=1 + while ! nix-prefetch-url --unpack "https://github.com/$owner/$repo/archive/$rev.tar.gz"; do + echo "The nix-prefetch-url command has failed. Attempt $retry/${maxAttempts}" >&2 + if [[ "${retry}" -eq "${maxAttempts}" ]]; then + exit 1 + fi + retry=$(( retry + 1 )) + sleep 5 + done +} + +echo_entry() { + local owner=$1 + local repo=$2 + local version=${3:1} + local sha256=$4 + cat <> data.nix +} + +## Main ## + +cd "$(dirname "$0")" + +if [[ -z "${GITHUB_AUTH:-}" ]]; then + cat <<'HELP' +Missing the GITHUB_AUTH env. This is required to work around the 60 request +per hour rate-limit. + +Go to https://github.com/settings/tokens and create a new token with the +"public_repo" scope. + +Then `export GITHUB_AUTH=:` and run this script again. +HELP + exit 1 +fi + +cat <
data.nix +# Generated with ./update-all +{ +HEADER + +while read line; do + IFS=' ' read -r -a fields <<< "$line" + if [[ "${#fields[@]}" -eq 0 ]]; then + continue + fi + + if [[ "${fields[0]}" = *"/"* ]]; then + org="$(echo "${fields[0]}" | cut -d/ -f1)" + repo="$(echo "${fields[0]}" | cut -d/ -f2)" + add_repo "${org}" "${repo}" + else + org="${fields[0]}" + repos=$(get_org_repos "$org") + if [[ "${#fields[@]}" -ge 2 ]] && [[ -n "${fields[1]}" ]]; then + repos="$( echo "${repos[@]}" | grep "${fields[1]}" )" + fi + if [[ "${#fields[@]}" -eq 3 ]] && [[ -n "${fields[2]}" ]]; then + repos="$( echo "${repos[@]}" | grep -v "${fields[2]}" )" + fi + repos="$( echo "${repos[@]}" | sort )" + + for repo in $repos; do + add_repo "$org" "$repo" + done + fi +done < <(grep -v '^#\|^$' providers.txt) + +cat <