chore: bump golang and gomod (#440) #1252
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: | |
| push: | |
| branches: | |
| - "**" | |
| tags: | |
| - "v*.*.*" | |
| paths-ignore: | |
| - "**/*.md" | |
| - "**/*.yaml" | |
| pull_request: | |
| branches: | |
| - "**" | |
| paths-ignore: | |
| - "**/*.md" | |
| - "**/*.yaml" | |
| env: | |
| DOCKERHUB_REPO: ${{ secrets.DOCKERHUB_REPO != '' && secrets.DOCKERHUB_REPO || secrets.DOCKERHUB_USERNAME != '' && format('{0}/{1}', secrets.DOCKERHUB_USERNAME, 'aiproxy') || '' }} | |
| GHCR_REPO: ghcr.io/${{ github.repository }} | |
| ALIYUN_REGISTRY: ${{ secrets.ALIYUN_REGISTRY }} | |
| ALIYUN_REPO: ${{ secrets.ALIYUN_REPO != '' && secrets.ALIYUN_REPO || (secrets.ALIYUN_REGISTRY != '' && secrets.ALIYUN_USERNAME != '') && format('{0}/{1}/{2}', secrets.ALIYUN_REGISTRY, secrets.ALIYUN_USERNAME, 'aiproxy') || '' }} | |
| jobs: | |
| release-web: | |
| name: Release Web | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Use Node.js 22 | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: 22.x | |
| - name: Build | |
| working-directory: web | |
| run: | | |
| npm install -g pnpm | |
| pnpm install && pnpm run build | |
| - name: Upload Artifact | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: web | |
| path: web/dist | |
| release: | |
| name: Release AI Proxy | |
| runs-on: ubuntu-24.04 | |
| needs: release-web | |
| permissions: | |
| contents: write | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| targets: | |
| - GOOS: linux | |
| GOARCH: arm64 | |
| - GOOS: linux | |
| GOARCH: amd64 | |
| - GOOS: darwin | |
| GOARCH: arm64 | |
| - GOOS: darwin | |
| GOARCH: amd64 | |
| - GOOS: windows | |
| GOARCH: amd64 | |
| EXT: .exe | |
| - GOOS: windows | |
| GOARCH: arm64 | |
| EXT: .exe | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - uses: actions/download-artifact@v6 | |
| with: | |
| name: web | |
| path: core/public/dist | |
| - name: Setup Go | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version-file: "core/go.mod" | |
| - name: Generate Swagger | |
| working-directory: core | |
| run: bash scripts/swag.sh | |
| - name: Build | |
| working-directory: core | |
| run: | | |
| export GOOS=${{ matrix.targets.GOOS }} | |
| export GOARCH=${{ matrix.targets.GOARCH }} | |
| go build -trimpath -ldflags "-s -w" -o aiproxy-${{ matrix.targets.GOOS }}-${{ matrix.targets.GOARCH }}${{ matrix.targets.EXT }} | |
| - name: Get release meta | |
| id: release_meta | |
| if: ${{ startsWith(github.ref, 'refs/tags/') }} | |
| working-directory: core | |
| run: | | |
| version=${GITHUB_REF/refs\/tags\/v/} | |
| echo "version: ${version}" | |
| prerelease=$(echo ${version} | grep -E 'rc|beta|alpha|pre|dev|snapshot|nightly' || true) | |
| release_name="Version ${version}" | |
| echo "release_name: ${release_name}" | |
| if [ -n "${prerelease}" ]; then | |
| prerelease=true | |
| release_name="${release_name} (Prerelease)" | |
| else | |
| prerelease=false | |
| fi | |
| tag_name="v${version}" | |
| echo "prerelease: ${prerelease}" | |
| echo "tag_name: ${tag_name}" | |
| echo "PRERELEASE=${prerelease}" >> $GITHUB_OUTPUT | |
| echo "RELEASE_NAME=${release_name}" >> $GITHUB_OUTPUT | |
| echo "TAG_NAME=${tag_name}" >> $GITHUB_OUTPUT | |
| - name: Release | |
| uses: softprops/action-gh-release@v2 | |
| if: ${{ startsWith(github.ref, 'refs/tags/') }} | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| draft: false | |
| prerelease: ${{ steps.release_meta.outputs.PRERELEASE }} | |
| append_body: false | |
| fail_on_unmatched_files: true | |
| name: ${{ steps.release_meta.outputs.RELEASE_NAME }} | |
| tag_name: ${{ steps.release_meta.outputs.TAG_NAME }} | |
| files: | | |
| core/aiproxy-${{ matrix.targets.GOOS }}-${{ matrix.targets.GOARCH }}${{ matrix.targets.EXT }} | |
| build-docker-images: | |
| name: Build Docker Images | |
| permissions: | |
| packages: write | |
| strategy: | |
| matrix: | |
| include: | |
| - arch: amd64 | |
| - arch: arm64 | |
| runs-on: ubuntu-24.04-arm | |
| runs-on: ${{ matrix.runs-on || 'ubuntu-24.04' }} | |
| steps: | |
| - name: Login to GitHub Container Registry | |
| if: ${{ github.event_name != 'pull_request' && github.actor != 'dependabot[bot]' }} | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Login to DockerHub | |
| uses: docker/login-action@v3 | |
| if: ${{ github.event_name != 'pull_request' && github.actor != 'dependabot[bot]' && env.DOCKERHUB_REPO }} | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| - name: Login to Aliyun Registry | |
| uses: docker/login-action@v3 | |
| if: ${{ github.event_name != 'pull_request' && github.actor != 'dependabot[bot]' && env.ALIYUN_REGISTRY }} | |
| with: | |
| registry: ${{ env.ALIYUN_REGISTRY }} | |
| username: ${{ secrets.ALIYUN_USERNAME }} | |
| password: ${{ secrets.ALIYUN_PASSWORD }} | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Extract metadata (tags, labels) for Docker | |
| id: meta | |
| uses: docker/metadata-action@v5 | |
| with: | |
| images: | | |
| ${{ env.DOCKERHUB_REPO }} | |
| ${{ env.GHCR_REPO }} | |
| ${{ env.ALIYUN_REPO }} | |
| - name: Build for ${{ matrix.arch }} | |
| id: build | |
| uses: docker/build-push-action@v6 | |
| with: | |
| context: . | |
| labels: ${{ steps.meta.outputs.labels }} | |
| platforms: linux/${{ matrix.arch }} | |
| outputs: type=image,"name=${{ env.GHCR_REPO }}${{ env.DOCKERHUB_REPO && format(',{0}', env.DOCKERHUB_REPO) }}${{ env.ALIYUN_REPO && format(',{0}', env.ALIYUN_REPO) }}",name-canonical=true,push-by-digest=${{ github.event_name != 'pull_request' && github.actor != 'dependabot[bot]' }},push=${{ github.event_name != 'pull_request' && github.actor != 'dependabot[bot]' }} | |
| - name: Export digest | |
| working-directory: core | |
| run: | | |
| mkdir -p ${{ runner.temp }}/digests | |
| digest="${{ steps.build.outputs.digest }}" | |
| touch "${{ runner.temp }}/digests/${digest#sha256:}" | |
| - name: Upload digest | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: digests-${{ matrix.arch }} | |
| path: ${{ runner.temp }}/digests/* | |
| if-no-files-found: error | |
| retention-days: 1 | |
| release-docker-images: | |
| name: Push Docker Images | |
| permissions: | |
| packages: write | |
| needs: build-docker-images | |
| runs-on: ubuntu-24.04 | |
| if: ${{ github.event_name != 'pull_request' && github.actor != 'dependabot[bot]' }} | |
| steps: | |
| - name: Login to GitHub Container Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Login to DockerHub | |
| uses: docker/login-action@v3 | |
| if: ${{ env.DOCKERHUB_REPO }} | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| - name: Login to Aliyun Registry | |
| uses: docker/login-action@v3 | |
| if: ${{ env.ALIYUN_REGISTRY }} | |
| with: | |
| registry: ${{ env.ALIYUN_REGISTRY }} | |
| username: ${{ secrets.ALIYUN_USERNAME }} | |
| password: ${{ secrets.ALIYUN_PASSWORD }} | |
| - name: Download digests | |
| uses: actions/download-artifact@v6 | |
| with: | |
| path: ${{ runner.temp }}/digests | |
| pattern: digests-* | |
| merge-multiple: true | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Extract metadata (tags, labels) for Docker | |
| id: meta | |
| uses: docker/metadata-action@v5 | |
| with: | |
| images: | | |
| ${{ env.DOCKERHUB_REPO }} | |
| ${{ env.GHCR_REPO }} | |
| ${{ env.ALIYUN_REPO }} | |
| tags: | | |
| type=ref,event=branch | |
| type=ref,event=pr | |
| type=ref,event=tag | |
| type=semver,pattern={{version}} | |
| type=semver,pattern={{major}}.{{minor}} | |
| type=semver,pattern={{major}} | |
| type=sha | |
| - name: Create manifest list and push | |
| working-directory: ${{ runner.temp }}/digests | |
| run: | | |
| for TAG in $DOCKER_METADATA_OUTPUT_TAGS; do | |
| docker buildx imagetools create -t $TAG \ | |
| $(printf '${{ env.GHCR_REPO }}@sha256:%s ' *) | |
| sleep 5 | |
| done | |
| - name: Inspect image | |
| run: | | |
| docker buildx imagetools inspect ${{ env.GHCR_REPO }}:${{ steps.meta.outputs.version }} | |
| release-sealos-images: | |
| name: Push Sealos Images | |
| permissions: | |
| packages: write | |
| needs: release-docker-images | |
| runs-on: ubuntu-24.04 | |
| if: ${{ github.event_name != 'pull_request' && github.actor != 'dependabot[bot]' }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: install cache images tools | |
| run: | | |
| sudo bash ./.github/scripts/install.sh | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v3 | |
| - uses: docker/setup-buildx-action@v3 | |
| - name: Prepare cluster image list | |
| id: cluster_image_targets | |
| run: | | |
| set -euo pipefail | |
| images=("${GHCR_REPO}-cluster") | |
| if [ -n "${DOCKERHUB_REPO}" ]; then | |
| images+=("${DOCKERHUB_REPO}-cluster") | |
| fi | |
| if [ -n "${ALIYUN_REPO}" ]; then | |
| images+=("${ALIYUN_REPO}-cluster") | |
| fi | |
| { | |
| echo "images<<EOF" | |
| printf '%s\n' "${images[@]}" | |
| echo "EOF" | |
| csv=$(IFS=','; printf '%s' "${images[*]}") | |
| echo "names=${csv}" | |
| } >> "${GITHUB_OUTPUT}" | |
| - name: Extract metadata (tags, labels) for Docker | |
| id: meta | |
| uses: docker/metadata-action@v5 | |
| with: | |
| images: ${{ steps.cluster_image_targets.outputs.images }} | |
| tags: | | |
| type=ref,event=branch | |
| type=ref,event=pr | |
| type=ref,event=tag | |
| type=semver,pattern={{version}} | |
| type=semver,pattern={{major}}.{{minor}} | |
| type=semver,pattern={{major}} | |
| type=sha | |
| - name: cache images | |
| working-directory: core/deploy | |
| run: | | |
| sudo sealos login -u "${{ github.repository_owner }}" -p "${{ secrets.GITHUB_TOKEN }}" ghcr.io | |
| sed -i "s#image: ghcr.io/labring/aiproxy:latest#image: ${{ env.GHCR_REPO }}:${{ steps.meta.outputs.version }}#g" charts/aiproxy/values.yaml | |
| sudo sealos registry save --registry-dir=registry_amd64 --arch amd64 . | |
| sudo sealos registry save --registry-dir=registry_arm64 --arch arm64 . | |
| - name: Login to GitHub Container Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Login to DockerHub | |
| uses: docker/login-action@v3 | |
| if: ${{ env.DOCKERHUB_REPO }} | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| - name: Login to Aliyun Registry | |
| uses: docker/login-action@v3 | |
| if: ${{ env.ALIYUN_REGISTRY }} | |
| with: | |
| registry: ${{ env.ALIYUN_REGISTRY }} | |
| username: ${{ secrets.ALIYUN_USERNAME }} | |
| password: ${{ secrets.ALIYUN_PASSWORD }} | |
| - name: Build images | |
| uses: docker/build-push-action@v6 | |
| with: | |
| context: ./core/deploy | |
| file: ./core/deploy/Kubefile | |
| labels: ${{ steps.meta.outputs.labels }} | |
| platforms: linux/amd64,linux/arm64 | |
| push: ${{ github.event_name != 'pull_request' }} | |
| tags: ${{ steps.meta.outputs.tags }} |