From 585aaf86c9978b75c2510e42cf31357cf424b4b9 Mon Sep 17 00:00:00 2001 From: cloudforet-admin Date: Sat, 6 Jan 2024 16:31:17 +0900 Subject: [PATCH] [CI] Deploy CI --- .github/workflows/dispatch_release.yaml | 338 ++++++++++++++++++++++++ 1 file changed, 338 insertions(+) diff --git a/.github/workflows/dispatch_release.yaml b/.github/workflows/dispatch_release.yaml index dd35db7..a0b830a 100644 --- a/.github/workflows/dispatch_release.yaml +++ b/.github/workflows/dispatch_release.yaml @@ -117,12 +117,344 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Build and push to pyengine + uses: docker/build-push-action@v4 + with: + context: . + platforms: ${{ env.ARCH }} + push: true + tags: pyengine/${{ env.SERVICE }}:${{ env.VERSION }} + + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.CLOUDFORET_DEV_DOCKER_USERNAME }} + password: ${{ secrets.CLOUDFORET_DEV_DOCKER_PASSWORD }} + + - name: Build and push to cloudforet + uses: docker/build-push-action@v4 + with: + context: . + platforms: ${{ env.ARCH }} + push: true + tags: cloudforet/${{ env.SERVICE }}:${{ env.VERSION }} + + - name: Notice when job fails + if: failure() + uses: 8398a7/action-slack@v3.2.0 + with: + status: ${{job.status}} + fields: repo,workflow,job + author_name: Github Action Slack + + notification: + needs: docker + runs-on: ubuntu-latest + steps: + - name: Slack + if: always() + uses: 8398a7/action-slack@v3.2.0 + with: + status: ${{job.status}} + fields: repo,message,commit,author,action,ref,workflow,job + author_name: Github Action Slack +name: "[Dispatch] Release" + +on: + workflow_dispatch: + inputs: + version: + description: 'enter version(x.y.z)' + required: true + default: '2.0.0' + container_arch: + type: choice + description: 'choose container architecture' + default: linux/amd64,linux/arm64 + options: + - "linux/amd64" + - "linux/amd64,linux/arm64" + + +env: + VERSION: ${{ github.event.inputs.version }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} + ARCH: ${{ github.event.inputs.container_arch }} + +jobs: + owner_check: + if: github.repository_owner == 'cloudforet-io' + runs-on: ubuntu-latest + steps: + - run: echo ${{ github.repository_owner }} + condition_check: + if: github.repository_owner == 'cloudforet-io' + runs-on: ubuntu-latest + needs: owner_check + steps: + - name: check version format + run: | + if [[ !(${{ env.VERSION }} =~ ^[0-9]\.[0-9]?[0-9]\.[0-9]?[0-9]$) ]]; + then + echo "You entered an incorrect version format." + exit 1 + fi + - name: debugging + run: | + echo "major=$(echo ${{env.VERSION}} | cut -c 2- | cut -d'.' -f1)" + echo "minor=$(echo ${{env.VERSION}} | cut -c 2- | cut -d'.' -f2)" + echo "patch=$(echo ${{env.VERSION}} | cut -c 2- | cut -d'.' -f3)" + - name: notice when job fails + if: failure() + uses: 8398a7/action-slack@v3.2.0 + with: + status: ${{job.status}} + fields: repo,workflow,job + author_name: Github Action Slack + + update_master_branch_version_file: + needs: condition_check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + token: ${{ secrets.PAT_TOKEN }} + - name: update version file # That is used where the master_push actions + run: | + echo ${{ env.VERSION }} > src/VERSION + git config user.name github-actions + git config user.email github-actions@github.com + git add . + git commit -m "[CI/CD] release version ${{ env.VERSION }}" + - name: push changes + uses: ad-m/github-push-action@master + with: + github_token: ${{ secrets.PAT_TOKEN }} + branch: master + - name: notice when job fails + if: failure() + uses: 8398a7/action-slack@v3.2.0 + with: + status: ${{job.status}} + fields: repo,workflow,job + author_name: Github Action Slack + + tagging: + needs: update_master_branch_version_file + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + token: ${{ secrets.PAT_TOKEN }} + - name: git tagging + run: | + git tag ${{ env.VERSION }} + git push origin "${{ env.VERSION }}" + - name: notice when job fails + if: failure() + uses: 8398a7/action-slack@v3.2.0 + with: + status: ${{job.status}} + fields: repo,workflow,job + author_name: Github Action Slack + + docker: + needs: tagging + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + token: ${{ secrets.PAT_TOKEN }} + + - name: get service name + run: | + echo "SERVICE=$(echo ${{ github.repository }} | cut -d '/' -f2)" >> $GITHUB_ENV + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Build and push to pyengine + uses: docker/build-push-action@v4 + with: + context: . + platforms: ${{ env.ARCH }} + push: true + tags: pyengine/${{ env.SERVICE }}:${{ env.VERSION }} + - name: Login to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.CLOUDFORET_DEV_DOCKER_USERNAME }} password: ${{ secrets.CLOUDFORET_DEV_DOCKER_PASSWORD }} + - name: Build and push to cloudforet + uses: docker/build-push-action@v4 + with: + context: . + platforms: ${{ env.ARCH }} + push: true + tags: cloudforet/${{ env.SERVICE }}:${{ env.VERSION }} + + - name: Notice when job fails + if: failure() + uses: 8398a7/action-slack@v3.2.0 + with: + status: ${{job.status}} + fields: repo,workflow,job + author_name: Github Action Slack + + notification: + needs: docker + runs-on: ubuntu-latest + steps: + - name: Slack + if: always() + uses: 8398a7/action-slack@v3.2.0 + with: + status: ${{job.status}} + fields: repo,message,commit,author,action,ref,workflow,job + author_name: Github Action Slack +name: "[Dispatch] Release" + +on: + workflow_dispatch: + inputs: + version: + description: 'enter version(x.y.z)' + required: true + default: '2.0.0' + container_arch: + type: choice + description: 'choose container architecture' + default: linux/amd64,linux/arm64 + options: + - "linux/amd64" + - "linux/amd64,linux/arm64" + + +env: + VERSION: ${{ github.event.inputs.version }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} + ARCH: ${{ github.event.inputs.container_arch }} + +jobs: + owner_check: + if: github.repository_owner == 'cloudforet-io' + runs-on: ubuntu-latest + steps: + - run: echo ${{ github.repository_owner }} + condition_check: + if: github.repository_owner == 'cloudforet-io' + runs-on: ubuntu-latest + needs: owner_check + steps: + - name: check version format + run: | + if [[ !(${{ env.VERSION }} =~ ^[0-9]\.[0-9]?[0-9]\.[0-9]?[0-9]$) ]]; + then + echo "You entered an incorrect version format." + exit 1 + fi + - name: debugging + run: | + echo "major=$(echo ${{env.VERSION}} | cut -c 2- | cut -d'.' -f1)" + echo "minor=$(echo ${{env.VERSION}} | cut -c 2- | cut -d'.' -f2)" + echo "patch=$(echo ${{env.VERSION}} | cut -c 2- | cut -d'.' -f3)" + - name: notice when job fails + if: failure() + uses: 8398a7/action-slack@v3.2.0 + with: + status: ${{job.status}} + fields: repo,workflow,job + author_name: Github Action Slack + + update_master_branch_version_file: + needs: condition_check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + token: ${{ secrets.PAT_TOKEN }} + - name: update version file # That is used where the master_push actions + run: | + echo ${{ env.VERSION }} > src/VERSION + git config user.name github-actions + git config user.email github-actions@github.com + git add . + git commit -m "[CI/CD] release version ${{ env.VERSION }}" + - name: push changes + uses: ad-m/github-push-action@master + with: + github_token: ${{ secrets.PAT_TOKEN }} + branch: master + - name: notice when job fails + if: failure() + uses: 8398a7/action-slack@v3.2.0 + with: + status: ${{job.status}} + fields: repo,workflow,job + author_name: Github Action Slack + + tagging: + needs: update_master_branch_version_file + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + token: ${{ secrets.PAT_TOKEN }} + - name: git tagging + run: | + git tag ${{ env.VERSION }} + git push origin "${{ env.VERSION }}" + - name: notice when job fails + if: failure() + uses: 8398a7/action-slack@v3.2.0 + with: + status: ${{job.status}} + fields: repo,workflow,job + author_name: Github Action Slack + + docker: + needs: tagging + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + token: ${{ secrets.PAT_TOKEN }} + + - name: get service name + run: | + echo "SERVICE=$(echo ${{ github.repository }} | cut -d '/' -f2)" >> $GITHUB_ENV + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + - name: Build and push to pyengine uses: docker/build-push-action@v4 with: @@ -131,6 +463,12 @@ jobs: push: true tags: pyengine/${{ env.SERVICE }}:${{ env.VERSION }} + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.CLOUDFORET_DEV_DOCKER_USERNAME }} + password: ${{ secrets.CLOUDFORET_DEV_DOCKER_PASSWORD }} + - name: Build and push to cloudforet uses: docker/build-push-action@v4 with: