diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..fccd8fa --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,94 @@ +name: Release Package + +on: + workflow_dispatch: + inputs: + package: + description: "Which package to release" + required: true + type: choice + options: + - compact-tools-cli + - compact-tools-simulator + version_bump: + description: "Version bump type" + required: true + type: choice + options: + - patch + - minor + - major + +permissions: + contents: write # Required to push commits and tags + +env: + TURBO_TELEMETRY_DISABLED: 1 + +jobs: + release: + name: Release ${{ inputs.package }} + runs-on: ubuntu-24.04 + environment: compact-npm-prod # Requires approval + + env: + COMPACT_INSTALLER_URL: ${{ vars.COMPACT_INSTALLER_URL }} + + steps: + - name: Check out code + uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + with: + fetch-depth: 0 + + - name: Set package directory + id: pkg + run: | + case "${{ inputs.package }}" in + "compact-tools-cli") + echo "dir=cli" >> $GITHUB_OUTPUT + ;; + "compact-tools-simulator") + echo "dir=simulator" >> $GITHUB_OUTPUT + ;; + esac + + - name: Setup Environment + uses: ./.github/actions/setup + + - name: Run tests for package + run: yarn test --filter=@openzeppelin/${{ inputs.package }} + + - name: Build package + run: yarn build --filter=@openzeppelin/${{ inputs.package }} + + - name: Bump version + id: version + run: | + cd packages/${{ steps.pkg.outputs.dir }} + yarn version ${{ inputs.version_bump }} + NEW_VERSION=$(node -p "require('./package.json').version") + echo "new=$NEW_VERSION" >> $GITHUB_OUTPUT + echo "### Release Summary" >> $GITHUB_STEP_SUMMARY + echo "- Package: ${{ inputs.package }}" >> $GITHUB_STEP_SUMMARY + echo "- New version: $NEW_VERSION" >> $GITHUB_STEP_SUMMARY + echo "- Bump type: ${{ inputs.version_bump }}" >> $GITHUB_STEP_SUMMARY + + - name: Verify package contents + run: | + cd packages/${{ steps.pkg.outputs.dir }} + yarn pack --dry-run + + - name: Commit and tag version bump + uses: stefanzweifel/git-auto-commit-action@28e16e81777b558cc906c8750092100bbb34c5e3 # v7.0.0 + with: + commit_message: "chore: release ${{ inputs.package }} v${{ steps.version.outputs.new }}" + file_pattern: "packages/${{ steps.pkg.outputs.dir }}/package.json" + tagging_message: "${{ inputs.package }}/v${{ steps.version.outputs.new }}" + + - name: Publish to npm + run: | + yarn config set npmAuthToken "$NPM_TOKEN" + cd packages/${{ steps.pkg.outputs.dir }} + yarn npm publish --access public --provenance + env: + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/RELEASING.md b/RELEASING.md new file mode 100644 index 0000000..0563403 --- /dev/null +++ b/RELEASING.md @@ -0,0 +1,20 @@ +# Releasing + +1. Go to "Release Package" in Actions. +2. Click on the "Run workflow" dropdown menu. +3. Choose the package to release and the version bump type. + + Following [SemVer](https://semver.org/): + - **Patch** - Backward compatible bug fixes. + - **Minor** - New functionality in a backward compatible way. + - **Major** - Breaking API changes. + +4. A maintainer must approve the release before it proceeds. + +5. Once approved, the CI will automatically: + - Run tests. + - Bump the version. + - Create a git tag. + - Publish the package to npm. + +6. Once published, go to "Releases" and create a GitHub release using the generated tag. \ No newline at end of file diff --git a/packages/cli/package.json b/packages/cli/package.json index 8d3df34..53fa667 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,5 @@ { "name": "@openzeppelin/compact-tools-cli", - "private": true, "description": "CLI for compiling and building Compact smart contracts", "version": "0.0.1", "keywords": [ diff --git a/packages/simulator/package.json b/packages/simulator/package.json index d9b3625..2151395 100644 --- a/packages/simulator/package.json +++ b/packages/simulator/package.json @@ -1,6 +1,5 @@ { "name": "@openzeppelin/compact-tools-simulator", - "private": true, "description": "Simulator for testing Compact smart contracts", "version": "0.0.1", "keywords": [