diff --git a/.github/workflows/automation-scripts/update-changelogs.mjs b/.github/workflows/automation-scripts/update-changelogs.mjs index 1305df381f2..c4a2bd459a1 100644 --- a/.github/workflows/automation-scripts/update-changelogs.mjs +++ b/.github/workflows/automation-scripts/update-changelogs.mjs @@ -108,17 +108,6 @@ if (targetBranch === `origin/${currentBranch}`) { // copy all changelogs from the current branch to ./temp-incoming-changelogs, the files will be named: package_name_CHANGELOG.json await $`find ./ -type f -name "CHANGELOG.json" -not -path "*/node_modules/*" -exec sh -c 'cp "{}" "./temp-incoming-changelogs/$(echo "{}" | sed "s/^.\\///; s/\\//_/g")"' \\;`; -// before checking out to target branch -// if it is a major or minor release, we need to update `gather-docs.yaml`'s branchName value to be the release branch -if (commitMessage.endsWith(".0")) { - const docsYamlPath = "common/config/azure-pipelines/templates/gather-docs.yaml"; - editFileInPlaceSynchronously(docsYamlPath, /release\/\d+\.\d+\.\w+/g, currentBranch); - // commit these changes to our release branch - await $`git add ${docsYamlPath}`; - await $`git commit -m "Update gather-docs.yaml's branch name to the release branch"`; - await $`git push origin HEAD:${currentBranch}`; -} - targetBranch = targetBranch.replace("origin/", ""); await $`git checkout ${targetBranch}`; // copy all changelogs from the target branch to ./temp-target-changelogs, the files will be named: package_name_CHANGELOG.json diff --git a/common/config/azure-pipelines/jobs/check-gather-docs.yaml b/common/config/azure-pipelines/jobs/check-gather-docs.yaml new file mode 100644 index 00000000000..66ddacdb263 --- /dev/null +++ b/common/config/azure-pipelines/jobs/check-gather-docs.yaml @@ -0,0 +1,38 @@ +name: check-gather-docs +trigger: none + +resources: + pipelines: + - pipeline: 'itwinjs' + source: iTwin.js/iTwin.js + trigger: + enabled: true + branches: + include: + - release/* + tags: + - 'package-release' + +jobs: + - job: check-gather-docs + displayName: 'Check and update gather-docs.yaml branch' + pool: + vmImage: 'ubuntu-latest' + + variables: + - group: imodel-native-secret-variables + + steps: + - checkout: self + persistCredentials: true + clean: true + + - script: | + node common/scripts/check_gather_docs.mjs + git add . + git commit -m "Update gather-docs.yaml" + git push --set-upstream https://$(GH_TOKEN)@github.com/iTwin/itwinjs-core $(Build.SourceBranchName) + displayName: 'Check gather-docs.yaml branch' + env: + GITHUB_TOKEN: $(GH_TOKEN) + CURRENT_BRANCH: $(Build.SourceBranch) \ No newline at end of file diff --git a/common/scripts/check_gather_docs.mjs b/common/scripts/check_gather_docs.mjs new file mode 100644 index 00000000000..f5fb8853e70 --- /dev/null +++ b/common/scripts/check_gather_docs.mjs @@ -0,0 +1,70 @@ +import fs from "fs"; +import path from "path"; + +function checkFile(filePath, currentBranch) { + // const filePath = path.normalize("./common/config/azure-pipelines/templates/gather-docs.yaml") + if (!fs.existsSync(filePath)) { + console.error("File not found."); + process.exit(1); + } + + const fileContent = fs.readFileSync(filePath, "utf8"); + + const textToFind = /branchName: refs\/heads\/release\/\d+\.\d+\.x/gi; + const branchInFile = fileContent.match(textToFind); + + if (!branchInFile) { + console.error("No match for branch name found"); + process.exit(1); + } + + if (branchInFile[0] === `branchName: ${currentBranch}`) { + console.log("The current branch matches the branch in gather-docs.yaml. No update Needed."); + return false; + } + else { + const newContent = fileContent.replace(textToFind, `branchName: ${currentBranch}`); + fs.writeFileSync(filePath, newContent, "utf8"); + console.log("Updated gather-docs.yaml with the current branch."); + return true; + } +} + +function main() { + const filePath = path.normalize("./common/config/azure-pipelines/templates/gather-docs.yaml") + const currentBranch = process.env.CURRENT_BRANCH; + checkFile(filePath, currentBranch); +} +main(); + +// Tests +function createTempFile(name, content) { + const tempFilePath = path.join('./', `${name}`); + + fs.writeFileSync(tempFilePath, content, "utf8"); + console.log(`Temporary file created at: ${tempFilePath}`); + + return tempFilePath; +} + +function deleteTempFile(filePath) { + if (fs.existsSync(filePath)) { + fs.unlinkSync(filePath); + console.log(`Temporary file deleted: ${filePath}`); + } else { + console.log(`File not found: ${filePath}`); + } +} + +function tests() { + const currentBranch = "refs/heads/release/1.2.x"; + // Test for when file needs to be updated + let filePath = createTempFile("should-change.txt", "branchName: refs/heads/release/0.0.x"); + console.assert(checkFile(filePath, currentBranch) === true, "File should be updated"); + deleteTempFile(filePath); + + filePath = createTempFile("should-not-change.txt", "branchName: refs/heads/release/1.2.x"); + console.assert(checkFile(filePath, currentBranch) === false, "File should not be updated"); + deleteTempFile(filePath); +} +// tests(); \ No newline at end of file