Skip to content

Commit

Permalink
ci: update_index.yml
Browse files Browse the repository at this point in the history
  • Loading branch information
Ayideyia committed Sep 26, 2024
1 parent 1766ffe commit c518b90
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 0 deletions.
36 changes: 36 additions & 0 deletions .github/workflows/update_index.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: Update

on:
workflow_dispatch:
push:
branches: [main]
schedule:
- cron: "50 22 * * *" # 6:50 AM UTC+8

jobs:
Generate:
permissions: write-all
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- name: Generate rule-set index
run: |
git clone -b meta --depth=1 https://github.com/MetaCubeX/meta-rules-dat.git meta
git clone -b sing --depth=1 https://github.com/MetaCubeX/meta-rules-dat.git sing
node generate.mjs
openssl dgst -sha256 meta.json | sed 's/([^)]*)//g' > meta-version.txt
openssl dgst -sha256 sing.json | sed 's/([^)]*)//g' > sing-version.txt
- name: Create Release and Upload Assets
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ./{meta.json,sing.json,meta-version.txt,sing-version.txt}
file_glob: true
tag: latest
release_name: latest
overwrite: true
draft: false
prerelease: false
body: ""
2 changes: 2 additions & 0 deletions description-map.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export const meta = {};
export const sing = {};
64 changes: 64 additions & 0 deletions generate.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import fs from "fs";
import { meta, sing } from "./description-map.mjs";

function generate(client, path, geodata, ext) {
const dirs = fs.readdirSync(path, { encoding: "utf-8" });
const files = dirs.filter((file) => file.endsWith(ext));
const list = files.map((item) => {
const name = item.substring(0, item.length - ext.length);
const content = fs.readFileSync(path + item, { encoding: "utf-8" });
let count = 0;

if (ext === ".list") {
count = content.split("\n").length;
} else if (ext === ".json") {
count = JSON.parse(content).rules.reduce(
(p, c) =>
Object.values(c).reduce(
(p, c) => (Array.isArray(c) ? p + c.length : p + 1),
0
) + p,
0
);
}

return {
name,
description: { meta, sing }[client][name],
type: geodata,
count,
};
});
return list;
}

function generateMeta() {
const geosite = generate("meta", "./meta/geo/geosite/", "geosite", ".list");
const geoip = generate("meta", "./meta/geo/geoip/", "geoip", ".list");
const content = JSON.stringify({
geosite:
"https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/refs/heads/meta/geo/geosite/",
geoip:
"https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/refs/heads/meta/geo/geoip/",
list: geosite.concat(geoip),
});

fs.writeFileSync("./meta.json", content, { encoding: "utf-8" });
}

function generateSing() {
const geosite = generate("sing", "./sing/geo/geosite/", "geosite", ".json");
const geoip = generate("sing", "./sing/geo/geoip/", "geoip", ".json");
const content = JSON.stringify({
geosite:
"https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/refs/heads/sing/geo/geosite/",
geoip:
"https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/refs/heads/sing/geo/geoip/",
list: geosite.concat(geoip),
});

fs.writeFileSync("./sing.json", content, { encoding: "utf-8" });
}

generateMeta();
generateSing();

0 comments on commit c518b90

Please sign in to comment.