diff --git a/.github/workflows/mn-linux-snapshot.yml b/.github/workflows/mn-linux-snapshot.yml index 6db1a3db02e..674a6f3b817 100644 --- a/.github/workflows/mn-linux-snapshot.yml +++ b/.github/workflows/mn-linux-snapshot.yml @@ -18,8 +18,8 @@ jobs: - name: "☕️ Setup GraalVM CE" uses: graalvm/setup-graalvm@v1.1.9 with: - version: '22.3.2' java-version: '17' + distribution: 'graalvm-community' native-image-musl: 'true' components: 'native-image' github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/mn-macos-snapshot.yml b/.github/workflows/mn-macos-snapshot.yml index 836b61f77dd..f16356dce70 100644 --- a/.github/workflows/mn-macos-snapshot.yml +++ b/.github/workflows/mn-macos-snapshot.yml @@ -7,8 +7,8 @@ on: branches: - '[1-9]+.[0-9]+.x' jobs: - build: - name: Builds OS X Native CLI + intel: + name: Builds OS X Intel Native CLI runs-on: macos-13 steps: - name: "⬇ Checkout the repository" @@ -46,3 +46,42 @@ jobs: with: name: mn-darwin-amd64-snapshot path: mn-darwin-amd64-snapshot.zip + arm: + name: Builds OS X Arm Native CLI + runs-on: macos-latest + steps: + - name: "⬇ Checkout the repository" + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: "☕️ Setup GraalVM CE" + uses: graalvm/setup-graalvm@v1.1.9 + with: + java-version: '17' + distribution: 'graalvm-community' + components: 'native-image' + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: "📸 Build the Native Image" + run: ./gradlew micronaut-cli:nativeCompile --no-daemon + env: + GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} + GRADLE_ENTERPRISE_CACHE_USERNAME: ${{ secrets.GRADLE_ENTERPRISE_CACHE_USERNAME }} + GRADLE_ENTERPRISE_CACHE_PASSWORD: ${{ secrets.GRADLE_ENTERPRISE_CACHE_PASSWORD }} + - name: "✅ Verify Build" + run: ./starter-cli/build/native/nativeCompile/mn --version + - name: "✅ Verify Create App" + run: ./starter-cli/build/native/nativeCompile/mn create-app test + - name: "👷‍♀️Package Build" + env: + VERSION: ${{ github.event.release.tag_name }} + run: | + mkdir -p mn-darwin-aarch64-snapshot/bin + mv ./starter-cli/build/native/nativeCompile/mn mn-darwin-aarch64-snapshot/bin + cp ./LICENSE mn-darwin-aarch64-snapshot/ + zip -r mn-darwin-aarch64-snapshot.zip ./mn-darwin-aarch64-snapshot -x '*.DS_Store*' -x '__MAC_OSX' + - name: "🆙 Upload Snapshot" + if: success() && github.event_name == 'push' && github.ref == 'refs/heads/4.4.x' + uses: actions/upload-artifact@v4 + with: + name: mn-darwin-aarch64-snapshot + path: mn-darwin-aarch64-snapshot.zip diff --git a/.github/workflows/mn-windows-snapshot.yml b/.github/workflows/mn-windows-snapshot.yml index 17bc840759e..9029cf9b12a 100644 --- a/.github/workflows/mn-windows-snapshot.yml +++ b/.github/workflows/mn-windows-snapshot.yml @@ -18,8 +18,8 @@ jobs: - name: "☕️ Setup GraalVM CE" uses: graalvm/setup-graalvm@v1.1.9 with: - version: '22.3.2' java-version: '17' + distribution: 'graalvm-community' components: 'native-image' github-token: ${{ secrets.GITHUB_TOKEN }} - name: "📸 Build the Native Image" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a5be35305fe..5e2e92555fb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -109,8 +109,8 @@ jobs: - name: "☕️ Setup GraalVM CE" uses: graalvm/setup-graalvm@v1.1.9 with: - version: '22.3.2' java-version: '17' + distribution: 'graalvm-community' native-image-musl: 'true' components: 'native-image' github-token: ${{ secrets.GITHUB_TOKEN }} @@ -143,8 +143,8 @@ jobs: asset_name: mn-linux-amd64-${{ github.event.release.tag_name }}.zip asset_content_type: application/zip macos: - name: Release OS X Native CLI - runs-on: macos-latest + name: Release OS X Intel Native CLI + runs-on: macos-13 needs: [build] steps: - name: Checkout repository @@ -160,8 +160,8 @@ jobs: - name: "☕️ Setup GraalVM CE" uses: graalvm/setup-graalvm@v1.1.9 with: - version: '22.3.2' java-version: '17' + distribution: 'graalvm-community' components: 'native-image' github-token: ${{ secrets.GITHUB_TOKEN }} - name: "📸 Build the Native Image" @@ -192,6 +192,56 @@ jobs: asset_path: ./mn-darwin-amd64-${{ github.event.release.tag_name }}.zip asset_name: mn-darwin-amd64-${{ github.event.release.tag_name }}.zip asset_content_type: application/zip + macos-arm: + name: Release OS X Arm Native CLI + runs-on: macos-latest + needs: [build] + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + token: ${{ secrets.GH_TOKEN }} + - name: Set the current release version + id: release_version + run: | + release_version=${GITHUB_REF:11} + sed -i -e "s/^projectVersion.*$/projectVersion\=${release_version}/" gradle.properties + echo "release_version=${release_version}" >> $GITHUB_OUTPUT + - name: "☕️ Setup GraalVM CE" + uses: graalvm/setup-graalvm@v1.1.9 + with: + java-version: '17' + distribution: 'graalvm-community' + components: 'native-image' + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: "📸 Build the Native Image" + run: ./gradlew micronaut-cli:nativeCompile --no-daemon + env: + GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} + GRADLE_ENTERPRISE_CACHE_USERNAME: ${{ secrets.GRADLE_ENTERPRISE_CACHE_USERNAME }} + GRADLE_ENTERPRISE_CACHE_PASSWORD: ${{ secrets.GRADLE_ENTERPRISE_CACHE_PASSWORD }} + - name: "✅ Verify Build" + run: ./starter-cli/build/native/nativeCompile/mn --version + - name: "✅ Verify Create App" + run: ./starter-cli/build/native/nativeCompile/mn create-app test + - name: Package Build + env: + VERSION: ${{ github.event.release.tag_name }} + run: | + mkdir -p "mn-darwin-aarch64-${VERSION}/bin" + mv ./starter-cli/build/native/nativeCompile/mn "mn-darwin-aarch64-${VERSION}/bin" + cp ./LICENSE "mn-darwin-aarch64-${VERSION}/" + zip -r "mn-darwin-aarch64-${VERSION}.zip" "mn-darwin-aarch64-${VERSION}/" -x '*.DS_Store*' -x '__MAC_OSX' + - name: Upload Release Asset + id: upload-release-asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ github.event.release.upload_url }} + asset_path: ./mn-darwin-aarch64-${{ github.event.release.tag_name }}.zip + asset_name: mn-darwin-aarch64-${{ github.event.release.tag_name }}.zip + asset_content_type: application/zip windows: name: Release Windows Native CLI runs-on: windows-latest @@ -204,8 +254,8 @@ jobs: - name: "☕️ Setup GraalVM CE" uses: graalvm/setup-graalvm@v1.1.9 with: - version: '22.3.2' java-version: '17' + distribution: 'graalvm-community' components: 'native-image' github-token: ${{ secrets.GITHUB_TOKEN }} - name: "📸 Build the Native Image" @@ -244,7 +294,7 @@ jobs: sdkman: name: Release to SDKMAN! runs-on: ubuntu-latest - needs: [linux, macos, windows] + needs: [linux, macos, macos-arm, windows] steps: - name: Checkout repository uses: actions/checkout@v4 @@ -318,7 +368,7 @@ jobs: gcloud beta run deploy "micronaut-starter-$version" --quiet --image gcr.io/${{ secrets.GCLOUD_PROJECT }}/micronaut-starter:${{ steps.release_version.outputs.release_version }} --project ${{ secrets.GCLOUD_PROJECT }} --region us-central1 --update-env-vars=HOSTNAME="launch.micronaut.io",GITHUB_OAUTH_APP_CLIENT_ID=${{ secrets.GH_OAUTH_CLIENT_ID }},GITHUB_OAUTH_APP_CLIENT_SECRET=${{ secrets.GH_OAUTH_CLIENT_SECRET }} --platform managed --allow-unauthenticated --service-account=${{ secrets.GCLOUD_EMAIL }} homebrew: name: Update Homebrew cask - needs: [macos] + needs: [macos, macos-arm] runs-on: ubuntu-latest steps: - name: Checkout https://github.com/micronaut-projects/homebrew-tap @@ -326,20 +376,27 @@ jobs: with: token: ${{ secrets.GH_TOKEN }} repository: micronaut-projects/homebrew-tap - - name: Download ZIP - run: wget -q https://github.com/micronaut-projects/micronaut-starter/releases/download/${{ github.event.release.tag_name }}/mn-darwin-amd64-${{ github.event.release.tag_name }}.zip -O mn.zip + - name: Download Intel ZIP + run: wget -q https://github.com/micronaut-projects/micronaut-starter/releases/download/${{ github.event.release.tag_name }}/mn-darwin-amd64-${{ github.event.release.tag_name }}.zip -O intel.zip + - name: Download Arm ZIP + run: wget -q https://github.com/micronaut-projects/micronaut-starter/releases/download/${{ github.event.release.tag_name }}/mn-darwin-aarch64-${{ github.event.release.tag_name }}.zip -O arm.zip - name: Calculate SHA256 id: sha run: | - s=$(sha256sum mn.zip | awk '{ print $1 }') - echo "SHA256 is: $s" - echo "sha=${s}" >> $GITHUB_OUTPUT + s=$(sha256sum intel.zip | awk '{ print $1 }') + echo "INTEL SHA256 is: $s" + echo "intelsha=${s}" >> $GITHUB_OUTPUT + s=$(sha256sum arm.zip | awk '{ print $1 }') + echo "ARM SHA256 is: $s" + echo "armsha=${s}" >> $GITHUB_OUTPUT - name: Update Cask file env: - SHA: ${{ steps.sha.outputs.sha }} + INTELSHA: ${{ steps.sha.outputs.intelsha }} + ARMSHA: ${{ steps.sha.outputs.armsha }} run: | sed -i -e "s/ version.*/ version '${GITHUB_REF:11}'/" Casks/micronaut.rb - sed -i -e "s/sha256.*/sha256 '${SHA}'/" Casks/micronaut.rb + sed -i -e "s/ sha256 arm: '.*/ sha256 arm: '${ARMSHA}',/" Casks/micronaut.rb + sed -i -e "s/ intel: '.*/ intel: '${INTELSHA}'/" Casks/micronaut.rb cat Casks/micronaut.rb - uses: stefanzweifel/git-auto-commit-action@v5.0.1 with: diff --git a/starter-cli/build.gradle b/starter-cli/build.gradle index 8c92e76e089..a84d5c0d100 100644 --- a/starter-cli/build.gradle +++ b/starter-cli/build.gradle @@ -86,8 +86,7 @@ sdkman { version = project.version hashtag = "#micronautfw" platforms = [ - // TODO: Once graal native-image works for arm OSX, we should switch to building and publishing a non-rosetta release (https://github.com/oracle/graal/issues/2666) - "MAC_ARM64":"https://github.com/micronaut-projects/micronaut-starter/releases/download/v${project.version}/mn-darwin-amd64-v${project.version}.zip", + "MAC_ARM64":"https://github.com/micronaut-projects/micronaut-starter/releases/download/v${project.version}/mn-darwin-aarch64-v${project.version}.zip", "MAC_OSX":"https://github.com/micronaut-projects/micronaut-starter/releases/download/v${project.version}/mn-darwin-amd64-v${project.version}.zip", "WINDOWS_64":"https://github.com/micronaut-projects/micronaut-starter/releases/download/v${project.version}/mn-win-amd64-v${project.version}.zip", "LINUX_64":"https://github.com/micronaut-projects/micronaut-starter/releases/download/v${project.version}/mn-linux-amd64-v${project.version}.zip"