Release #57
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: 'Release version' | |
| required: true | |
| type: string | |
| title: | |
| description: 'Release title' | |
| required: true | |
| type: string | |
| env: | |
| DEVELOPER_DIR: /Applications/Xcode_26.0.1.app | |
| RELEASE_BRANCH: release/${{ inputs.version }} | |
| jobs: | |
| setup-credentials: | |
| name: Setup Actor Credentials | |
| uses: ./.github/workflows/actor-credentials.yml | |
| with: | |
| actor: ${{ github.actor }} | |
| permissions: | |
| contents: write | |
| secrets: inherit | |
| prepare-release: | |
| name: Prepare Release | |
| runs-on: ubuntu-24.04 | |
| needs: setup-credentials | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| persist-credentials: true | |
| - name: Checkout or create release branch | |
| run: | | |
| if git ls-remote --exit-code --heads origin ${{ env.RELEASE_BRANCH }}; then | |
| git fetch origin ${{ env.RELEASE_BRANCH }}:${{ env.RELEASE_BRANCH }} | |
| git checkout ${{ env.RELEASE_BRANCH }} | |
| else | |
| git checkout -b ${{ env.RELEASE_BRANCH }} | |
| fi | |
| - name: Update changelog | |
| run: "sed -i 's/## Main/## ${{ inputs.version }}: ${{ inputs.title }}/g' CHANGELOG.md" | |
| - name: Update built-in versions | |
| run: | | |
| sed 's/__VERSION__/${{ inputs.version }}/g' tools/Version.swift.template > Source/SwiftLintFramework/Models/Version.swift | |
| sed -i -e '3s/.*/ version = "${{ inputs.version }}",/' MODULE.bazel | |
| sed -i -e "s/^\(\s*s\.version\s*=\s*'\)[^']*'/\1${{ inputs.version }}'/" SwiftLint.podspec | |
| - name: Configure Git author | |
| uses: Homebrew/actions/git-user-config@main | |
| with: | |
| token: ${{ secrets[format('PERSONAL_GITHUB_TOKEN_{0}', needs.setup-credentials.outputs.author_uppercase)] }} | |
| - name: Commit changes | |
| id: pre_release | |
| run: | | |
| git commit -a -m "Prepare ${{ inputs.version }} release" | |
| git push origin HEAD | |
| verify-podspec: | |
| name: Verify Podspec | |
| runs-on: macOS-14 | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| persist-credentials: false | |
| - name: Set up Ruby and Bundler | |
| uses: ruby/setup-ruby@ab177d40ee5483edb974554986f56b33477e21d0 # v1.265.0 | |
| with: | |
| bundler-cache: true | |
| - name: Lint Podspec # Make sure Podspec still builds okay on CI with old release. | |
| run: | | |
| if ! grep -q 'DEVELOPER_DIR: ${{ env.DEVELOPER_DIR }}' .github/workflows/post-release.yml; then | |
| echo "ERROR: Xcode version not in sync with post-release workflow" | |
| exit 1 | |
| fi | |
| make pod_lint | |
| env: | |
| DEVELOPER_DIR: /Applications/Xcode_15.0.1.app # Supports iOS 17.0 simulator selected by CocoaPods. | |
| build-linux: | |
| name: Build Linux ${{ matrix.arch }} Binary | |
| needs: prepare-release | |
| runs-on: ${{ matrix.runner }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - arch: AMD64 | |
| runner: ubuntu-24.04 | |
| artifact_name: swiftlint-linux-amd64 | |
| - arch: ARM64 | |
| runner: ubuntu-24.04-arm | |
| artifact_name: swiftlint-linux-arm64 | |
| permissions: | |
| contents: read | |
| steps: | |
| - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| ref: ${{ env.RELEASE_BRANCH }} | |
| persist-credentials: false | |
| - name: Install dependencies | |
| run: sudo apt-get install -y libcurl4-openssl-dev libxml2-dev | |
| - name: Build binary | |
| run: make --debug spm_linux_build | |
| - name: Upload binary | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
| with: | |
| name: ${{ matrix.artifact_name }} | |
| path: .build/release/swiftlint | |
| build-static-linux: | |
| name: Build Static Linux ${{ matrix.arch }} Binary | |
| needs: prepare-release | |
| runs-on: ${{ matrix.runner }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - arch: ARM64 | |
| runner: ubuntu-24.04-arm | |
| swift_sdk: aarch64-swift-linux-musl | |
| artifact_name: swiftlint-static-arm64 | |
| - arch: AMD64 | |
| runner: ubuntu-24.04 | |
| swift_sdk: x86_64-swift-linux-musl | |
| artifact_name: swiftlint-static-amd64 | |
| permissions: | |
| contents: read | |
| env: | |
| BINARY_PATH: .build/${{ matrix.swift_sdk }}/release/swiftlint | |
| steps: | |
| - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| ref: ${{ env.RELEASE_BRANCH }} | |
| persist-credentials: false | |
| - name: Install SDK | |
| run: swift sdk install https://download.swift.org/swift-6.2-release/static-sdk/swift-6.2-RELEASE/swift-6.2-RELEASE_static-linux-0.0.1.artifactbundle.tar.gz --checksum d2225840e592389ca517bbf71652f7003dbf45ac35d1e57d98b9250368769378 | |
| - name: Build static binary | |
| run: | | |
| swift build \ | |
| -c release \ | |
| --product swiftlint \ | |
| --swift-sdk ${{ matrix.swift_sdk }} \ | |
| -Xswiftc -DSWIFTLINT_DISABLE_SOURCEKIT \ | |
| -Xlinker -z -Xlinker stack-size=0x80000 # 512KiB | |
| - name: Strip binary | |
| run: strip -s "$BINARY_PATH" | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
| with: | |
| name: ${{ matrix.artifact_name }} | |
| path: ${{ env.BINARY_PATH }} | |
| build-macos: | |
| name: Build macOS Binaries | |
| needs: prepare-release | |
| runs-on: macOS-26 | |
| permissions: | |
| contents: read | |
| steps: | |
| - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| ref: ${{ env.RELEASE_BRANCH }} | |
| persist-credentials: false | |
| - name: Build SwiftLint for macOS | |
| run: make --debug bazel_release | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
| with: | |
| name: swiftlint-macos | |
| path: | | |
| swiftlint | |
| bazel.tar.gz | |
| bazel.tar.gz.sha256 | |
| retention-days: 2 | |
| if-no-files-found: error | |
| create-release: | |
| name: Create Release | |
| needs: | |
| - setup-credentials | |
| - prepare-release | |
| - build-linux | |
| - build-static-linux | |
| - build-macos | |
| runs-on: macOS-26 | |
| permissions: | |
| actions: read | |
| contents: write | |
| steps: | |
| - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| ref: ${{ env.RELEASE_BRANCH }} | |
| persist-credentials: true | |
| - name: Configure author | |
| uses: Homebrew/actions/git-user-config@main | |
| with: | |
| token: ${{ secrets[format('PERSONAL_GITHUB_TOKEN_{0}', needs.setup-credentials.outputs.author_uppercase)] }} | |
| - name: Download binary artifacts | |
| uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 | |
| - name: Move artifacts | |
| run: | | |
| mv -f swiftlint-macos/* . | |
| mv -f swiftlint-linux-amd64/swiftlint swiftlint_linux_amd64 | |
| mv -f swiftlint-linux-arm64/swiftlint swiftlint_linux_arm64 | |
| mv -f swiftlint-static-amd64/swiftlint swiftlint_static_amd64 | |
| mv -f swiftlint-static-arm64/swiftlint swiftlint_static_arm64 | |
| - name: Make binaries executable | |
| run: chmod +x swiftlint* | |
| - name: Create artifacts | |
| run: | | |
| make --debug spm_artifactbundle | |
| make --debug package | |
| make --debug portable_zip | |
| make --debug zip_linux_release | |
| - name: Update binary target in Swift package | |
| run: ./tools/update-artifact-bundle.sh "${{ inputs.version }}" | |
| - name: Create tag and release commit | |
| run: | | |
| git commit -a -m "Release ${{ inputs.version }}" | |
| git tag -a "${{ inputs.version }}" -m "${{ inputs.title }}" | |
| git push origin HEAD | |
| git push origin "${{ inputs.version }}" | |
| - name: Create release | |
| run: ./tools/create-github-release.sh "${{ inputs.version }}" | |
| env: | |
| GITHUB_TOKEN: ${{ secrets[format('PERSONAL_GITHUB_TOKEN_{0}', needs.setup-credentials.outputs.author_uppercase)] }} | |
| - name: Add new changelog section | |
| run: | | |
| ./tools/add-new-changelog-section.sh | |
| git commit -a -m "Add new changelog section" | |
| git push origin HEAD |