diff --git a/.github/workflows/sync-ghes.yaml b/.github/workflows/sync-ghes.yaml index 5d39d18e4c..e8ea30e78f 100644 --- a/.github/workflows/sync-ghes.yaml +++ b/.github/workflows/sync-ghes.yaml @@ -20,6 +20,13 @@ jobs: node-version: '20' cache: 'npm' cache-dependency-path: script/sync-ghes/package-lock.json + + # # The V4 Artifact actions are not yet supported on GHES + # # This step ensure any compatible workflows continue to work on GHES + # - run: | + # find . -type f \( -name '*.yaml' -o -name '*.yml' \) ! -path './.github/workflows/*' -exec sed -i '' 's/actions\/upload-artifact@v4/actions\/upload-artifact@v3/g' {} \; + # find . -type f \( -name '*.yaml' -o -name '*.yml' \) ! -path './.github/workflows/*' -exec sed -i '' 's/actions\/download-artifact@v4/actions\/download-artifact@v3/g' {} \; + - name: Check starter workflows for GHES compat run: | npm ci diff --git a/script/sync-ghes/index.ts b/script/sync-ghes/index.ts index fcdaaad5e2..99c746bd60 100755 --- a/script/sync-ghes/index.ts +++ b/script/sync-ghes/index.ts @@ -196,6 +196,27 @@ async function checkWorkflow( }) ), ]); + + // The v4 versions of upload and download artifact are not yet supported on GHES + console.group("Updating all compatible workflows to use v3 of the artifact actions"); + for (const workflow of result.compatibleWorkflows) { + const path = join(workflow.folder, `${workflow.id}.yml`); + console.log(`Updating ${path}`); + const contents = await fs.readFile(path, "utf8"); + + if (contents.includes("actions/upload-artifact@v4") || contents.includes("actions/download-artifact@v4")) { + console.log("Found v4 artifact actions, updating to v3"); + } else { + continue; + } + + let updatedContents = contents.replace(/actions\/upload-artifact@v4/g, "actions/upload-artifact@v3"); + updatedContents = updatedContents.replace(/actions\/download-artifact@v4/g, "actions/download-artifact@v3"); + + await fs.writeFile(path, updatedContents); + } + console.groupEnd(); + } catch (e) { console.error("Unhandled error while syncing workflows", e); process.exitCode = 1;