mirror of
https://gitlab.com/Cynosphere/xmc.git
synced 2024-08-14 22:57:03 +00:00
setup ci
This commit is contained in:
parent
c1a4dd79e2
commit
185fe4ddf8
5 changed files with 199 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
node_modules/
|
36
.gitlab-ci.yml
Normal file
36
.gitlab-ci.yml
Normal file
|
@ -0,0 +1,36 @@
|
|||
image: node:16-alpine3.14
|
||||
|
||||
cache:
|
||||
key: "${CI_COMMIT_BRANCH}_${CI_JOB_NAME}_new"
|
||||
paths:
|
||||
- bin/node_modules/
|
||||
|
||||
splitter:
|
||||
stage: deploy
|
||||
before_script:
|
||||
- npm i -g pnpm
|
||||
- pnpm i -r
|
||||
- git config --global user.name "CI"
|
||||
- git config --global user.email "ci@c7.pm"
|
||||
script:
|
||||
- node bin/splitter.js xmc.user.css modular
|
||||
- git add modular
|
||||
- git commit -m "Make Modular"
|
||||
- git push "https://${GITLAB_USER_LOGIN}:${CI_GIT_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git" "HEAD:${CI_DEFAULT_BRANCH}"
|
||||
only:
|
||||
changes:
|
||||
- xmc.user.css
|
||||
|
||||
pages:
|
||||
stage: deploy
|
||||
script:
|
||||
- mkdir public
|
||||
- cp -r modular public
|
||||
- cp xmc.user.css public
|
||||
- sed -i "s/@version 0.0.0/@version 0+${CI_COMMIT_HASH:0:8}/" public/xmc.user.css
|
||||
artifactss:
|
||||
paths:
|
||||
- public
|
||||
except:
|
||||
changes:
|
||||
- xmc.user.css
|
13
bin/package.json
Normal file
13
bin/package.json
Normal file
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"name": "usercss-splitter",
|
||||
"version": "0.0.1",
|
||||
"description": "",
|
||||
"main": "splitter.js",
|
||||
"keywords": [],
|
||||
"author": "Cynosphere",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"mkdirp": "^1.0.4",
|
||||
"usercss-meta": "^0.12.0"
|
||||
}
|
||||
}
|
22
bin/pnpm-lock.yaml
Normal file
22
bin/pnpm-lock.yaml
Normal file
|
@ -0,0 +1,22 @@
|
|||
lockfileVersion: 5.4
|
||||
|
||||
specifiers:
|
||||
mkdirp: ^1.0.4
|
||||
usercss-meta: ^0.12.0
|
||||
|
||||
dependencies:
|
||||
mkdirp: 1.0.4
|
||||
usercss-meta: 0.12.0
|
||||
|
||||
packages:
|
||||
|
||||
/mkdirp/1.0.4:
|
||||
resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
|
||||
engines: {node: '>=10'}
|
||||
hasBin: true
|
||||
dev: false
|
||||
|
||||
/usercss-meta/0.12.0:
|
||||
resolution: {integrity: sha512-zKrXCKdpeIwtVe87omxGo9URf+7mbozduMZEg79dmT4KB3XJwfIkEi/Uk0PcTwR/nZLtAK1+k7isgbGB/g6E7Q==}
|
||||
engines: {node: '>=8.3'}
|
||||
dev: false
|
127
bin/splitter.js
Normal file
127
bin/splitter.js
Normal file
|
@ -0,0 +1,127 @@
|
|||
const mkdirp = require("mkdirp");
|
||||
const usercssMeta = require("usercss-meta");
|
||||
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
|
||||
/****/
|
||||
|
||||
const inputFile = process.argv[1];
|
||||
const outputDir = process.argv[2];
|
||||
|
||||
if (!fs.existsSync(inputFile)) {
|
||||
console.log("input does not exist");
|
||||
process.exit(1);
|
||||
}
|
||||
if (!fs.existsSync(outputDir)) mkdirp.sync(outputDir);
|
||||
|
||||
const css = fs.readFileSync(inputFile, "utf8");
|
||||
|
||||
const files = {};
|
||||
|
||||
const preprocessors = {
|
||||
default: true,
|
||||
uso: true,
|
||||
};
|
||||
|
||||
const usercssParser = usercssMeta.createParser({
|
||||
mandatoryKeys: [],
|
||||
validateKey: {
|
||||
preprocessor: (state) => {
|
||||
const preprocessor = state.value ?? "default";
|
||||
if (!preprocessors[preprocessor])
|
||||
throw new usercssMeta.ParseError({
|
||||
message: `Unsupported preprocessor: ${preprocessor}`,
|
||||
code: "unknownPreprocessor",
|
||||
args: [state.value],
|
||||
index: state.valueIndex,
|
||||
});
|
||||
},
|
||||
},
|
||||
validateVar: {
|
||||
select: (state) => {
|
||||
if (state.varResult.options.every((o) => o.name !== state.value)) {
|
||||
throw new usercssMeta.ParseError({
|
||||
code: "invalidSelectValueMismatch",
|
||||
index: state.valueIndex,
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
/****/
|
||||
|
||||
try {
|
||||
//parser won't parse \r
|
||||
const cssUnixEndings = css.replace(/\r/g, "");
|
||||
|
||||
const parsed = usercssParser.parse(cssUnixEndings);
|
||||
if (!parsed?.metadata || Object.keys(parsed.metadata).length == 0) {
|
||||
console.log("UserCSS file has no valid metadata.");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if (parsed.errors.length > 0) {
|
||||
console.log("UserCSS parsed with errors:");
|
||||
for (const error of parsed.errors) {
|
||||
console.log(error);
|
||||
}
|
||||
}
|
||||
|
||||
const sections = cssUnixEndings.match(/@-moz-document(.*?){\n(.*?\n)}/gs);
|
||||
if (sections) {
|
||||
for (const index in sections) {
|
||||
const section = sections[index];
|
||||
const content = section.match(/@-moz-document(.*?){\n(.*?\n)}/s)[2];
|
||||
if (sections.length > 1) {
|
||||
files["section-" + index] = content;
|
||||
} else {
|
||||
files["base"] = content;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (const key of Object.keys(parsed.metadata.vars)) {
|
||||
const setting = parsed.metadata.vars[key];
|
||||
if (setting.type != "select") continue;
|
||||
const options = setting.options.filter((x) => x.value != "");
|
||||
if (options.length > 1) {
|
||||
for (const option of options) {
|
||||
files[
|
||||
key.replace("xmc_", "") +
|
||||
"/" +
|
||||
option.name.toLowerCase().replace(/ /g, "_")
|
||||
] = option.value;
|
||||
}
|
||||
} else {
|
||||
files[key.replace("xmc_", "")] = options[0].value;
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.log("UserCSS parsing failed: " + err);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
/****/
|
||||
|
||||
try {
|
||||
for (const filePath of Object.keys(files)) {
|
||||
const contents = files[filePath];
|
||||
if (filePath.indexOf("/") > -1) {
|
||||
const [subfolder, name] = filePath.split("/");
|
||||
if (!fs.existsSync(path.join(outputDir, subfolder)))
|
||||
mkdirp.sync(path.join(outputDir, subfolder));
|
||||
|
||||
fs.writeFileSync(
|
||||
path.join(outputDir, subfolder, name + ".css"),
|
||||
contents
|
||||
);
|
||||
} else {
|
||||
fs.writeFileSync(path.join(outputDir, name + ".css"), contents);
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.log("Failed to write files: " + err);
|
||||
process.exit(1);
|
||||
}
|
Loading…
Reference in a new issue