Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(Release script): update release process to be manually triggered #243

Merged
merged 3 commits into from
Apr 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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"
}
}
}
Loading