Skip to content

Commit

Permalink
chore(Release script): update release process to be manually triggered (
Browse files Browse the repository at this point in the history
#243)

* chore: update release.yml to only run the new release script

* chore: update release script
  • Loading branch information
seanwuapps authored Apr 7, 2024
1 parent 2429e8c commit 1f4fa28
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 80 deletions.
32 changes: 8 additions & 24 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
name: Release
on:
push:
branches: [main]
# Allows you to run this workflow manually from the Actions tab
# Only run this workflow manually from the GitHub Actions tab
workflow_dispatch:
jobs:
release:
Expand Down Expand Up @@ -51,13 +49,13 @@ jobs:
run: pnpm -r install --no-frozen-lockfile

#TEST
# - name: Unit Test Core Components
# run: pnpm test.spec
# working-directory: packages/core
- name: Unit Test Core Components
run: pnpm test.spec
working-directory: packages/core

# - name: E2E Test Core Components
# run: pnpm test.e2e
# working-directory: packages/core
- name: E2E Test Core Components
run: pnpm test.e2e
working-directory: packages/core

- name: Build
run: pnpm run build.libs
Expand All @@ -67,22 +65,8 @@ jobs:
env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

- name: Pre core release
run: pnpm run prerelease

- name: Release Core
run: pnpm run release

- name: Pre wrapper release
run: pnpm run prerelease-wrappers

- name: Release React
run: pnpm run release
working-directory: ./packages/react

- name: Release Vue
- name: Release
run: pnpm run release
working-directory: ./packages/vue

docsite:
name: Deploy docsite
Expand Down
52 changes: 0 additions & 52 deletions bin/release-prep.js
Original file line number Diff line number Diff line change
@@ -1,52 +0,0 @@
/**
* replace workspace versions before releasing
* only to be ran in CI
*/
import fs from 'fs';
import path from 'path';
import { exec } from 'child_process';

function execAsync(command) {
return new Promise((resolve, reject) => {
exec(command, (error, stdout, stderr) => {
if (error) {
reject(error);
return;
}
resolve({ stdout, stderr });
});
});
}

async function getLatestVersion(packageName) {
try {
const { stdout } = await execAsync(`npm view ${packageName}@latest version`);
const version = stdout.trim();
return version;
} catch (error) {
throw error;
}
}
const packages = ['core'];

export default async function releasePrep(args) {
try {
const latestVer = await getLatestVersion('@go-ui/core');
console.log({ latestVer });
packages.map((pkg) => {
const pkgRoot = path.resolve(__dirname, `../packages/${pkg}`);
const pkgFile = path.resolve(pkgRoot, 'package.json');
const content = fs.readFileSync(pkgFile, 'utf8');
let json = JSON.parse(content);
// replace version number
json['version'] = latestVer;
const newContent = JSON.stringify(json, undefined, 2);
fs.writeFileSync(pkgFile, newContent);
console.log(`[${pkgFile}]`);
console.log(newContent);
});
} catch (error) {
console.error('Error:', error);
exit(1);
}
}
100 changes: 100 additions & 0 deletions bin/release.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
#!/usr/bin/env node
const { execSync } = require('child_process');
const fs = require('fs');
const path = require('path');

const RELEASE_COMMAND = 'pnpm run release --dry-run';

function getLatestVersion(packageName) {
console.log(`> Getting latest version number from npm`);
try {
const output = execSync(`npm view ${packageName}@latest version`);
const version = output.toString().trim();
return version;
} catch (error) {
console.error(`❎ Cannot get latest version for ${packageName}`);
throw error;
}
}

function syncCurrentCoreVersion() {
console.log(`0️⃣STEP 0. Sync current core version in case it's not the latest`);
try {
const latestVer = getLatestVersion('@go-ui/core');
// get package json from core
const pkgFile = path.resolve(__dirname, '../packages/core/package.json');
const content = fs.readFileSync(pkgFile, 'utf8');
let json = JSON.parse(content);
if (json.version === latestVer) {
console.log('✅ package.json in core is already up to date.');
return;
}
// replace version number
json['version'] = latestVer;
const newContent = JSON.stringify(json, undefined, 2);
fs.writeFileSync(pkgFile, newContent);
console.log(`✅ package.json in core has been updated to ${latestVer}.`);
} catch (error) {
console.error('❎ Error:', error);
process.exit(1);
}
}

/**
* Run release script in packages/core/package.json
*/
function releaseCore() {
console.log(`1️⃣ STEP 1. Release core`);
try {
// set working directory to ./packages/core
const cwd = path.resolve(__dirname, '../packages/core');
execSync(RELEASE_COMMAND, { cwd, stdio: 'inherit' });
console.log('✅ Core package has been released.');
} catch (error) {
console.error('❎ Error:', error);
process.exit(1);
}
}

/**
* make sure react and vue packages use the same version number as core
* run `pnpm run gg release-prep-wrappers` in root
*/
function syncVersionToWrappers() {
console.log(`2️⃣ STEP 2. Sync version to wrappers`);
try {
execSync('pnpm run gg release-prep-wrappers', { stdio: 'inherit' });
console.log('✅ React and Vue packages have been synced.');
} catch (error) {
console.error('❎ Error:', error);
process.exit(1);
}
}

/**
* Run release script in packages/react/package.json and packages/vue/package.json
*/
function releaseWrappers() {
const wrapperLibs = ['react', 'vue'];
console.log(`3️⃣ STEP 3. Release wrappers, ${wrapperLibs.join(', ')}`);
try {
for (let i = 0; i < wrapperLibs.length; i++) {
const lib = wrapperLibs[i];
const cwd = path.resolve(__dirname, `../packages/${lib}`);
execSync(RELEASE_COMMAND, { cwd, stdio: 'inherit' });
console.log(`✅ ${lib} package have been released.`);
}
} catch (error) {
console.error('❎ Error:', error);
process.exit(1);
}
}

function main() {
syncCurrentCoreVersion();
releaseCore();
syncVersionToWrappers();
releaseWrappers();
}

main();
4 changes: 1 addition & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,7 @@
"test.spec": "nx test.spec @go-ui/core",
"test.e2e.watch": "nx test.e2e.watch @go-ui/core",
"test.e2e": "nx test.e2e @go-ui/core",
"prerelease": "pnpm run gg release-prep",
"release": "pnpm run --stream -r --filter \"./packages/core\" release",
"prerelease-wrappers": "pnpm run gg release-prep-wrappers",
"release": "node ./bin/release.js",
"gg": "node ./bin/index.js"
},
"devDependencies": {
Expand Down
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -89,4 +89,4 @@
"publishConfig": {
"access": "public"
}
}
}

0 comments on commit 1f4fa28

Please sign in to comment.