release-automation-builder

安装量: 37
排名: #19073

安装

npx skills add https://github.com/patricio0312rev/skills --skill release-automation-builder

Release Automation Builder

Automate releases with versioning, changelogs, and publishing.

Using Changesets Setup npm install -D @changesets/cli npx changeset init

Workflow

.github/workflows/release.yml

name: Release

on: push: branches: - main

concurrency: ${{ github.workflow }}-${{ github.ref }}

jobs: release: name: Release runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0

  - uses: actions/setup-node@v4
    with:
      node-version: "20"
      cache: "npm"

  - run: npm ci

  - name: Create Release Pull Request or Publish
    uses: changesets/action@v1
    with:
      publish: npm run release
      commit: "chore: release packages"
      title: "chore: release packages"
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

Package Scripts { "scripts": { "changeset": "changeset", "version": "changeset version", "release": "changeset publish" } }

Using Semantic Release Configuration // .releaserc.js module.exports = { branches: ["main"], plugins: [ "@semantic-release/commit-analyzer", "@semantic-release/release-notes-generator", "@semantic-release/changelog", "@semantic-release/npm", "@semantic-release/github", [ "@semantic-release/git", { assets: ["CHANGELOG.md", "package.json"], message: "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}", }, ], ], };

Workflow

.github/workflows/release.yml

name: Release

on: push: branches: [main]

jobs: release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: persist-credentials: false

  - uses: actions/setup-node@v4
    with:
      node-version: "20"

  - run: npm ci
  - run: npm run build

  - name: Release
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
    run: npx semantic-release

Versioning Strategy Semantic Versioning (SemVer) MAJOR.MINOR.PATCH

1.0.0 → 1.0.1 (patch - bug fix) 1.0.1 → 1.1.0 (minor - new feature) 1.1.0 → 2.0.0 (major - breaking change)

Conventional Commits feat: add new feature (minor bump) fix: fix bug (patch bump) perf: performance improvement (patch bump) docs: update docs (no bump) chore: maintenance (no bump)

feat!: breaking change (major bump) fix!: breaking bug fix (major bump)

Changelog Generation

Changelog

[2.1.0] - 2024-01-15

Added

  • New dashboard widget (#123)
  • Export to PDF feature (#125)

Fixed

  • Memory leak in data processing (#124)
  • Typo in error message (#126)

Changed

  • Updated dependencies

[2.0.0] - 2024-01-01

Breaking Changes

  • Removed deprecated API endpoints
  • Changed authentication method

Migration Guide

See MIGRATION.md for upgrade instructions

Docker Image Publishing docker-release: runs-on: ubuntu-latest needs: test if: github.ref == 'refs/heads/main' steps: - uses: actions/checkout@v4

- name: Get version
  id: version
  run: echo "version=$(cat package.json | jq -r '.version')" >> $GITHUB_OUTPUT

- name: Login to Docker Hub
  uses: docker/login-action@v3
  with:
    username: ${{ secrets.DOCKER_USERNAME }}
    password: ${{ secrets.DOCKER_PASSWORD }}

- name: Build and push
  uses: docker/build-push-action@v5
  with:
    context: .
    push: true
    tags: |
      mycompany/myapp:latest
      mycompany/myapp:${{ steps.version.outputs.version }}

NPM Publishing publish: runs-on: ubuntu-latest needs: test if: github.event_name == 'release' steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: "20" registry-url: "https://registry.npmjs.org"

- run: npm ci
- run: npm run build

- name: Publish to npm
  run: npm publish
  env:
    NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

GitHub Release Notes - name: Create GitHub Release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: v${{ steps.version.outputs.version }} release_name: Release ${{ steps.version.outputs.version }} body: | ## What's Changed ${{ steps.changelog.outputs.content }}

  ## Installation
  ```bash
  npm install mypackage@${{ steps.version.outputs.version }}
  ```
draft: false
prerelease: false

Best Practices Conventional commits: Standardize commit format Protected branches: Prevent direct pushes to main Automated versioning: Let tools determine versions Changelogs: Auto-generate from commits Git tags: Tag every release Release notes: Include migration guides Dry run: Test releases in staging Output Checklist Changesets or semantic-release configured Versioning strategy documented Changelog generation automated Git tagging automated Release notes template NPM publishing (if package) Docker publishing (if applicable) Protected branch rules

返回排行榜