Initial QSfera import
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
const fs = require("node:fs");
|
||||
const { minimatch } = require("minimatch");
|
||||
|
||||
const type = process.argv[2];
|
||||
|
||||
function getSkipPatterns(type) {
|
||||
const base = [
|
||||
".github/**",
|
||||
".vscode/**",
|
||||
"docs/**",
|
||||
"deployments/**",
|
||||
"CHANGELOG.md",
|
||||
"CONTRIBUTING.md",
|
||||
"LICENSE",
|
||||
"README.md",
|
||||
];
|
||||
|
||||
const unit = ["**/*_test.go"];
|
||||
const acceptance = ["tests/acceptance/**"];
|
||||
|
||||
if (
|
||||
type === "acceptance-tests" ||
|
||||
type === "e2e-tests" ||
|
||||
type === "lint"
|
||||
) {
|
||||
return [...base, ...unit];
|
||||
}
|
||||
|
||||
if (type === "unit-tests") {
|
||||
return [...base, ...acceptance];
|
||||
}
|
||||
|
||||
if (
|
||||
type === "build-binary" ||
|
||||
type === "build-docker" ||
|
||||
type === "litmus"
|
||||
) {
|
||||
return [...base, ...unit, ...acceptance];
|
||||
}
|
||||
|
||||
if (type === "cache" || type === "base") {
|
||||
return base;
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
function main() {
|
||||
const skipPatterns = getSkipPatterns(type);
|
||||
|
||||
if (skipPatterns.length === 0) {
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
const rawFiles = process.env.CI_PIPELINE_FILES;
|
||||
|
||||
// If CI_PIPELINE_FILES is not set, we assume the pipeline should run
|
||||
if (!rawFiles) {
|
||||
console.log("[INFO] CI_PIPELINE_FILES not set → run pipeline");
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
let changedFiles;
|
||||
try {
|
||||
changedFiles = JSON.parse(rawFiles);
|
||||
} catch {
|
||||
console.error("[ERROR] Failed to parse CI_PIPELINE_FILES:", rawFiles);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if (changedFiles.length === 0) {
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
console.log("[INFO] Changed files:", changedFiles);
|
||||
|
||||
const onlySkippable = changedFiles.every((file) =>
|
||||
skipPatterns.some((pattern) =>
|
||||
minimatch(file, pattern, { dot: true, matchBase: true })
|
||||
)
|
||||
);
|
||||
|
||||
if (onlySkippable) {
|
||||
console.log("[INFO] Only skippable files changed → SKIP WORKFLOW");
|
||||
fs.appendFileSync(".woodpecker.env", "SKIP_WORKFLOW=true\n");
|
||||
} else {
|
||||
console.log("[INFO] Relevant changes detected → run pipeline");
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
Reference in New Issue
Block a user