Skip to content

Commit

Permalink
chore: add snapshot release pipelines (#1853)
Browse files Browse the repository at this point in the history
* chore: add experimental release pipelines

* create experimental branch first

* create experimental branch first

* add experimental-release pipeline

* fix prev commit

* update pr titles

* add release perp flow

* update outputs

* improve pr description and test publish wihout keys

* update contrib and use npm key

* rename to snapshot

* use npm token

* use NODE_AUTH_TOKEN instead

* add registry-url
  • Loading branch information
tatomyr authored Jan 22, 2025
1 parent 648fb6c commit afcdbb4
Show file tree
Hide file tree
Showing 5 changed files with 118 additions and 1 deletion.
2 changes: 1 addition & 1 deletion .github/workflows/pr-title.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
env:
PR_TITLE: ${{ github.event.pull_request.title }}
run: |
if ! echo "$PR_TITLE" | grep -E "^(fix|feat|chore|docs)(\([a-z-]+\))?: (🔖 )?[a-z].+[^.]$"; then
if ! echo "$PR_TITLE" | grep -E "^(fix|feat|chore|docs)(\([a-z-]+\))?: (🔖|🧪 )?[a-z].+[^.]$"; then
echo "❌ PR title '$PR_TITLE' does not match the required format"
echo "Required format: type(scope): subject"
echo "Examples:"
Expand Down
44 changes: 44 additions & 0 deletions .github/workflows/snapshot-pr.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: Snapshot PR Creation

on:
pull_request:
types: [labeled]

jobs:
create-snapshot-pr:
if: github.event.label.name == 'snapshot'
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write

steps:
- name: Checkout main branch
uses: actions/checkout@v4
with:
ref: main
fetch-depth: 0

- name: Create or update the snapshot branch
run: git push origin main:refs/heads/snapshot --force

- name: Checkout the PR branch
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Create PR to snapshot
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
PR_TITLE: ${{ github.event.pull_request.title }}
SOURCE_BRANCH: ${{ github.event.pull_request.head.ref }}
run: |
gh pr create \
--base snapshot \
--head "$SOURCE_BRANCH" \
--title "chore: 🧪 release ($PR_TITLE)" \
--body "This PR was automatically created from #$PR_NUMBER when the 'snapshot' label was added.
Merging this PR will trigger a snapshot package release to the NPM registry.
You will be able to install it under the 'snapshot' tag."
62 changes: 62 additions & 0 deletions .github/workflows/snapshot-release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Snapshot Release

on:
pull_request:
types: [closed]
branches:
- snapshot

jobs:
release-snapshot:
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 20
cache: 'npm'
registry-url: 'https://registry.npmjs.org'

- name: Update package versions
run: |
TIMESTAMP=$(date +%s)
VERSION="0.0.0-snapshot.$TIMESTAMP"
# Update Core package version
jq ".version = \"$VERSION\"" packages/core/package.json > tmp.json && mv tmp.json packages/core/package.json
# Update CLI package version and the Core dependency
jq ".version = \"$VERSION\"" packages/cli/package.json > tmp.json && mv tmp.json packages/cli/package.json
jq ".dependencies[\"@redocly/openapi-core\"] = \"$VERSION\"" packages/cli/package.json > tmp.json && mv tmp.json packages/cli/package.json
NEW_DESCRIPTION="${{ github.event.pull_request.body }}
Experimental release **v$VERSION**. Install it with \`npm install @redocly/cli@$VERSION\`."
gh pr edit $PR_NUMBER --body "$NEW_DESCRIPTION"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}

- name: Install dependencies
run: npm install

- name: Build packages
run: npm run compile

- name: Publish snapshot packages
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: |
git diff
cd packages/core
npm publish --tag snapshot
cd ../cli
npm publish --tag snapshot
10 changes: 10 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -233,3 +233,13 @@ However, you can release a new version with a problematic commit reverted.
Create a new branch from **main**, then find the hash of the commit you want to revert and run `git revert <commit-hash>`.
Create a patch-level changeset for the revert and open a PR with it.
Merge the PR and cut a release according to the [Release flow](#release-flow).

### Snapshot release flow

To release an experimental version to the **NPM** registry, follow these steps:

1. Create a new PR to **main**.
2. Add the `snapshot` label to the PR. This creates a new PR with to the `snapshot` branch (which is a copy of the `main` branch).
3. Merging the second PR triggers release to the **NPM** registry under the `snapshot` tag.

The released version can be installed with `npm install @redocly/cli@snapshot`.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
"OpenAPI linter",
"Swagger linter",
"AsyncAPI linter",
"Arazzo linter",
"oas"
],
"contributors": [
Expand Down

1 comment on commit afcdbb4

@github-actions
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Coverage report

St.
Category Percentage Covered / Total
🟡 Statements 78.63% 5047/6419
🟡 Branches 67.28% 2056/3056
🟡 Functions 73.13% 833/1139
🟡 Lines 78.92% 4761/6033

Test suite run success

835 tests passing in 120 suites.

Report generated by 🧪jest coverage report action from afcdbb4

Please sign in to comment.