release #1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: release | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: "The version to release" | |
| type: string | |
| permissions: | |
| contents: write | |
| pull-requests: read | |
| statuses: write | |
| packages: write | |
| jobs: | |
| release: | |
| name: release | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| outputs: | |
| has-changes: ${{ steps.check-changes.outputs.has-changes }} | |
| next-version: ${{ steps.next-version.outputs.NEXT_VERSION }} | |
| commit-hash: ${{ steps.auto-commit-action.outputs.commit_hash }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| - uses: jdx/mise-action@v3 | |
| with: | |
| experimental: true | |
| - name: check for changes since last release | |
| id: check-changes | |
| run: | | |
| LAST_TAG=$(git tag -l | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | sort -V | tail -n 1) | |
| if [ -z "$LAST_TAG" ]; then | |
| echo "No previous NetworkLayer releases found, will release" | |
| echo "has-changes=true" >> $GITHUB_OUTPUT | |
| else | |
| if [ -n "$(git diff --name-only ${LAST_TAG}..HEAD)" ]; then | |
| echo "NetworkLayer changes found since $LAST_TAG" | |
| echo "has-changes=true" >> $GITHUB_OUTPUT | |
| else | |
| echo "No NetworkLayer changes since $LAST_TAG" | |
| echo "has-changes=false" >> $GITHUB_OUTPUT | |
| fi | |
| fi | |
| - name: Get next version | |
| id: next-version | |
| if: steps.check-changes.outputs.has-changes == 'true' | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| NEXT_VERSION=$(git cliff --config ./cliff.toml --bumped-version) | |
| echo "NEXT_VERSION=$NEXT_VERSION" >> "$GITHUB_OUTPUT" | |
| echo "Next NetworkLayer version will be: $NEXT_VERSION" | |
| - name: Update CHANGELOG.md | |
| if: steps.check-changes.outputs.has-changes == 'true' | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: git cliff --config ./cliff.toml --bump -o ./CHANGELOG.md | |
| - name: Update README.md version | |
| if: steps.check-changes.outputs.has-changes == 'true' | |
| run: | | |
| sed -i -E 's|https://github.com/space-code/network-layer.git", from: "[0-9]+\.[0-9]+\.[0-9]+"|https://github.com/space-code/network-layer.git", from: "'"${{ steps.next-version.outputs.NEXT_VERSION }}"'"|g' README.md | |
| echo "Updated README.md with version ${{ steps.next-version.outputs.NEXT_VERSION }}" | |
| - name: Get release notes | |
| id: release-notes | |
| if: steps.check-changes.outputs.has-changes == 'true' | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| echo "RELEASE_NOTES<<EOF" >> "$GITHUB_OUTPUT" | |
| echo "All notable changes to this project will be documented in this file." >> "$GITHUB_OUTPUT" | |
| echo "" >> "$GITHUB_OUTPUT" | |
| echo "The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)," >> "$GITHUB_OUTPUT" | |
| echo "and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html)." >> "$GITHUB_OUTPUT" | |
| echo "" >> "$GITHUB_OUTPUT" | |
| git cliff --config ./cliff.toml --tag ${{ steps.next-version.outputs.NEXT_VERSION }} --unreleased --strip header | awk 'NF{p=1} p' | tail -n +2 >> "$GITHUB_OUTPUT" | |
| echo "EOF" >> "$GITHUB_OUTPUT" | |
| - name: Commit changes | |
| id: auto-commit-action | |
| uses: stefanzweifel/git-auto-commit-action@v7 | |
| if: steps.check-changes.outputs.has-changes == 'true' | |
| with: | |
| commit_options: "--allow-empty --no-verify" | |
| tagging_message: ${{ steps.next-version.outputs.NEXT_VERSION }} | |
| skip_dirty_check: true | |
| commit_message: "[Release] NetworkLayer ${{ steps.next-version.outputs.NEXT_VERSION }}" | |
| - name: Create GitHub Release | |
| uses: softprops/action-gh-release@v2 | |
| if: steps.check-changes.outputs.has-changes == 'true' | |
| with: | |
| draft: false | |
| repository: space-code/network-layer | |
| name: ${{ steps.next-version.outputs.NEXT_VERSION }} | |
| tag_name: ${{ steps.next-version.outputs.NEXT_VERSION }} | |
| body: ${{ steps.release-notes.outputs.RELEASE_NOTES }} | |
| target_commitish: ${{ steps.auto-commit-action.outputs.commit_hash }} | |
| docc: | |
| name: build and deploy docc | |
| runs-on: macos-latest | |
| needs: release | |
| if: ${{ needs.release.outputs.has-changes == 'true' }} | |
| timeout-minutes: 15 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ needs.release.outputs.commit-hash }} | |
| fetch-depth: 0 | |
| - name: Build DocC | |
| id: build | |
| uses: space-code/build-docc@main | |
| with: | |
| schemes: '["NetworkLayer"]' | |
| version: ${{ needs.release.outputs.next-version }} | |
| - name: Generate Index Page | |
| uses: space-code/generate-index@v1.0.0 | |
| with: | |
| version: ${{ needs.release.outputs.next-version }} | |
| project-name: 'NetworkLayer' | |
| project-description: 'NetworkLayer is a modern, type-safe Swift framework for elegant network communication. Built with async/await and actor-based architecture for thread-safe request processing.' | |
| modules: | | |
| [ | |
| { | |
| "name": "NetworkLayer", | |
| "path": "networklayer", | |
| "description": "Core networking functionality including request processing, authentication handling, retry policies, and session management. Features thread-safe actor-based architecture.", | |
| "badge": "Core Module" | |
| }, | |
| { | |
| "name": "NetworkLayerInterfaces", | |
| "path": "networklayerinterfaces", | |
| "description": "Protocol definitions and public interfaces for extensibility and testing. Includes IRequest, IRequestProcessor, and IAuthenticationInterceptor protocols.", | |
| "badge": "Interfaces" | |
| } | |
| ] | |
| - name: Deploy | |
| uses: peaceiris/actions-gh-pages@v4 | |
| with: | |
| github_token: ${{ secrets.GITHUB_TOKEN }} | |
| publish_dir: ./docs |