name: Automatic Release on: push: branches: - release jobs: build-and-release: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 - name: Set up Node.js 16.15.1 uses: actions/setup-node@v2 with: node-version: 16.15.1 - name: Install dependencies run: npm install && npm install --save core-js@2 - name: Build run: npm run build:prod - name: Extract project version from package.json run: | VERSION=$(node -p "require('./package.json').version") echo "PROJECT_VERSION=$VERSION" >> $GITHUB_ENV - name: Generate Release Notes id: generate_release_notes run: | git fetch --prune --unshallow LATEST_TAG=$(git describe --tags --abbrev=0) FEAT_MSGS=$(git log $LATEST_TAG..HEAD --grep 'feat:' --pretty=format:"- %s%n" | sed 's/feat://') FIX_MSGS=$(git log $LATEST_TAG..HEAD --grep 'fix:' --pretty=format:"- %s%n" | sed 's/fix://') PERF_MSGS=$(git log $LATEST_TAG..HEAD --grep 'perf:' --pretty=format:"- %s%n" | sed 's/perf://') RELEASE_NOTES="" if [ -n "$FEAT_MSGS" ]; then RELEASE_NOTES+="### 新功能 ✨\n${FEAT_MSGS}\n" fi if [ -n "$FIX_MSGS" ]; then RELEASE_NOTES+="### 修复 🐛\n${FIX_MSGS}\n" fi if [ -n "$PERF_MSGS" ]; then RELEASE_NOTES+="### 优化 🎨\n${PERF_MSGS}\n" fi echo -e "RELEASE_NOTES<> $GITHUB_ENV - name: Create Git tag run: | git config user.name "GitHub Actions" git config user.email "github-actions@users.noreply.github.com" git tag -a v${{ env.PROJECT_VERSION }} -m "v${{ env.PROJECT_VERSION }}" git push origin v${{ env.PROJECT_VERSION }} - name: Create Release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.MY_GITHUB_TOKEN }} with: tag_name: v${{ env.PROJECT_VERSION }} release_name: v${{ env.PROJECT_VERSION }} body: | ## Changes in this release: ${{ env.RELEASE_NOTES }} draft: false prerelease: false - name: Package dist directory run: tar czf dist.tar.gz dist - name: Upload dist.tar.gz to Release uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.MY_GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./dist.tar.gz asset_name: dist.tar.gz asset_content_type: application/gzip