Merge pull request #2437 from alixander/release-d2js

ci release include d2js
This commit is contained in:
Alexander Wang 2025-03-21 11:34:39 -07:00 committed by GitHub
commit 2e158c203d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 105 additions and 17 deletions

View file

@ -51,7 +51,7 @@ jobs:
- name: Publish nightly version to NPM
if: steps.check_changes.outputs.has_changes == 'true'
run: COLOR=1 PUBLISH=1 ./make.sh js
run: COLOR=1 NPM_VERSION=nightly ./make.sh js
env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
GITHUB_TOKEN: ${{ secrets._GITHUB_TOKEN }}

View file

@ -9,6 +9,8 @@
[![ci](https://github.com/terrastruct/d2/actions/workflows/ci.yml/badge.svg)](https://github.com/terrastruct/d2/actions/workflows/ci.yml)
[![daily](https://github.com/terrastruct/d2/actions/workflows/daily.yml/badge.svg)](https://github.com/terrastruct/d2/actions/workflows/daily.yml)
[![release](https://img.shields.io/github/v/release/terrastruct/d2)](https://github.com/terrastruct/d2/releases)
[![changelog](https://img.shields.io/badge/changelog-read-blue)](./CHANGELOG.md)
[![npm version](https://img.shields.io/npm/v/@terrastruct/d2)](https://www.npmjs.com/package/@terrastruct/d2)
[![discord](https://img.shields.io/discord/1039184639652265985?label=discord)](https://discord.gg/NF6X8K4eDq)
[![twitter](https://img.shields.io/twitter/follow/terrastruct?style=social)](https://twitter.com/terrastruct)
[![license](https://img.shields.io/github/license/terrastruct/d2?color=9cf)](./LICENSE.txt)

39
ci/release/release-js.sh Executable file
View file

@ -0,0 +1,39 @@
#!/bin/sh
set -eu
cd -- "$(dirname "$0")/../.."
. "./ci/sub/lib.sh"
VERSION=""
help() {
cat <<EOF
usage: $0 --version=<version>
Publishes the d2.js to NPM.
Flags:
--version Version to publish (e.g., "0.1.2" or "nightly"). Note this is the js version, not related to the d2 version. A non-nightly version will publish to latest.
EOF
}
for arg in "$@"; do
case "$arg" in
--help|-h)
help
exit 0
;;
--version=*)
VERSION="${arg#*=}"
;;
esac
done
if [ -z "$VERSION" ]; then
flag_errusage "--version is required"
fi
FGCOLOR=6 header "Publishing JavaScript package to NPM (version: $VERSION)"
sh_c "NPM_VERSION=$VERSION ./make.sh js"
FGCOLOR=2 header 'NPM publish completed'

View file

@ -1,5 +1,26 @@
#!/bin/sh
set -eu
cd -- "$(dirname "$0")/../.."
. "./ci/sub/lib.sh"
NPM_VERSION=""
for arg in "$@"; do
case "$arg" in
--npm-version=*)
NPM_VERSION="${arg#*=}"
;;
esac
done
if [ -z "$NPM_VERSION" ]; then
flag_errusage "--npm-version is required"
fi
./ci/sub/release/release.sh "$@"
if [ -n "$NPM_VERSION" ]; then
./ci/release/release-js.sh --version="$NPM_VERSION"
fi

View file

@ -18,26 +18,52 @@ fi
cd d2js/js
sh_c bun build.js
if [ "${PUBLISH:-0}" = "1" ]; then
echo "Publishing nightly version to NPM..."
DATE_TAG=$(date +'%Y%m%d')
COMMIT_SHORT=$(git rev-parse --short HEAD)
CURRENT_VERSION=$(node -p "require('./package.json').version")
NIGHTLY_VERSION="${CURRENT_VERSION}-nightly.${DATE_TAG}.${COMMIT_SHORT}"
if [ -n "${NPM_VERSION:-}" ]; then
cp package.json package.json.bak
trap 'rm -f .npmrc; mv package.json.bak package.json' EXIT
echo "Updating package version to ${NIGHTLY_VERSION}"
npm version "${NIGHTLY_VERSION}" --no-git-tag-version
if [ "$NPM_VERSION" = "nightly" ]; then
echo "Publishing nightly version to npm..."
echo "Publishing to npm with tag 'nightly'..."
DATE_TAG=$(date +'%Y%m%d')
COMMIT_SHORT=$(git rev-parse --short HEAD)
CURRENT_VERSION=$(node -p "require('./package.json').version")
PUBLISH_VERSION="${CURRENT_VERSION}-nightly.${DATE_TAG}.${COMMIT_SHORT}"
NPM_TAG="nightly"
echo "Updating package version to ${PUBLISH_VERSION}"
else
echo "Publishing official version ${NPM_VERSION} to npm..."
PUBLISH_VERSION="$NPM_VERSION"
NPM_TAG="latest"
echo "Setting package version to ${PUBLISH_VERSION}"
fi
# Update package.json with the new version
npm version "${PUBLISH_VERSION}" --no-git-tag-version
echo "Publishing to npm with tag '${NPM_TAG}'..."
if [ -n "${NPM_TOKEN-}" ]; then
# Create .npmrc file with auth token
echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > .npmrc
trap 'rm -f .npmrc' EXIT
if npm publish --tag nightly; then
echo "Successfully published @terrastruct/d2@${NIGHTLY_VERSION} to npm with tag 'nightly'"
if npm publish --tag "$NPM_TAG"; then
echo "Successfully published @terrastruct/d2@${PUBLISH_VERSION} to npm with tag '${NPM_TAG}'"
# For official releases, bump the patch version
if [ "$NPM_VERSION" != "nightly" ]; then
# Restore original package.json first
mv package.json.bak package.json
echo "Bumping version to ${NPM_VERSION}"
npm version "${NPM_VERSION}" --no-git-tag-version
git add package.json
git commit -m "Bump version to ${NPM_VERSION} [skip ci]"
# Cancel the trap since we manually restored and don't want it to execute on exit
trap - EXIT
fi
else
echoerr "Failed to publish package to npm"
exit 1

View file

@ -2,7 +2,7 @@
"name": "@terrastruct/d2",
"author": "Terrastruct, Inc.",
"description": "D2.js is a wrapper around the WASM build of D2, the modern text-to-diagram language.",
"version": "0.1.22",
"version": "0.1.23",
"repository": {
"type": "git",
"url": "git+https://github.com/terrastruct/d2.git",
@ -41,7 +41,7 @@
"test:integration": "bun test test/integration",
"test:all": "bun run test && bun run test:integration",
"dev": "bun --watch dev-server.js",
"prepublishOnly": "PUBLISH=0 ./make.sh all"
"prepublishOnly": "NPM_VERSION= ./make.sh all"
},
"keywords": [
"d2",