Used inputs
This commit is contained in:
43
app.ts
43
app.ts
@@ -1,10 +1,11 @@
|
||||
import { spawn } from "child_process";
|
||||
import { ChildProcess, SpawnOptions } from "node:child_process";
|
||||
import * as core from '@actions/core';
|
||||
|
||||
// Ignored branches
|
||||
const IGNORED_BRANCHES = ["master", "main", "dev", "release"];
|
||||
const IGNORED_BRANCHES: string[] = core.getInput('branchesToIgnore', { required: false }).split(",");
|
||||
|
||||
const mainBranch = "dev";
|
||||
const mainBranch: string = `origin/${ core.getInput('mainBranch', { required: false }) }`;
|
||||
|
||||
enum Action {
|
||||
Rebase = 0,
|
||||
@@ -27,8 +28,9 @@ interface BranchWithDependencies {
|
||||
/**
|
||||
* Helper function to run a Git command and capture stdout and stderr.
|
||||
*/
|
||||
const runGitCommand = (args: string[], options?: SpawnOptions): Promise<string> =>
|
||||
new Promise((resolve, reject) => {
|
||||
const runGitCommand = (args: string[], options?: SpawnOptions): Promise<string> => {
|
||||
console.log(`Running git command: git ${ args.join(" ") }`);
|
||||
return new Promise((resolve, reject) => {
|
||||
const git: ChildProcess = spawn("git", args, { stdio: "pipe", ...options });
|
||||
let stdout: string = "";
|
||||
let stderr: string = "";
|
||||
@@ -41,6 +43,8 @@ const runGitCommand = (args: string[], options?: SpawnOptions): Promise<string>
|
||||
resolve(stdout) :
|
||||
reject(new Error(`Git command failed with code ${code}: ${stderr}`)));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Fetch all remote branches.
|
||||
@@ -52,11 +56,10 @@ const fetchBranches = async (): Promise<string[]> => {
|
||||
|
||||
return branches
|
||||
.split("\n")
|
||||
.map((branch) => branch.trim().replace("origin/", ""))
|
||||
.filter((branch) => !IGNORED_BRANCHES.includes(branch) && branch !== "");
|
||||
.map((branch) => branch.trim())
|
||||
.filter((branch) => !IGNORED_BRANCHES.includes(branch.replace("origin/", "")) && branch !== "");
|
||||
}
|
||||
|
||||
|
||||
// Get the full commit history for a branch
|
||||
const getCommitsForBranch = async (branch: string): Promise<Set<string>> => {
|
||||
const commits = await runGitCommand(["rev-list", branch]);
|
||||
@@ -173,14 +176,20 @@ const rebaseBranch = async ({
|
||||
|
||||
await runGitCommand([
|
||||
"checkout",
|
||||
branch
|
||||
branch.replace("origin/", "")
|
||||
]);
|
||||
|
||||
if(action === Action.Rebase) {
|
||||
await runGitCommand([
|
||||
"rebase",
|
||||
onBranch
|
||||
]);
|
||||
]).catch(async error => {
|
||||
console.error(error);
|
||||
await runGitCommand([
|
||||
"rebase",
|
||||
"--abort"
|
||||
])
|
||||
});
|
||||
} else if(action === Action.Reset) {
|
||||
await runGitCommand([
|
||||
"reset",
|
||||
@@ -195,11 +204,26 @@ const rebaseBranch = async ({
|
||||
]);
|
||||
}
|
||||
|
||||
const setupAutoRebaseGit = async () => {
|
||||
await runGitCommand([
|
||||
"config",
|
||||
"user.email",
|
||||
"auto-rebase@skydust.fr"
|
||||
]);
|
||||
await runGitCommand([
|
||||
"config",
|
||||
"user.name",
|
||||
"Auto Rebase"
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Main function to execute the workflow.
|
||||
*/
|
||||
const main = async (): Promise<void> => {
|
||||
try {
|
||||
await setupAutoRebaseGit();
|
||||
|
||||
// Step 1: Fetch branches
|
||||
const branches: string[] = (await fetchBranches());
|
||||
branches.push(mainBranch)
|
||||
@@ -219,6 +243,7 @@ const main = async (): Promise<void> => {
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Error during workflow execution:", error.message);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user