From 1b3878fc2d90b17ab420fcce7089f850c95153a9 Mon Sep 17 00:00:00 2001 From: Yang Yang <153794571+YuWanTingbb@users.noreply.github.com> Date: Sun, 25 Feb 2024 23:26:03 +0800 Subject: [PATCH] Update maven-publish.yml --- .github/workflows/maven-publish.yml | 73 ++++++++++++++++------------- 1 file changed, 41 insertions(+), 32 deletions(-) diff --git a/.github/workflows/maven-publish.yml b/.github/workflows/maven-publish.yml index e2a915b..75eb3f7 100644 --- a/.github/workflows/maven-publish.yml +++ b/.github/workflows/maven-publish.yml @@ -1,5 +1,4 @@ name: Build and Upload Spring Boot Native Image with Maven - on: release: types: [created] @@ -11,75 +10,86 @@ on: jobs: build: - runs-on: ${{ matrix.os }}-${{ matrix.arch }} + runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] - arch: [arm64, amd64] steps: - uses: actions/checkout@v2 - name: Set tag name id: tag_name - run: echo "::set-output name=tag::${{ github.event_name == 'release' && github.ref.replace('refs/tags/', '') || github.event.inputs.tag }}" + run: | + if [ "${{ github.event_name }}" = "release" ]; then + echo "::set-output name=tag::${GITHUB_REF#refs/tags/}" + elif [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + echo "::set-output name=tag::${{ github.event.inputs.tag }}" + fi shell: bash - - name: Set up JDK 17 uses: actions/setup-java@v2 with: java-version: '17' distribution: 'temurin' - - name: Cache Maven packages uses: actions/cache@v2 with: path: ~/.m2 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} restore-keys: ${{ runner.os }}-m2 - - uses: graalvm/setup-graalvm@v1 with: java-version: '21' distribution: 'graalvm' github-token: ${{ secrets.GITHUB_TOKEN }} native-image-job-reports: 'true' - - name: Set execute permissions for mvnw run: chmod +x ./mvnw - - name: Set UTF-8 Encoding run: echo "JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8" >> $GITHUB_ENV - - - name: Build and Rename native image with Maven + - name: Build native image with Maven run: | ./mvnw native:compile -Pnative - mv ./target/gpt-4-copilot* ./target/gpt-4-copilot-${{ steps.tag_name.outputs.tag }}-${{ matrix.os }}-${{ matrix.arch }}${{ matrix.os == 'windows-latest' && '.exe' || '' }} + if [ "${{ matrix.os }}" = "windows-latest" ]; then + mv ./target/gpt-4-copilot.exe ./target/gpt-4-copilot-${{ steps.tag_name.outputs.tag }}-${{ matrix.os }}.exe + else + mv ./target/gpt-4-copilot ./target/gpt-4-copilot-${{ steps.tag_name.outputs.tag }}-${{ matrix.os }} + fi shell: bash - - - name: Package the executable + - name: Create directory for packaging run: | mkdir packaging - cp ./target/gpt-4-copilot-${{ steps.tag_name.outputs.tag }}-${{ matrix.os }}-${{ matrix.arch }}* ./packaging/ + if [ "${{ matrix.os }}" = "windows-latest" ]; then + cp ./target/gpt-4-copilot-${{ steps.tag_name.outputs.tag }}-${{ matrix.os }}.exe ./packaging/gpt-4-copilot.exe + else + cp ./target/gpt-4-copilot-${{ steps.tag_name.outputs.tag }}-${{ matrix.os }} ./packaging/gpt-4-copilot + fi cp ./config.json ./packaging/config.json shell: bash - - - name: Create ZIP + - name: Create ZIP (Unix) + if: runner.os != 'Windows' run: | cd packaging - ${${ matrix.os == 'windows-latest' } && 'Compress-Archive -Path * -DestinationPath ../target/gpt-4-copilot-${{ steps.tag_name.outputs.tag }}-${{ matrix.os }}-${{ matrix.arch }}.zip' || 'zip -r ../target/gpt-4-copilot-${{ steps.tag_name.outputs.tag }}-${{ matrix.os }}-${{ matrix.arch }}.zip .'} - shell: ${{ matrix.os == 'windows-latest' && 'powershell' || 'bash' }} - + zip -r ../target/gpt-4-copilot-${{ steps.tag_name.outputs.tag }}-${{ matrix.os }}.zip . + shell: bash + - name: Create ZIP (Windows) + if: runner.os == 'Windows' + run: | + Compress-Archive -Path packaging/* -DestinationPath ./target/gpt-4-copilot-${{ steps.tag_name.outputs.tag }}-${{ matrix.os }}.zip + shell: powershell - name: Check if release exists id: check_release - uses: actions/github-script@v5 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - const { owner, repo } = context.repo - const tag = "${{ steps.tag_name.outputs.tag }}" - let release = await github.repos.getReleaseByTag({ owner, repo, tag }).catch(() => ({ data: {} })) - return { exists: !!release.data.id, upload_url: release.data.upload_url } - + run: | + RELEASE=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + https://api.github.com/repos/${{ github.repository }}/releases/tags/${{ steps.tag_name.outputs.tag }}) || true + if echo "$RELEASE" | grep -q '"id":'; then + echo "::set-output name=exists::true" + UPLOAD_URL=$(echo "$RELEASE" | jq -r .upload_url) + echo "::set-output name=upload_url::${UPLOAD_URL}" + else + echo "::set-output name=exists::false" + fi + shell: bash - name: Create Release if not exists if: steps.check_release.outputs.exists == 'false' id: create_release @@ -91,13 +101,12 @@ jobs: release_name: Release ${{ steps.tag_name.outputs.tag }} draft: false prerelease: false - - name: Upload ZIP to Release uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.check_release.outputs.exists == 'true' && steps.check_release.outputs.upload_url || steps.create_release.outputs.upload_url }} - asset_path: ./target/gpt-4-copilot-${{ steps.tag_name.outputs.tag }}-${{ matrix.os }}-${{ matrix.arch }}.zip - asset_name: gpt-4-copilot-${{ steps.tag_name.outputs.tag }}-${{ matrix.os }}-${{ matrix.arch }}.zip + asset_path: ./target/gpt-4-copilot-${{ steps.tag_name.outputs.tag }}-${{ matrix.os }}.zip + asset_name: gpt-4-copilot-${{ steps.tag_name.outputs.tag }}-${{ matrix.os }}.zip asset_content_type: application/zip