| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. |
| # The ASF licenses this file to You under the Apache License, Version 2.0 |
| # (the "License"); you may not use this file except in compliance with |
| # the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| name: Dubbo Release |
| |
| on: |
| push: |
| tags: |
| - 'v*' |
| |
| permissions: |
| contents: write |
| |
| jobs: |
| create_release: |
| name: Create Release |
| runs-on: ubuntu-latest |
| outputs: |
| upload_url: ${{ steps.create_release.outputs.upload_url }} |
| |
| steps: |
| - name: Check if Release Exists |
| id: check |
| uses: actions/github-script@v7 |
| with: |
| result-encoding: string |
| script: | |
| const tag = context.ref.replace('refs/tags/', ''); |
| try { |
| await github.rest.repos.getReleaseByTag({ |
| owner: context.repo.owner, |
| repo: context.repo.repo, |
| tag: tag, |
| }); |
| return "exists"; |
| } catch (e) { |
| if (e.status === 404) return "not_found"; |
| throw e; |
| } |
| |
| - name: Create GitHub Release |
| id: create_release |
| if: steps.check.outputs.result == 'not_found' |
| uses: actions/create-release@v1 |
| env: |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| with: |
| tag_name: ${{ github.ref_name }} |
| release_name: "${{ github.ref_name }}" |
| body: | |
| Update navi-discovery logic code. |
| draft: false |
| prerelease: false |
| |
| build_and_upload: |
| name: Build and Upload Binaries |
| needs: create_release |
| runs-on: ubuntu-latest |
| strategy: |
| matrix: |
| goos: [linux, darwin, windows] |
| goarch: [386, amd64, arm64] |
| exclude: |
| - goos: darwin |
| goarch: 386 |
| - goos: windows |
| goarch: arm64 |
| |
| steps: |
| - name: Checkout code |
| uses: actions/checkout@v4 |
| |
| - name: Set up Go |
| uses: actions/setup-go@v5 |
| with: |
| go-version-file: go.mod |
| |
| - name: Download dependencies |
| run: go mod download |
| |
| - name: Dubboctl Build binary |
| env: |
| GOOS: ${{ matrix.goos }} |
| GOARCH: ${{ matrix.goarch }} |
| GIT_VERSION: ${{ github.ref_name }} |
| run: | |
| mkdir -p build/dubboctl |
| make build-dubboctl GOOS=${GOOS} GOARCH=${GOARCH} GIT_VERSION=${GIT_VERSION} |
| cp README.md LICENSE build/dubboctl/ |
| mv bin/dubboctl* build/dubboctl/ |
| ls -ln build/dubboctl/ |
| |
| - name: Dubbo Build binary |
| env: |
| GOOS: ${{ matrix.goos }} |
| GOARCH: ${{ matrix.goarch }} |
| GIT_VERSION: ${{ github.ref_name }} |
| run: | |
| mkdir -p build/dubboctl |
| make build-dubboctl GOOS=${GOOS} GOARCH=${GOARCH} GIT_VERSION=${GIT_VERSION} |
| make clone-sample GOOS=${GOOS} GOARCH=${GOARCH} GIT_VERSION=${GIT_VERSION} |
| cp README.md LICENSE build/ |
| mv bin/dubboctl* build/dubboctl/ |
| mv bin/samples/ build/ |
| ls -ln build/dubboctl/ ; ls -ln build/ |
| |
| - name: Dubboctl Rename windows |
| if: matrix.goos == 'windows' |
| run: | |
| cp build/dubboctl/dubboctl build/dubboctl/dubboctl.exe |
| |
| - name: dubboctl Package files |
| id: package_ctl |
| run: | |
| VERSION=${GITHUB_REF#refs/tags/} |
| FILENAME=dubboctl-${VERSION}-${{ matrix.goos }}-${{ matrix.goarch }} |
| DIRNAME=dubboctl-${VERSION} |
| mkdir -p ${DIRNAME}/bin |
| cp build/dubboctl/dubboctl ${DIRNAME}/bin |
| ls -ln ${DIRNAME}/bin |
| cp build/dubboctl/README.md build/dubboctl/LICENSE ${DIRNAME} |
| ls -Rlh ${DIRNAME} |
| if [ "${{ matrix.goos }}" = "windows" ]; then |
| zip -r ${FILENAME}.zip ${DIRNAME}/bin |
| echo "name=${FILENAME}.zip" >> $GITHUB_OUTPUT |
| else |
| tar -czvf ${FILENAME}.tar.gz ${DIRNAME} |
| echo "name=${FILENAME}.tar.gz" >> $GITHUB_OUTPUT |
| fi |
| |
| - name: dubbo Package files |
| id: package_dubbo |
| run: | |
| VERSION=${GITHUB_REF#refs/tags/} |
| FILENAME=dubbo-${VERSION}-${{ matrix.goos }}-${{ matrix.goarch }} |
| DIRNAME=dubbo-${VERSION} |
| mkdir -p ${DIRNAME}/bin |
| cp build/dubboctl/dubboctl ${DIRNAME}/bin/ |
| cp build/README.md build/LICENSE ${DIRNAME} |
| cp -r build/samples ${DIRNAME} |
| ls -Rlh ${DIRNAME} |
| if [ "${{ matrix.goos }}" = "windows" ]; then |
| zip -r ${FILENAME}.zip ${DIRNAME} |
| echo "name=${FILENAME}.zip" >> $GITHUB_OUTPUT |
| else |
| tar -czvf ${FILENAME}.tar.gz ${DIRNAME} |
| echo "name=${FILENAME}.tar.gz" >> $GITHUB_OUTPUT |
| fi |
| |
| - name: Upload Dubboctl Release Asset |
| uses: actions/upload-release-asset@v1 |
| env: |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| with: |
| upload_url: ${{ needs.create_release.outputs.upload_url }} |
| asset_path: ${{ steps.package_ctl.outputs.name }} |
| asset_name: ${{ steps.package_ctl.outputs.name }} |
| asset_content_type: application/octet-stream |
| |
| - name: Upload Dubbo Release Asset |
| uses: actions/upload-release-asset@v1 |
| env: |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| with: |
| upload_url: ${{ needs.create_release.outputs.upload_url }} |
| asset_path: ${{ steps.package_dubbo.outputs.name }} |
| asset_name: ${{ steps.package_dubbo.outputs.name }} |
| asset_content_type: application/octet-stream |