diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..29ffffe --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,89 @@ +name: Build and Release + +on: + push: + tags: + - 'v*' + +permissions: + contents: write + discussions: write + +jobs: + build: + name: Build and Release + runs-on: macos-14 + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Xcode + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: '16.1' + + - name: Install Tuist + run: | + brew install tuist + + - name: Generate Xcode Project + run: | + tuist generate --no-open + + - name: Build App + run: | + xcodebuild \ + -workspace DanceKunKun.xcworkspace \ + -scheme DanceKunKun \ + -configuration Release \ + -derivedDataPath ./DerivedData \ + -arch arm64 -arch x86_64 \ + clean build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO + + - name: Create DMG + run: | + brew install create-dmg + create-dmg \ + --volname "DanceKunKun" \ + --window-size 500 300 \ + --icon-size 100 \ + --icon "DanceKunKun.app" 150 150 \ + --app-drop-link 350 150 \ + --no-internet-enable \ + "DanceKunKun.dmg" \ + "DerivedData/Build/Products/Release/DanceKunKun.app" + + - name: Create Source Archives + run: | + zip -r "DanceKunKun-${{ github.ref_name }}-src.zip" . \ + -x "*.git*" -x "build/*" -x "*.xcodeproj/*" -x "*.xcworkspace/*" -x "*.dmg" -x "DerivedData/*" + + - name: Generate Checksums + run: | + echo "### DanceKunKun ${{ github.ref_name }}" > checksums.txt + echo "" >> checksums.txt + echo "- Universal Binary (Apple Silicon + Intel)" >> checksums.txt + echo "- macOS 13.0+" >> checksums.txt + echo "" >> checksums.txt + echo "### SHA-256 Checksums" >> checksums.txt + echo "\`\`\`" >> checksums.txt + shasum -a 256 DanceKunKun.dmg "DanceKunKun-${{ github.ref_name }}-src.zip" >> checksums.txt + echo "\`\`\`" >> checksums.txt + + - name: Release + uses: softprops/action-gh-release@v1 + if: startsWith(github.ref, 'refs/tags/v') + with: + files: | + DanceKunKun.dmg + DanceKunKun-${{ github.ref_name }}-src.zip + checksums.txt + body_path: checksums.txt + draft: false + prerelease: ${{ contains(github.ref, '-beta') || contains(github.ref, '-alpha') }} + generate_release_notes: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file