diff --git a/.github/workflows/cloud-release.yml b/.github/workflows/cloud-release.yml new file mode 100644 index 00000000000..13f6b707cae --- /dev/null +++ b/.github/workflows/cloud-release.yml @@ -0,0 +1,72 @@ +name: Release Cloud + +on: + release: + types: [ published ] + +env: + # Common versions + GO_VERSION: "1.20" + DEFAULT_OWNER: "labring" + +jobs: + save-sealos: + uses: ./.github/workflows/import-save-sealos.yml + + release-controllers: + uses: ./.github/workflows/controllers.yml + with: + push_image: true + push_image_tag: ${{ github.event.release.tag_name }} + secrets: inherit + + release-frontends: + uses: ./.github/workflows/frontend.yml + with: + push_image: true + push_image_tag: ${{ github.event.release.tag_name }} + secrets: inherit + + release-service: + needs: + - save-sealos + uses: ./.github/workflows/services.yml + with: + push_image: true + push_image_tag: ${{ github.event.release.tag_name }} + secrets: inherit + + release-cloud: + needs: + - save-sealos + - release-controllers + - release-frontends + - release-service + uses: ./.github/workflows/cloud.yml + with: + push_image: true + push_image_tag: ${{ github.event.release.tag_name }} + build_from: ${{ github.event.release.tag_name }} + secrets: inherit + + release-offline-tar: + needs: + - release-cloud + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Build + run: export CLOUD_VERSION=${{ github.event.release.tag_name }} && bash ./scripts/cloud/build-offline-tar.sh + - name: Setup ossutil + uses: manyuanrong/setup-ossutil@v2.0 + with: + endpoint: ${{ secrets.OSS_ENDPOINT }} + access-key-id: ${{ secrets.OSS_ACCESS_KEY_ID }} + access-key-secret: ${{ secrets.OSS_ACCESS_KEY_SECRET }} + - name: Cat md5sum + run: cat ./sealos-cloud.tar.gz.md5 + - name: Upload + run: | + ossutil cp ./sealos-cloud.tar.gz oss://${{ secrets.OSS_BUCKET }}/cloud/sealos-cloud-${{ github.event.release.tag_name }}.tar.gz + ossutil cp ./sealos-cloud.tar.gz.md5 oss://${{ secrets.OSS_BUCKET }}/cloud/sealos-cloud-${{ github.event.release.tag_name }}.tar.gz.md5 \ No newline at end of file diff --git a/.github/workflows/cloud.yml b/.github/workflows/cloud.yml index abef9bb5ebf..c6e2cd4f11c 100644 --- a/.github/workflows/cloud.yml +++ b/.github/workflows/cloud.yml @@ -1,12 +1,23 @@ name: Build Cloud Cluster image on: - release: - types: [ published ] - workflow_run: - workflows: [ "Build Controllers image", "Build Frontend Image" ] - types: - - completed + workflow_call: + inputs: + push_image: + description: 'Push image' + required: false + type: boolean + default: false + push_image_tag: + description: 'Push all-in-one image tag, default is latest' + default: 'latest' + required: false + type: string + build_from: + description: 'Build all-in-one image from components image tag, default is latest' + default: 'latest' + required: false + type: string workflow_dispatch: inputs: push_image: diff --git a/.github/workflows/controllers.yml b/.github/workflows/controllers.yml index 3e28c33fcff..5d0c5eea7c8 100644 --- a/.github/workflows/controllers.yml +++ b/.github/workflows/controllers.yml @@ -3,6 +3,18 @@ name: Build Controllers image on: create: tags: + workflow_call: + inputs: + push_image: + description: "Push image" + required: false + type: boolean + default: false + push_image_tag: + description: "Push image tag" + default: "latest" + required: false + type: string workflow_dispatch: inputs: push_image: @@ -50,6 +62,7 @@ jobs: run: bash ./scripts/resolve-modules.sh ./controllers golangci-lint: + if: ${{ github.event_name }} == 'push' || ${{ github.event_name }} == 'pull_request' needs: [ resolve-modules ] runs-on: ubuntu-20.04 strategy: diff --git a/.github/workflows/frontend.yml b/.github/workflows/frontend.yml index 627744ae9e5..87cc9dce5bf 100644 --- a/.github/workflows/frontend.yml +++ b/.github/workflows/frontend.yml @@ -3,6 +3,18 @@ name: Build Frontend Image on: create: tags: + workflow_call: + inputs: + push_image: + description: "Push image" + required: false + type: boolean + default: false + push_image_tag: + description: "Push image tag" + default: "latest" + required: false + type: string workflow_dispatch: inputs: push_image: diff --git a/.github/workflows/services.yml b/.github/workflows/services.yml index fa2400655ac..5aa262b4255 100644 --- a/.github/workflows/services.yml +++ b/.github/workflows/services.yml @@ -4,6 +4,18 @@ name: Build Services image on: create: tags: + workflow_call: + inputs: + push_image: + description: 'Push image' + required: false + type: boolean + default: false + push_image_tag: + description: 'Push image tag' + default: 'latest' + required: false + type: string workflow_dispatch: inputs: push_image: diff --git a/scripts/cloud/build-offline-tar.sh b/scripts/cloud/build-offline-tar.sh new file mode 100644 index 00000000000..d368a53c75a --- /dev/null +++ b/scripts/cloud/build-offline-tar.sh @@ -0,0 +1,66 @@ +#!/bin/bash +set -x + +CLOUD_VERSION="latest" + +# pull and save images +mkdir -p output/tars + +images=( + docker.io/labring/sealos-cloud:$CLOUD_VERSION + docker.io/labring/kubernetes:v1.25.6 + docker.io/labring/helm:v3.12.0 + docker.io/labring/cilium:v1.12.14 + docker.io/labring/cert-manager:v1.8.0 + docker.io/labring/openebs:v3.4.0 + docker.io/labring/kubernetes-reflector:v7.0.151 + docker.io/labring/ingress-nginx:v1.5.1 + docker.io/labring/kubeblocks:v0.6.4 + docker.io/labring/metrics-server:v0.6.4 +) + +for image in "${images[@]}"; do + sealos pull "$image" + filename=$(echo "$image" | cut -d':' -f1 | tr / -) + if [[ ! -f "output/tars/${filename}.tar" ]]; then + sealos save -o "output/tars/${filename}.tar" "$image" + fi +done + + +# get and save cli +mkdir -p output/cli + +VERSION="v4.3.5" + +wget https://github.com/labring/sealos/releases/download/${VERSION}/sealos_${VERSION#v}_linux_amd64.tar.gz \ + && tar zxvf sealos_${VERSION#v}_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos output/cli + +# get and save install scripts +echo " +#!/bin/bash +bash scripts/load-images.sh +bash scripts/install.sh --cloud-version=$CLOUD_VERSION + +" > output/install.sh + +mkdir -p output/scripts + +echo ' +#!/bin/bash + +for file in tars/*.tar; do + sealos load -i $file +done + +cp cli/sealos /usr/local/bin +' > output/scripts/load-images.sh + +curl -sfL https://raw.githubusercontent.com/labring/sealos/${CLOUD_VERSION}/scripts/cloud/install.sh -o output/scripts/install.sh + +# tar output to a tar.gz +mv output sealos-cloud +tar czfv sealos-cloud.tar.gz sealos-cloud + +# md5sum output tar.gz +md5sum sealos-cloud.tar.gz | cut -d " " -f1 > sealos-cloud.tar.gz.md5 \ No newline at end of file