const core = require("@actions/core"); async function getAndPostPullRequests() { try { core.info("Starting the action..."); // Retrieve inputs and token const baseUrl = core.getInput("base_url") || "https://git.horstenkamp.eu"; const owner = core.getInput("owner") || process.env.GITHUB_REPOSITORY_OWNER; const repo = core.getInput("repo") || process.env.GITHUB_REPOSITORY.split("/")[1]; const base_branch = core.getInput("base_branch") || "main"; const title = core.getInput("title"); const body = core.getInput("body") || ""; const assigneesInput = core.getInput("assignees"); const labelsInput = core.getInput("labels"); const dueDate = core.getInput("due_date"); const milestone = core.getInput("milestone"); const token = core.getInput("token"); let branch = core.getInput("branch"); if (!token || token.trim() === "") { throw new Error("No token provided. Please provide a valid token."); } // Construct the URL for the requests const url = `${baseUrl}/api/v1/repos/${owner}/${repo}/pulls`; // Headers with Authorization const headers = { "Content-Type": "application/json", accept: "application/json", }; core.info(`token ${token}`); // Logic for current branch // Prepare POST data const postData = { title: title, body: body, head: branch, base: base_branch, assignees: assigneesInput ? assigneesInput.split(",") : [], // Changed to be omitted if empty labels: labelsInput ? labelsInput.split(",") : [], // Changed to be omitted if empty due_date: dueDate || undefined, // Changed to be omitted if empty milestone: milestone ? parseInt(milestone, 10) : 0, // Changed to be omitted if empty }; // Perform the GET request to check if a similar PR exists const getResponse = await fetch(`${url}?state=open&head=${branch}`, { headers, }); // Perform the POST request core.info(`URL for POST request: ${url}`); core.info(`POST data being sent: ${JSON.stringify(postData, null, 2)}`); core.info(`URL with token: ${url}?access_token=${token}`); const postResponse = await fetch(`${url}?access_token=${token}`, { method: "POST", headers, body: JSON.stringify(postData), }); const postResponseText = await postResponse.text(); core.info(`POST request status: ${postResponse.status}`); core.info(`POST response body: ${postResponseText}`); if (!postResponse.ok) { throw new Error( `HTTP error! status on creating a new PR: ${postResponse.status}`, ); } const postResult = await postResponse.json(); core.info("POST request completed successfully."); return postResult; } catch (error) { core.setFailed(`Action failed with error: ${error}`); } } // Call the function getAndPostPullRequests();