Files
dotfiles/bin/§versions.mjs
2025-09-03 10:49:03 +02:00

233 lines
4.1 KiB
JavaScript
Executable File

#!/usr/bin/env nodejsscript
/* jshint esversion: 11,-W097, -W040, module: true, node: true, expr: true, undef: true *//* global echo, $, pipe, s, fetch, cyclicLoop */
const systems= {
/**
* From https://en.wikipedia.org/wiki/Ubuntu_version_history
* @type {{ubuntu: string, codename: string, is_lts: boolean}[]}
* */
ubuntu: JSON.parse(`[
{
"ubuntu": "4.10",
"codename": "Warty Warthog",
"is_lts": false
},
{
"ubuntu": "5.04",
"codename": "Hoary Hedgehog",
"is_lts": false
},
{
"ubuntu": "5.10",
"codename": "Breezy Badger",
"is_lts": false
},
{
"ubuntu": "6.06",
"codename": "Dapper Drake",
"is_lts": true
},
{
"ubuntu": "6.10",
"codename": "Edgy Eft",
"is_lts": false
},
{
"ubuntu": "7.04",
"codename": "Feisty Fawn",
"is_lts": false
},
{
"ubuntu": "7.10",
"codename": "Gutsy Gibbon",
"is_lts": false
},
{
"ubuntu": "8.04",
"codename": "Hardy Heron",
"is_lts": true
},
{
"ubuntu": "8.10",
"codename": "Intrepid Ibex",
"is_lts": false
},
{
"ubuntu": "9.04",
"codename": "Jaunty Jackalope",
"is_lts": false
},
{
"ubuntu": "9.10",
"codename": "Karmic Koala",
"is_lts": false
},
{
"ubuntu": "10.04",
"codename": "Lucid Lynx",
"is_lts": true
},
{
"ubuntu": "10.10",
"codename": "Maverick Meerkat",
"is_lts": false
},
{
"ubuntu": "11.04",
"codename": "Natty Narwhal",
"is_lts": false
},
{
"ubuntu": "11.10",
"codename": "Oneiric Ocelot",
"is_lts": false
},
{
"ubuntu": "12.04",
"codename": "Precise Pangolin",
"is_lts": true
},
{
"ubuntu": "12.10",
"codename": "Quantal Quetzal",
"is_lts": false
},
{
"ubuntu": "13.04",
"codename": "Raring Ringtail",
"is_lts": false
},
{
"ubuntu": "13.10",
"codename": "Saucy Salamander",
"is_lts": false
},
{
"ubuntu": "14.04",
"codename": "Trusty Tahr",
"is_lts": true
},
{
"ubuntu": "14.10",
"codename": "Utopic Unicorn",
"is_lts": false
},
{
"ubuntu": "15.04",
"codename": "Vivid Vervet",
"is_lts": false
},
{
"ubuntu": "15.10",
"codename": "Wily Werewolf",
"is_lts": false
},
{
"ubuntu": "16.04",
"codename": "Xenial Xerus",
"is_lts": true
},
{
"ubuntu": "16.10",
"codename": "Yakkety Yak",
"is_lts": false
},
{
"ubuntu": "17.04",
"codename": "Zesty Zapus",
"is_lts": false
},
{
"ubuntu": "17.10",
"codename": "Artful Aardvark",
"is_lts": false
},
{
"ubuntu": "18.04",
"codename": "Bionic Beaver",
"is_lts": true
},
{
"ubuntu": "18.10",
"codename": "Cosmic Cuttlefish",
"is_lts": false
},
{
"ubuntu": "19.04",
"codename": "Disco Dingo",
"is_lts": false
},
{
"ubuntu": "19.10",
"codename": "Eoan Ermine",
"is_lts": false
},
{
"ubuntu": "20.04",
"codename": "Focal Fossa",
"is_lts": true
},
{
"ubuntu": "20.10",
"codename": "Groovy Gorilla",
"is_lts": false
},
{
"ubuntu": "21.04",
"codename": "Hirsute Hippo",
"is_lts": false
},
{
"ubuntu": "21.10",
"codename": "Impish Indri",
"is_lts": false
},
{
"ubuntu": "22.04",
"codename": "Jammy Jellyfish",
"is_lts": true
},
{
"ubuntu": "22.10",
"codename": "Kinetic Kudu",
"is_lts": false
},
{
"ubuntu": "23.04",
"codename": "Lunar Lobster",
"is_lts": false
},
{
"ubuntu": "23.10",
"codename": "Mantic Minotaur",
"is_lts": false
},
{
"ubuntu": "24.04",
"codename": "Noble Numbat",
"is_lts": true
},
{
"ubuntu": "24.10",
"codename": "Oracular Oriole",
"is_lts": false
}
]`)
};
$.api()
.version("2024-08-15")
.option("--system", "System", "ubuntu")
.command("codename <current>")
.option("--shift", "Shift", 0)
.action(function(current, { system, shift }){
const unify= s=> s.toLowerCase().replace(/[^a-z]/g, "");
current= unify(current);
system= systems[system];
const idx= system.findIndex(s=> unify(s.codename)===current);
if(idx=== -1) return $.exit(1);
const out= system[(idx+shift)%system.length];
echo($.isFIFO(1) ? JSON.stringify(out) : out);
$.exit(0);
})
.parse();