Compare commits
3 Commits
v0.2.6
...
4c2441b9e5
| Author | SHA1 | Date | |
|---|---|---|---|
|
4c2441b9e5
|
|||
|
494b4b239d
|
|||
|
8c242214fb
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -103,4 +103,5 @@ distribution/*
|
|||||||
mirrorlist
|
mirrorlist
|
||||||
mirrors*.json
|
mirrors*.json
|
||||||
mirrors.md
|
mirrors.md
|
||||||
|
head.md
|
||||||
.env
|
.env
|
||||||
|
|||||||
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "artix-mlg",
|
"name": "artix-mlg",
|
||||||
"version": "0.2.6",
|
"version": "0.2.7",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "artix-mlg",
|
"name": "artix-mlg",
|
||||||
"version": "0.2.6",
|
"version": "0.2.7",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"country-code-lookup": "0.1.3",
|
"country-code-lookup": "0.1.3",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "artix-mlg",
|
"name": "artix-mlg",
|
||||||
"version": "0.2.6",
|
"version": "0.2.7",
|
||||||
"description": "mirrorlist generator for Artix Linux",
|
"description": "mirrorlist generator for Artix Linux",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"artix",
|
"artix",
|
||||||
|
|||||||
60
src/index.ts
60
src/index.ts
@@ -10,6 +10,7 @@ const inputFile = process.env['INPUT'] || path.join(process.cwd(), 'mirrors.json
|
|||||||
const fixtureFile = process.env['FIXTURE'] || path.join(process.cwd(), 'mirrors.fixture.json');
|
const fixtureFile = process.env['FIXTURE'] || path.join(process.cwd(), 'mirrors.fixture.json');
|
||||||
const mirrorList = process.env['MIRRORLIST'] || path.join(process.cwd(), 'mirrorlist');
|
const mirrorList = process.env['MIRRORLIST'] || path.join(process.cwd(), 'mirrorlist');
|
||||||
const mirrorMd = process.env['MIRRORMD'] || path.join(process.cwd(), 'mirrors.md');
|
const mirrorMd = process.env['MIRRORMD'] || path.join(process.cwd(), 'mirrors.md');
|
||||||
|
const mdHeadFile = process.env['MDHEADER'] || path.join(process.cwd(), 'head.md');
|
||||||
const verbose = !!process.env['VERBOSE'];
|
const verbose = !!process.env['VERBOSE'];
|
||||||
|
|
||||||
const protocolId: Record<Protocol, number> = {
|
const protocolId: Record<Protocol, number> = {
|
||||||
@@ -69,7 +70,6 @@ interface UrlComponents {
|
|||||||
type MirrorMap = { [name: string]: Mirror };
|
type MirrorMap = { [name: string]: Mirror };
|
||||||
|
|
||||||
let mirrorCounter = 0;
|
let mirrorCounter = 0;
|
||||||
let mirrorUrlCounter = 0;
|
|
||||||
|
|
||||||
function setMirrors(fixture: FixtureObject[]) {
|
function setMirrors(fixture: FixtureObject[]) {
|
||||||
const mirrors: MirrorMap = {};
|
const mirrors: MirrorMap = {};
|
||||||
@@ -130,25 +130,25 @@ function updateMirror(m: Mirror, profile: MirrorProfile, url: UrlComponents) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function processMirrorProfile(m: MirrorProfile) {
|
function processMirrorProfile(m: MirrorProfile, index: number) {
|
||||||
const url: UrlComponents = processUrl(m.url);
|
const url: UrlComponents = processUrl(m.url);
|
||||||
const mirror: Mirror = getMirror(m.force_mirror_name || url.name);
|
const mirror: Mirror = getMirror(m.force_mirror_name || url.name);
|
||||||
updateMirror(mirror, m, url);
|
updateMirror(mirror, m, url);
|
||||||
const mirrorUrl: MirrorUrl = {
|
const mirrorUrl: MirrorUrl = {
|
||||||
pk: ++mirrorUrlCounter,
|
pk: index + 1,
|
||||||
model: 'mirrors.MirrorUrl',
|
model: 'mirrors.MirrorUrl',
|
||||||
fields: {
|
fields: {
|
||||||
url: url.partial,
|
url: url.partial,
|
||||||
protocol: protocolId[url.protocol],
|
protocol: protocolId[url.protocol],
|
||||||
mirror: mirror.pk,
|
mirror: mirror.pk,
|
||||||
country: resolveCountry(m.country)?.iso2 || undefined,
|
country: resolveCountry(m.country)?.iso2 || undefined,
|
||||||
// populate ip fields with `mirrorresolv`
|
// populate ip fields with `mirrorresolv`
|
||||||
has_ipv4: false,
|
has_ipv4: false,
|
||||||
has_ipv6: false,
|
has_ipv6: false,
|
||||||
active: m.active
|
active: m.active
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
mirrorUrls.push(mirrorUrl);
|
mirrorUrls.push(mirrorUrl);
|
||||||
pushMirrorProfile(m.force_mirror_name || url.name, m);
|
pushMirrorProfile(m.force_mirror_name || url.name, m);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,7 +183,7 @@ function generateMirrorlist(mirrors: MirrorProfile[] = []): string {
|
|||||||
const lines: string[] = [
|
const lines: string[] = [
|
||||||
'##',
|
'##',
|
||||||
'## Artix Linux repository mirrorlist',
|
'## Artix Linux repository mirrorlist',
|
||||||
`## Generated on ${getDateTime()}`,
|
`## Generated on ${getDateTime()} by artix-mlg`,
|
||||||
'##',
|
'##',
|
||||||
'',
|
'',
|
||||||
'# Artix mirrors',
|
'# Artix mirrors',
|
||||||
@@ -199,7 +199,18 @@ function generateMirrorlist(mirrors: MirrorProfile[] = []): string {
|
|||||||
return lines.join('\n');
|
return lines.join('\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
function generateMirrorMd(): string {
|
async function generateMirrorMd(): Promise<string> {
|
||||||
|
async function tryReadHeader(): Promise<string[]> {
|
||||||
|
try {
|
||||||
|
return [await fsp.readFile(mdHeadFile, 'utf-8')];
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
if (verbose) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
function pushTableRowIfTruthy(lines: string[], label: string, value: string | undefined | null | false) {
|
function pushTableRowIfTruthy(lines: string[], label: string, value: string | undefined | null | false) {
|
||||||
if (value) {
|
if (value) {
|
||||||
lines.push(`| ${label} | ${value} |`);
|
lines.push(`| ${label} | ${value} |`);
|
||||||
@@ -208,15 +219,14 @@ function generateMirrorMd(): string {
|
|||||||
function findFirstWithChild<T, K extends keyof T>(profiles: T[], key: K): T[K] | undefined {
|
function findFirstWithChild<T, K extends keyof T>(profiles: T[], key: K): T[K] | undefined {
|
||||||
return profiles.find(p => !!p[key])?.[key];
|
return profiles.find(p => !!p[key])?.[key];
|
||||||
}
|
}
|
||||||
const lines: string[] = [
|
const lines: string[] = await tryReadHeader();
|
||||||
'# Mirrors\n\nContact or other information for the mirrors of our repositories and ISOs.\n'
|
lines.push('# Mirrors\n\nContact or other information for the mirrors of our repositories and ISOs.\n');
|
||||||
]
|
|
||||||
for (let mirrorName in mirrorProfilesByMirrorName) {
|
for (let mirrorName in mirrorProfilesByMirrorName) {
|
||||||
const profiles: MirrorProfile[] = mirrorProfilesByMirrorName[mirrorName];
|
const profiles: MirrorProfile[] = mirrorProfilesByMirrorName[mirrorName];
|
||||||
const activeProfiles: MirrorProfile[] = profiles.filter(p => p.active);
|
const activeProfiles: MirrorProfile[] = profiles.filter(p => p.active);
|
||||||
const urls: string[] = profiles.map(p => {
|
const urls: string[] = profiles.map(p => {
|
||||||
const url = p.url.split('$repo')[0];
|
const url = p.url.split('$repo')[0];
|
||||||
return p.active ? url: `${url} (inactive)`;
|
return p.active ? url : `${url} (inactive)`;
|
||||||
});
|
});
|
||||||
const upstream = findFirstWithChild(activeProfiles, 'upstream');
|
const upstream = findFirstWithChild(activeProfiles, 'upstream');
|
||||||
lines.push(`### ${mirrorName}`);
|
lines.push(`### ${mirrorName}`);
|
||||||
@@ -265,7 +275,7 @@ async function main() {
|
|||||||
|
|
||||||
await fsp.writeFile(fixtureFile, JSON.stringify(composeMirrorFixture(), null, 4));
|
await fsp.writeFile(fixtureFile, JSON.stringify(composeMirrorFixture(), null, 4));
|
||||||
await fsp.writeFile(mirrorList, generateMirrorlist(input.mirrors?.filter(m => m.public && m.active && !m.suppress) || []));
|
await fsp.writeFile(mirrorList, generateMirrorlist(input.mirrors?.filter(m => m.public && m.active && !m.suppress) || []));
|
||||||
await fsp.writeFile(mirrorMd, generateMirrorMd());
|
await fsp.writeFile(mirrorMd, await generateMirrorMd());
|
||||||
}
|
}
|
||||||
|
|
||||||
export default main;
|
export default main;
|
||||||
|
|||||||
Reference in New Issue
Block a user