Skip to content

Commit

Permalink
chore: add CI and improve generation script (#1)
Browse files Browse the repository at this point in the history
  • Loading branch information
clo4 authored Sep 23, 2021
1 parent e838801 commit 537d7d7
Show file tree
Hide file tree
Showing 6 changed files with 256 additions and 215 deletions.
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* text=auto eol=lf
24 changes: 24 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: CI
on:
push:
paths:
- "**/*.json"
- .github/workflows/*.yml
jobs:
ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2

- uses: denoland/setup-deno@v1
with:
deno-version: v1.x

- name: Print version
run: deno --version

- name: Check hashes
run: |
md5sum devices.json mod.ts > hash.md5
deno run --no-check --quiet --allow-read=devices --allow-write=devices.json,mod.ts generate.ts
md5sum --check hash.md5
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,14 @@ _mod.ts_ and _devices.json_ are both generated by _generate.ts_. You'll need
Deno installed to run that script.

```bash
deno run --allow-read --allow-write=devices.json,mod.ts generate.ts
deno run --no-check --quiet --allow-read=devices --allow-write=devices.json,mod.ts generate.ts
```

The data comes from the _devices_ directory. Edit the JSON files in there (or
add a new one!) and re-run the script to see your changes.

Make sure you run the script before committing.

## License

Since I'm probably not the only one who needs this, I'm releasing this to the
Expand Down
202 changes: 101 additions & 101 deletions devices.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
{
"Apple TV (1st generation)": "AppleTV1,1",
"Apple TV (2nd generation)": "AppleTV2,1",
"Apple TV (3rd generation, Early 2012)": "AppleTV3,1",
"Apple TV (3rd generation, Early 2013)": "AppleTV3,2",
"Apple TV HD": "AppleTV5,3",
"Apple TV 4K (1st generation)": "AppleTV6,2",
"Apple TV 4K (2nd generation)": "AppleTV11,1",
"Apple Watch 38mm": "Watch1,1",
"Apple Watch 42mm": "Watch1,2",
"Apple Watch Series 2 38mm": "Watch2,3",
Expand All @@ -25,105 +32,6 @@
"Apple Watch Series 6 (GPS) 44mm": "Watch6,2",
"Apple Watch Series 6 (GPS + Cellular) 40mm": "Watch6,3",
"Apple Watch Series 6 (GPS + Cellular) 44mm": "Watch6,4",
"MacBook Air (M1, 2020)": "MacBookAir10,1",
"MacBook Air (Retina, 13-inch, 2020)": "MacBookAir9,1",
"MacBook Air (Retina, 13-inch, 2019)": "MacBookAir8,2",
"MacBook Air (Retina, 13-inch, 2018)": "MacBookAir8,1",
"MacBook Air (13-inch, 2017)": "MacBookAir7,2",
"MacBook Air (13-inch, Early 2015)": "MacBookAir7,2",
"MacBook Air (11-inch, Early 2015)": "MacBookAir7,1",
"MacBook Air (13-inch, Early 2014)": "MacBookAir6,2",
"MacBook Air (11-inch, Early 2014)": "MacBookAir6,1",
"MacBook Air (13-inch, Mid 2013)": "MacBookAir6,2",
"MacBook Air (11-inch, Mid 2013)": "MacBookAir6,1",
"MacBook Air (13-inch, Mid 2012)": "MacBookAir5,2",
"MacBook Air (11-inch, Mid 2012)": "MacBookAir5,1",
"MacBook Air (13-inch, Mid 2011)": "MacBookAir4,2",
"MacBook Air (11-inch, Mid 2011)": "MacBookAir4,1",
"MacBook Air (13-inch, Late 2010)": "MacBookAir3,2",
"MacBook Air (11-inch, Late 2010)": "MacBookAir3,1",
"MacBook Air (Mid 2009)": "MacBookAir2,1",
"Mac mini (M1, 2020)": "Macmini9,1",
"Mac mini (2018)": "Macmini8,1",
"Mac mini (Late 2014)": "Macmini7,1",
"Mac mini (Late 2012)": "Macmini6,1; Macmini6,2",
"Mac mini (Mid 2011)": "Macmini5,1; Macmini5,2",
"Mac mini (Mid 2010)": "Macmini4,1",
"Mac mini (Late 2009)": "Macmini3,1",
"Mac mini (Early 2009)": "Macmini3,1",
"Mac Pro (2019)": "MacPro7,1",
"Mac Pro (Rack, 2019)": "MacPro7,1",
"Mac Pro (Late 2013)": "MacPro6,1",
"Mac Pro (Mid 2012)": "MacPro5,1",
"Mac Pro Server (Mid 2012)": "MacPro5,1",
"Mac Pro (Mid 2010)": "MacPro5,1",
"Mac Pro Server (Mid 2010)": "MacPro5,1",
"Mac Pro (Early 2009)": "MacPro4,1",
"MacBook (Retina, 12-inch, 2017)": "MacBook10,1",
"MacBook (Retina, 12-inch, Early 2016)": "MacBook9,1",
"MacBook (Retina, 12-inch, Early 2015)": "MacBook8,1",
"MacBook (13-inch, Mid 2010)": "MacBook7,1",
"MacBook (13-inch, Late 2009)": "MacBook6,1",
"MacBook (13-inch, Mid 2009)": "MacBook5,2",
"MacBook (13-inch, Early 2009)": "MacBook5,2",
"Apple TV (1st generation)": "AppleTV1,1",
"Apple TV (2nd generation)": "AppleTV2,1",
"Apple TV (3rd generation, Early 2012)": "AppleTV3,1",
"Apple TV (3rd generation, Early 2013)": "AppleTV3,2",
"Apple TV HD": "AppleTV5,3",
"Apple TV 4K (1st generation)": "AppleTV6,2",
"Apple TV 4K (2nd generation)": "AppleTV11,1",
"iPod touch (1st generation)": "iPod1,1",
"iPod touch (2nd generation)": "iPod2,1",
"iPod touch (3rd generation)": "iPod3,1",
"iPod touch (4th generation)": "iPod4,1",
"iPod touch (5th generation)": "iPod5,1",
"iPod touch (6th generation)": "iPod7,1",
"iPod touch (7th generation)": "iPod9,1",
"MacBook Pro (13-inch, M1, 2020)": "MacBookPro17,1",
"MacBook Pro (13-inch, 2020, Two Thunderbolt 3 ports)": "MacBookPro16,3",
"MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)": "MacBookPro16,2",
"MacBook Pro (16-inch, 2019)": "MacBookPro16,1, MacBookPro16,4",
"MacBook Pro (13-inch, 2019, Two Thunderbolt 3 ports)": "MacBookPro15,4",
"MacBook Pro (15-inch, 2019)": "MacBookPro15,1, MacBookPro15,3",
"MacBook Pro (13-inch, 2019, Four Thunderbolt 3 ports)": "MacBookPro15,2",
"MacBook Pro (15-inch, 2018)": "MacBookPro15,1",
"MacBook Pro (13-inch, 2018, Four Thunderbolt 3 ports)": "MacBookPro15,2",
"MacBook Pro (15-inch, 2017)": "MacBookPro14,3",
"MacBook Pro (13-inch, 2017, Four Thunderbolt 3 ports)": "MacBookPro14,2",
"MacBook Pro (13-inch, 2017, Two Thunderbolt 3 ports)": "MacBookPro14,1",
"MacBook Pro (15-inch, 2016)": "MacBookPro13,3",
"MacBook Pro (13-inch, 2016, Four Thunderbolt 3 ports)": "MacBookPro13,2",
"MacBook Pro (13-inch, 2016, Two Thunderbolt 3 ports)": "MacBookPro13,1",
"MacBook Pro (Retina, 15-inch, Mid 2015)": "MacBookPro11,4, MacBookPro11,5",
"MacBook Pro (Retina, 13-inch, Early 2015)": "MacBookPro12,1",
"MacBook Pro (Retina, 15-inch, Mid 2014)": "MacBookPro11,2, MacBookPro11,3",
"MacBook Pro (Retina, 13-inch, Mid 2014)": "MacBookPro11,1",
"MacBook Pro (Retina, 15-inch, Late 2013)": "MacBookPro11,2, MacBookPro11,3",
"MacBook Pro (Retina, 13-inch, Late 2013)": "MacBookPro11,1",
"MacBook Pro (Retina, 15-inch, Early 2013)": "MacBookPro10,1",
"MacBook Pro (Retina, 13-inch, Early 2013)": "MacBookPro10,2",
"MacBook Pro (Retina, 13-inch, Late 2012)": "MacBookPro10,2",
"MacBook Pro (Retina, 15-inch, Mid 2012)": "MacBookPro10,1",
"MacBook Pro (15-inch, Mid 2012)": "MacBookPro9,1",
"MacBook Pro (13-inch, Mid 2012)": "MacBookPro9,2",
"MacBook Pro (17-inch, Late 2011)": "MacBookPro8,3",
"MacBook Pro (15-inch, Late 2011)": "MacBookPro8,2",
"MacBook Pro (13-inch, Late 2011)": "MacBookPro8,1",
"MacBook Pro (17-inch, Early 2011)": "MacBookPro8,3",
"MacBook Pro (15-inch, Early 2011)": "MacBookPro8,2",
"MacBook Pro (13-inch, Early 2011)": "MacBookPro8,1",
"MacBook Pro (17-inch, Mid 2010)": "MacBookPro6,1",
"MacBook Pro (15-inch, Mid 2010)": "MacBookPro6,2",
"MacBook Pro (13-inch, Mid 2010)": "MacBookPro7,1",
"MacBook Pro (17-inch, Mid 2009)": "MacBookPro5,2",
"MacBook Pro (15-inch, Mid 2009)": "MacBookPro5,3",
"MacBook Pro (15-inch, 2.53GHz, Mid 2009)": "MacBookPro5,3",
"MacBook Pro (13-inch, Mid 2009)": "MacBookPro5,5",
"MacBook Pro (17-inch, Early 2009)": "MacBookPro5,2",
"MacBook Pro (15-inch, Late 2008)": "MacBookPro5,1",
"MacBook Pro (17-inch, Early 2008)": "MacBookPro4,1",
"MacBook Pro (15-inch, Early 2008)": "MacBookPro4,1",
"iMac (24-inch, M1, 2021)": "iMac21,2",
"iMac (Retina 5K, 27-inch, 2020)": "iMac20,1, iMac20,2",
"iMac (Retina 5K, 27-inch, 2019)": "iMac19,1",
Expand Down Expand Up @@ -264,5 +172,97 @@
"iPhone 13 Pro": "iPhone14,2",
"iPhone 13 Pro Max": "iPhone14,3",
"iPhone 13 Mini": "iPhone14,4",
"iPhone 13": "iPhone14,5"
}
"iPhone 13": "iPhone14,5",
"iPod touch (1st generation)": "iPod1,1",
"iPod touch (2nd generation)": "iPod2,1",
"iPod touch (3rd generation)": "iPod3,1",
"iPod touch (4th generation)": "iPod4,1",
"iPod touch (5th generation)": "iPod5,1",
"iPod touch (6th generation)": "iPod7,1",
"iPod touch (7th generation)": "iPod9,1",
"MacBook (Retina, 12-inch, 2017)": "MacBook10,1",
"MacBook (Retina, 12-inch, Early 2016)": "MacBook9,1",
"MacBook (Retina, 12-inch, Early 2015)": "MacBook8,1",
"MacBook (13-inch, Mid 2010)": "MacBook7,1",
"MacBook (13-inch, Late 2009)": "MacBook6,1",
"MacBook (13-inch, Mid 2009)": "MacBook5,2",
"MacBook (13-inch, Early 2009)": "MacBook5,2",
"MacBook Air (M1, 2020)": "MacBookAir10,1",
"MacBook Air (Retina, 13-inch, 2020)": "MacBookAir9,1",
"MacBook Air (Retina, 13-inch, 2019)": "MacBookAir8,2",
"MacBook Air (Retina, 13-inch, 2018)": "MacBookAir8,1",
"MacBook Air (13-inch, 2017)": "MacBookAir7,2",
"MacBook Air (13-inch, Early 2015)": "MacBookAir7,2",
"MacBook Air (11-inch, Early 2015)": "MacBookAir7,1",
"MacBook Air (13-inch, Early 2014)": "MacBookAir6,2",
"MacBook Air (11-inch, Early 2014)": "MacBookAir6,1",
"MacBook Air (13-inch, Mid 2013)": "MacBookAir6,2",
"MacBook Air (11-inch, Mid 2013)": "MacBookAir6,1",
"MacBook Air (13-inch, Mid 2012)": "MacBookAir5,2",
"MacBook Air (11-inch, Mid 2012)": "MacBookAir5,1",
"MacBook Air (13-inch, Mid 2011)": "MacBookAir4,2",
"MacBook Air (11-inch, Mid 2011)": "MacBookAir4,1",
"MacBook Air (13-inch, Late 2010)": "MacBookAir3,2",
"MacBook Air (11-inch, Late 2010)": "MacBookAir3,1",
"MacBook Air (Mid 2009)": "MacBookAir2,1",
"MacBook Pro (13-inch, M1, 2020)": "MacBookPro17,1",
"MacBook Pro (13-inch, 2020, Two Thunderbolt 3 ports)": "MacBookPro16,3",
"MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)": "MacBookPro16,2",
"MacBook Pro (16-inch, 2019)": "MacBookPro16,1, MacBookPro16,4",
"MacBook Pro (13-inch, 2019, Two Thunderbolt 3 ports)": "MacBookPro15,4",
"MacBook Pro (15-inch, 2019)": "MacBookPro15,1, MacBookPro15,3",
"MacBook Pro (13-inch, 2019, Four Thunderbolt 3 ports)": "MacBookPro15,2",
"MacBook Pro (15-inch, 2018)": "MacBookPro15,1",
"MacBook Pro (13-inch, 2018, Four Thunderbolt 3 ports)": "MacBookPro15,2",
"MacBook Pro (15-inch, 2017)": "MacBookPro14,3",
"MacBook Pro (13-inch, 2017, Four Thunderbolt 3 ports)": "MacBookPro14,2",
"MacBook Pro (13-inch, 2017, Two Thunderbolt 3 ports)": "MacBookPro14,1",
"MacBook Pro (15-inch, 2016)": "MacBookPro13,3",
"MacBook Pro (13-inch, 2016, Four Thunderbolt 3 ports)": "MacBookPro13,2",
"MacBook Pro (13-inch, 2016, Two Thunderbolt 3 ports)": "MacBookPro13,1",
"MacBook Pro (Retina, 15-inch, Mid 2015)": "MacBookPro11,4, MacBookPro11,5",
"MacBook Pro (Retina, 13-inch, Early 2015)": "MacBookPro12,1",
"MacBook Pro (Retina, 15-inch, Mid 2014)": "MacBookPro11,2, MacBookPro11,3",
"MacBook Pro (Retina, 13-inch, Mid 2014)": "MacBookPro11,1",
"MacBook Pro (Retina, 15-inch, Late 2013)": "MacBookPro11,2, MacBookPro11,3",
"MacBook Pro (Retina, 13-inch, Late 2013)": "MacBookPro11,1",
"MacBook Pro (Retina, 15-inch, Early 2013)": "MacBookPro10,1",
"MacBook Pro (Retina, 13-inch, Early 2013)": "MacBookPro10,2",
"MacBook Pro (Retina, 13-inch, Late 2012)": "MacBookPro10,2",
"MacBook Pro (Retina, 15-inch, Mid 2012)": "MacBookPro10,1",
"MacBook Pro (15-inch, Mid 2012)": "MacBookPro9,1",
"MacBook Pro (13-inch, Mid 2012)": "MacBookPro9,2",
"MacBook Pro (17-inch, Late 2011)": "MacBookPro8,3",
"MacBook Pro (15-inch, Late 2011)": "MacBookPro8,2",
"MacBook Pro (13-inch, Late 2011)": "MacBookPro8,1",
"MacBook Pro (17-inch, Early 2011)": "MacBookPro8,3",
"MacBook Pro (15-inch, Early 2011)": "MacBookPro8,2",
"MacBook Pro (13-inch, Early 2011)": "MacBookPro8,1",
"MacBook Pro (17-inch, Mid 2010)": "MacBookPro6,1",
"MacBook Pro (15-inch, Mid 2010)": "MacBookPro6,2",
"MacBook Pro (13-inch, Mid 2010)": "MacBookPro7,1",
"MacBook Pro (17-inch, Mid 2009)": "MacBookPro5,2",
"MacBook Pro (15-inch, Mid 2009)": "MacBookPro5,3",
"MacBook Pro (15-inch, 2.53GHz, Mid 2009)": "MacBookPro5,3",
"MacBook Pro (13-inch, Mid 2009)": "MacBookPro5,5",
"MacBook Pro (17-inch, Early 2009)": "MacBookPro5,2",
"MacBook Pro (15-inch, Late 2008)": "MacBookPro5,1",
"MacBook Pro (17-inch, Early 2008)": "MacBookPro4,1",
"MacBook Pro (15-inch, Early 2008)": "MacBookPro4,1",
"Mac mini (M1, 2020)": "Macmini9,1",
"Mac mini (2018)": "Macmini8,1",
"Mac mini (Late 2014)": "Macmini7,1",
"Mac mini (Late 2012)": "Macmini6,1; Macmini6,2",
"Mac mini (Mid 2011)": "Macmini5,1; Macmini5,2",
"Mac mini (Mid 2010)": "Macmini4,1",
"Mac mini (Late 2009)": "Macmini3,1",
"Mac mini (Early 2009)": "Macmini3,1",
"Mac Pro (2019)": "MacPro7,1",
"Mac Pro (Rack, 2019)": "MacPro7,1",
"Mac Pro (Late 2013)": "MacPro6,1",
"Mac Pro (Mid 2012)": "MacPro5,1",
"Mac Pro Server (Mid 2012)": "MacPro5,1",
"Mac Pro (Mid 2010)": "MacPro5,1",
"Mac Pro Server (Mid 2010)": "MacPro5,1",
"Mac Pro (Early 2009)": "MacPro4,1"
}
40 changes: 27 additions & 13 deletions generate.ts
Original file line number Diff line number Diff line change
@@ -1,30 +1,44 @@
import * as path from "https://deno.land/[email protected]/path/mod.ts";

async function main() {
Deno.chdir(path.dirname(path.fromFileUrl(import.meta.url)));
function timer() {
const start = performance.now();
return function time() {
return performance.now() - start;
};
}

async function main(dir = "devices") {
const timeWriting = timer();

const readPromises = [...Deno.readDirSync(dir)]
.map((entry) => entry.name)
.filter((name) => name.endsWith(".json"))
.sort((a, b) => a.localeCompare(b))
.map((name) => path.join(dir, name))
.map((path) => Deno.readTextFile(path));

const all: Record<string, string> = {};
const files = await Promise.all(readPromises);

for await (const entry of Deno.readDir("devices")) {
const string = await Deno.readTextFile(path.join("devices", entry.name));
const json = JSON.parse(string);
Object.assign(all, json);
}
const objects = files.map((text) => JSON.parse(text));

const ids = JSON.stringify(all, null, 2);
const data = Object.assign({}, ...objects);

const devices = JSON.stringify(data, null, 2);

// JSON is now officially a subset of ECMAScript, so this is fine.
const out = `
const mod = `
// This file was generated automatically (./generate.ts)
// Don't edit this file directly.
export const devices = ${ids} as const;
export const devices = ${devices} as const;
`.trimStart();

await Promise.all([
Deno.writeTextFile("devices.json", ids),
Deno.writeTextFile("mod.ts", out),
Deno.writeTextFile("devices.json", devices + "\n"),
Deno.writeTextFile("mod.ts", mod),
]);

console.log(`Generated in ${timeWriting()} ms`);
}

if (import.meta.main) {
Expand Down
Loading

0 comments on commit 537d7d7

Please sign in to comment.