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: add snapshot release pipelines #1853

Merged
merged 14 commits into from
Jan 22, 2025
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."
61 changes: 61 additions & 0 deletions .github/workflows/snapshot-release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
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'

- 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:
NPM_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
Loading