diff --git a/.github/workflow-scripts/__tests__/createDraftRelease-test.js b/.github/workflow-scripts/__tests__/createDraftRelease-test.js index 587e48e6d320bc..b1b330acd87fa5 100644 --- a/.github/workflow-scripts/__tests__/createDraftRelease-test.js +++ b/.github/workflow-scripts/__tests__/createDraftRelease-test.js @@ -121,7 +121,7 @@ describe('Create Draft Release', () => { }); describe('#_computeBody', () => { - it('computes body for release', async () => { + it('computes body for release when no hermes versions are passed', async () => { const version = '0.77.1'; const changelog = `## v${version} ### Breaking Changes @@ -134,20 +134,83 @@ describe('Create Draft Release', () => { #### iOS - [PR #3436](https://github.com/facebook/react-native/pull/3436) - Some other change - [PR #3437](https://github.com/facebook/react-native/pull/3437) - Some other change`; - const body = _computeBody(version, changelog); + const body = _computeBody(changelog, version); expect(body).toEqual(`${changelog} --- Hermes dSYMS: -- [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-hermes-framework-dSYM-debug.tar.gz) -- [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-hermes-framework-dSYM-release.tar.gz) +- [Debug](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${version}/hermes-ios-${version}-hermes-framework-dSYM-debug.tar.gz) +- [Release](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${version}/hermes-ios-${version}-hermes-framework-dSYM-release.tar.gz) + +Hermes V1 dSYMS: +- [Debug](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${version}/hermes-ios-${version}-hermes-framework-dSYM-debug.tar.gz) +- [Release](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${version}/hermes-ios-${version}-hermes-framework-dSYM-release.tar.gz) + +ReactNativeDependencies dSYMs: +- [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-dependencies-dSYM-debug.tar.gz) +- [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-dependencies-dSYM-release.tar.gz) + +ReactNative Core dSYMs: +- [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-core-debug.tar.gz) +- [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-core-release.tar.gz) + +--- + +You can file issues or pick requests against this release [here](https://github.com/reactwg/react-native-releases/issues/new/choose). + +--- + +To help you upgrade to this version, you can use the [Upgrade Helper](https://react-native-community.github.io/upgrade-helper/) ⚛️. + +--- + +View the whole changelog in the [CHANGELOG.md file](https://github.com/facebook/react-native/blob/main/CHANGELOG.md).`); + }); + + it('computes body for release when hermes versions are passed', async () => { + const version = '0.77.1'; + const hermesVersion = '0.15.0'; + const hermesV1Version = '250829098.0.2'; + const changelog = `## v${version} +### Breaking Changes +- [PR #9012](https://github.com/facebook/react-native/pull/9012) - Some other change + +#### Android +- [PR #3456](https://github.com/facebook/react-native/pull/3456) - Some other change +- [PR #3457](https://github.com/facebook/react-native/pull/3457) - Some other change + +#### iOS +- [PR #3436](https://github.com/facebook/react-native/pull/3436) - Some other change +- [PR #3437](https://github.com/facebook/react-native/pull/3437) - Some other change`; + const body = _computeBody( + changelog, + version, + hermesVersion, + hermesV1Version, + ); + + expect(body).toEqual(`${changelog} + +--- + +Hermes dSYMS: +- [Debug](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesVersion}/hermes-ios-${hermesVersion}-hermes-framework-dSYM-debug.tar.gz) +- [Release](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesVersion}/hermes-ios-${hermesVersion}-hermes-framework-dSYM-release.tar.gz) + +Hermes V1 dSYMS: +- [Debug](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesV1Version}/hermes-ios-${hermesV1Version}-hermes-framework-dSYM-debug.tar.gz) +- [Release](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesV1Version}/hermes-ios-${hermesV1Version}-hermes-framework-dSYM-release.tar.gz) ReactNativeDependencies dSYMs: - [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-dependencies-dSYM-debug.tar.gz) - [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-dependencies-dSYM-release.tar.gz) +ReactNative Core dSYMs: +- [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-core-debug.tar.gz) +- [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-core-release.tar.gz) + --- You can file issues or pick requests against this release [here](https://github.com/reactwg/react-native-releases/issues/new/choose). diff --git a/.github/workflow-scripts/createDraftRelease.js b/.github/workflow-scripts/createDraftRelease.js index 7b7692ce2975d4..ca9771b713c94c 100644 --- a/.github/workflow-scripts/createDraftRelease.js +++ b/.github/workflow-scripts/createDraftRelease.js @@ -40,19 +40,29 @@ function _extractChangelog(version) { return changelog.slice(changelogStarts, changelogEnds).join('\n').trim(); } -function _computeBody(version, changelog) { +function _computeBody(changelog, version, hermesVersion, hermesV1Version) { + hermesVersion = hermesVersion ?? version; + hermesV1Version = hermesV1Version ?? version; return `${changelog} --- Hermes dSYMS: -- [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-hermes-framework-dSYM-debug.tar.gz) -- [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-hermes-framework-dSYM-release.tar.gz) +- [Debug](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesVersion}/hermes-ios-${hermesVersion}-hermes-framework-dSYM-debug.tar.gz) +- [Release](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesVersion}/hermes-ios-${hermesVersion}-hermes-framework-dSYM-release.tar.gz) + +Hermes V1 dSYMS: +- [Debug](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesV1Version}/hermes-ios-${hermesV1Version}-hermes-framework-dSYM-debug.tar.gz) +- [Release](https://repo1.maven.org/maven2/com/facebook/hermes/hermes-ios/${hermesV1Version}/hermes-ios-${hermesV1Version}-hermes-framework-dSYM-release.tar.gz) ReactNativeDependencies dSYMs: - [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-dependencies-dSYM-debug.tar.gz) - [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-dependencies-dSYM-release.tar.gz) +ReactNative Core dSYMs: +- [Debug](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-core-debug.tar.gz) +- [Release](https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/${version}/react-native-artifacts-${version}-reactnative-core-release.tar.gz) + --- You can file issues or pick requests against this release [here](https://github.com/reactwg/react-native-releases/issues/new/choose). @@ -113,7 +123,13 @@ function moveToChangelogBranch(version) { run(`git checkout -b changelog/v${version}`); } -async function createDraftRelease(version, latest, token) { +async function createDraftRelease( + version, + latest, + token, + hermesVersion, + hermesV1Version, +) { if (version.startsWith('v')) { version = version.substring(1); } @@ -121,7 +137,7 @@ async function createDraftRelease(version, latest, token) { _verifyTagExists(version); moveToChangelogBranch(version); const changelog = _extractChangelog(version); - const body = _computeBody(version, changelog); + const body = _computeBody(changelog, version, hermesVersion, hermesV1Version); const release = await _createDraftReleaseOnGitHub( version, body, diff --git a/.github/workflows/create-draft-release.yml b/.github/workflows/create-draft-release.yml index 5852b8fec7105c..9ddb724b8935f1 100644 --- a/.github/workflows/create-draft-release.yml +++ b/.github/workflows/create-draft-release.yml @@ -2,6 +2,15 @@ name: Create Draft Release on: workflow_call: + inputs: + hermesVersion: + required: false + type: string + description: The version of Hermes to use for this release (eg. 0.15.0). If not specified, it will use React Native Version + hermesV1Version: + required: false + type: string + description: The version of Hermes V1 to use for this release (eg. 250829098.0.2). If not specified, it will use React Native Version jobs: create-draft-release: @@ -27,7 +36,7 @@ jobs: const {createDraftRelease} = require('./.github/workflow-scripts/createDraftRelease.js'); const version = '${{ github.ref_name }}'; const {isLatest} = require('./.github/workflow-scripts/publishTemplate.js'); - return (await createDraftRelease(version, isLatest(), '${{secrets.REACT_NATIVE_BOT_GITHUB_TOKEN}}')).id; + return (await createDraftRelease(version, isLatest(), '${{secrets.REACT_NATIVE_BOT_GITHUB_TOKEN}}', ${{ inputs.hermesVersion }}, ${{ inputs.hermesV1Version }})).id; result-encoding: string - name: Upload release assets for DotSlash uses: actions/github-script@v6 diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml index 55d0be74af1b8f..19a5114521792f 100644 --- a/.github/workflows/publish-release.yml +++ b/.github/workflows/publish-release.yml @@ -19,6 +19,28 @@ jobs: echo "Setting release type to release" echo "RELEASE_TYPE=release" >> $GITHUB_OUTPUT + set_hermes_versions: + runs-on: ubuntu-latest + if: github.repository == 'facebook/react-native' + outputs: + HERMES_VERSION: ${{ steps.set_hermes_versions.outputs.HERMES_VERSION }} + HERMES_V1_VERSION: ${{ steps.set_hermes_versions.outputs.HERMES_V1_VERSION }} + steps: + - name: Checkout + uses: actions/checkout@v4 + - id: set_hermes_versions + run: | + echo "Setting hermes versions to latest" + hermes_version=$(grep -oE 'HERMES_VERSION_NAME=([0-9]+\.[0-9]+\.[0-9]+)' packages/react-native/sdks/hermes-engine/version.properties | cut -d'=' -f2) + hermes_v1_version=$(grep -oE 'HERMES_V1_VERSION_NAME=([0-9]+\.[0-9]+\.[0-9]+)' packages/react-native/sdks/hermes-engine/version.properties | cut -d'=' -f2) + + echo "HERMES_VERSION=$hermes_version" >> $GITHUB_OUTPUT + echo "HERMES_V1_VERSION=$hermes_v1_version" >> $GITHUB_OUTPUT + - name: Print hermes versions + run: | + echo "HERMES_VERSION=${{ steps.set_hermes_versions.outputs.HERMES_VERSION }}" + echo "HERMES_V1_VERSION=${{ steps.set_hermes_versions.outputs.HERMES_V1_VERSION }}" + prebuild_apple_dependencies: if: github.repository == 'facebook/react-native' uses: ./.github/workflows/prebuild-ios-dependencies.yml @@ -117,6 +139,9 @@ jobs: secrets: inherit create_draft_release: - needs: generate_changelog + needs: [generate_changelog, set_hermes_versions] uses: ./.github/workflows/create-draft-release.yml secrets: inherit + with: + hermesVersion: ${{ needs.set_hermes_versions.outputs.HERMES_VERSION }} + hermesV1Version: ${{ needs.set_hermes_versions.outputs.HERMES_V1_VERSION }}