mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
a52f5514ed
Summary: One of the steps we perform when doing a release is to run `npm view react-native` to verify that the release has been published and it is available with the right tag. As of today, we check this manually. This change aims at automating this check so that we don't have to do it manually ourselves. ## Changelog: [Internal] - Releases: automate the npm view check Pull Request resolved: https://github.com/facebook/react-native/pull/49164 Test Plan: Created a veriftyReleaseOnNPM-tests.js jest test to verify that the script works fine. <img width="667" alt="Screenshot 2025-02-04 at 15 18 24" src="https://github.com/user-attachments/assets/cf08155f-80da-4e15-a922-5c16f3fd806e" /> Reviewed By: cortinico Differential Revision: D69118622 Pulled By: cipolleschi fbshipit-source-id: a8d40cd2fcb164d8f7174de680b340510f3e8551
127 lines
3.1 KiB
JavaScript
127 lines
3.1 KiB
JavaScript
/**
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @format
|
|
*/
|
|
|
|
const {
|
|
publishTemplate,
|
|
verifyPublishedTemplate,
|
|
} = require('../publishTemplate');
|
|
|
|
const mockRun = jest.fn();
|
|
const mockSleep = jest.fn();
|
|
const mockGetNpmPackageInfo = jest.fn();
|
|
const mockVerifyPublishedPackage = jest.fn();
|
|
const silence = () => {};
|
|
|
|
jest.mock('../utils.js', () => ({
|
|
log: silence,
|
|
run: mockRun,
|
|
sleep: mockSleep,
|
|
verifyPublishedPackage: mockVerifyPublishedPackage,
|
|
getNpmPackageInfo: mockGetNpmPackageInfo,
|
|
}));
|
|
|
|
const getMockGithub = () => ({
|
|
rest: {
|
|
actions: {
|
|
createWorkflowDispatch: jest.fn(),
|
|
},
|
|
},
|
|
});
|
|
|
|
describe('#publishTemplate', () => {
|
|
beforeEach(jest.clearAllMocks);
|
|
|
|
it('checks commits for magic #publish-package-to-npm&latest string and sets latest', async () => {
|
|
mockRun.mockReturnValueOnce(`
|
|
The commit message
|
|
|
|
#publish-packages-to-npm&latest`);
|
|
|
|
const github = getMockGithub();
|
|
await publishTemplate(github, '0.76.0', true);
|
|
expect(github.rest.actions.createWorkflowDispatch).toHaveBeenCalledWith({
|
|
owner: 'react-native-community',
|
|
repo: 'template',
|
|
workflow_id: 'release.yaml',
|
|
ref: '0.76-stable',
|
|
inputs: {
|
|
dry_run: true,
|
|
is_latest_on_npm: true,
|
|
version: '0.76.0',
|
|
},
|
|
});
|
|
});
|
|
|
|
it('pubished as is_latest_on_npm = false if missing magic string', async () => {
|
|
mockRun.mockReturnValueOnce(`
|
|
The commit message without magic
|
|
`);
|
|
|
|
const github = getMockGithub();
|
|
await publishTemplate(github, '0.76.0', false);
|
|
expect(github.rest.actions.createWorkflowDispatch).toHaveBeenCalledWith({
|
|
owner: 'react-native-community',
|
|
repo: 'template',
|
|
workflow_id: 'release.yaml',
|
|
ref: '0.76-stable',
|
|
inputs: {
|
|
dry_run: false,
|
|
is_latest_on_npm: false,
|
|
version: '0.76.0',
|
|
},
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('#verifyPublishedTemplate', () => {
|
|
beforeEach(jest.clearAllMocks);
|
|
|
|
it("waits on npm updating for version and not 'latest'", async () => {
|
|
const NOT_LATEST = false;
|
|
const version = '0.77.0';
|
|
|
|
await verifyPublishedTemplate(version, NOT_LATEST);
|
|
|
|
expect(mockVerifyPublishedPackage).toHaveBeenCalledWith(
|
|
'@react-native-community/template',
|
|
version,
|
|
null,
|
|
18,
|
|
);
|
|
});
|
|
|
|
it('waits on npm updating version and latest tag', async () => {
|
|
const IS_LATEST = true;
|
|
const version = '0.77.0';
|
|
|
|
await verifyPublishedTemplate(version, IS_LATEST);
|
|
|
|
expect(mockVerifyPublishedPackage).toHaveBeenCalledWith(
|
|
'@react-native-community/template',
|
|
version,
|
|
'latest',
|
|
18,
|
|
);
|
|
});
|
|
|
|
describe('retries', () => {
|
|
it('will timeout if npm does not update package version after a set number of retries', async () => {
|
|
const RETRIES = 2;
|
|
|
|
await verifyPublishedTemplate('0.77.0', true, RETRIES),
|
|
expect(mockVerifyPublishedPackage).toHaveBeenCalledWith(
|
|
'@react-native-community/template',
|
|
'0.77.0',
|
|
'latest',
|
|
2,
|
|
);
|
|
});
|
|
});
|
|
});
|