diff --git a/.github/workflows/create-release-proposal.yml b/.github/workflows/create-release-proposal.yml index 5f0f80eed24c95..4a0760ff2a2b22 100644 --- a/.github/workflows/create-release-proposal.yml +++ b/.github/workflows/create-release-proposal.yml @@ -25,7 +25,7 @@ env: NODE_VERSION: lts/* permissions: - contents: write + contents: read jobs: releasePrepare: @@ -39,9 +39,6 @@ jobs: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: ref: ${{ env.STAGING_BRANCH }} - # Needs the whole git history for ncu to work - # See https://github.com/nodejs/node-core-utils/pull/486 - fetch-depth: 0 # Install dependencies - name: Install Node.js @@ -63,16 +60,15 @@ jobs: ncu-config set owner "${GITHUB_REPOSITORY_OWNER}" env: USERNAME: ${{ secrets.JENKINS_USER }} - GH_TOKEN: ${{ secrets.GH_USER_TOKEN }} + GH_TOKEN: ${{ github.token }} JENKINS_TOKEN: ${{ secrets.JENKINS_TOKEN }} - name: Set up ghauth config (Ubuntu) run: | - mkdir -p ~/.config/changelog-maker/ - echo '{ - "user": "'$(ncu-config get username)'", - "token": "'$(ncu-config get token)'" - }' > ~/.config/changelog-maker/config.json + jq '{user: env.USERNAME, token: env.TOKEN}' > "${XDG_CONFIG_HOME:-~/.config}/changelog-maker/config.json" + env: + USERNAME: ${{ secrets.JENKINS_USER }} + TOKEN: ${{ github.token }} - name: Setup git author run: | diff --git a/tools/actions/create-release.sh b/tools/actions/create-release.sh index 3a69b3f5602ffc..d990e30d89bfdc 100755 --- a/tools/actions/create-release.sh +++ b/tools/actions/create-release.sh @@ -10,24 +10,76 @@ if [ -z "$RELEASE_DATE" ] || [ -z "$RELEASE_LINE" ]; then exit 1 fi +buildMutationQuery() { + cat - <<'EOF' +mutation ($repo: String! $branch: String!, $parent: GitObjectID!, $commit_title: String!, $commit_body: String) { + createCommitOnBranch(input: { + branch: { + repositoryNameWithOwner: $repo, + branchName: $branch + }, + message: { + headline: $commit_title, + body: $commit_body + }, + expectedHeadOid: $parent, + fileChanges: { + additions: [ +EOF + git show HEAD --diff-filter=d --name-only --format= | while read -r FILE; do + echo "{ path: $( + node -p 'JSON.stringify(process.argv[1])' "$FILE" + ), contents: $( + node -p 'JSON.stringify(fs.readFileSync(process.argv[1]).toString("base64"))' "$FILE" + ) }," + done + echo '], deletions: [' + git show HEAD --diff-filter=D --name-only --format= | while read -r FILE; do + echo "$(node -p 'JSON.stringify(process.argv[1])' "$FILE")," + done + cat - <<'EOF' + ] + }}) { + commit { + url + } + } + } +EOF +} + + git node release --prepare --skipBranchDiff --yes --releaseDate "$RELEASE_DATE" -# We use it to not specify the branch name as it changes based on -# the commit list (semver-minor/semver-patch) -git config push.default current -git push + +HEAD="$(git rev-parse --abbrev-ref HEAD)" TITLE=$(awk "/^## ${RELEASE_DATE}/ { print substr(\$0, 4) }" "doc/changelogs/CHANGELOG_V${RELEASE_LINE}.md") # Use a temporary file for the PR body TEMP_BODY="$(awk "/## ${RELEASE_DATE}/,/^