From 57f02e3e37d919be0645ae3f5b6183eef16edbac Mon Sep 17 00:00:00 2001 From: celaraze Date: Fri, 15 Dec 2023 01:39:32 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=A4=96=E4=BC=98=E5=8C=96=20Github=20Actio?= =?UTF-8?q?ns?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci-container-docker-hub.yml | 50 ---------------- .../ci-container-github-packages.yml | 48 --------------- .../workflows/ci-publish-container-image.yml | 58 +++++++++++++++++++ .../{ci-laravel-test.yml => ci-test.yml} | 2 +- 4 files changed, 59 insertions(+), 99 deletions(-) delete mode 100644 .github/workflows/ci-container-docker-hub.yml delete mode 100644 .github/workflows/ci-container-github-packages.yml create mode 100644 .github/workflows/ci-publish-container-image.yml rename .github/workflows/{ci-laravel-test.yml => ci-test.yml} (97%) diff --git a/.github/workflows/ci-container-docker-hub.yml b/.github/workflows/ci-container-docker-hub.yml deleted file mode 100644 index 61a51825f..000000000 --- a/.github/workflows/ci-container-docker-hub.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: CI for Docker Hub - -on: - push: - tags: - - v* - -env: - # 设置 docker 镜像名 - IMAGE_NAME: cat - -jobs: - push: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Build image - run: docker build . --file Dockerfile --tag $IMAGE_NAME - - name: Log into registry - run: echo "${{ secrets.ACCESS_TOKEN }}" | docker login -u celaraze --password-stdin - - - name: Push image - run: | - # 拼接镜像 id,这个镜像 id 就是在使用 docker 镜像时 pull 后面的名字。 - IMAGE_ID=celaraze/$IMAGE_NAME - - # 将所有的大写字母转为小写 - IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]') - - # 从 GitHub.ref 中取出版本 - VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') - - # 从 tag 名字中替换 v 字符 - [[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//') - - # 如果当前的分支是 dev,那么将镜像标签设置为 dev - [[ "${{ github.ref }}" == "refs/heads/dev" ]] && VERSION=dev - - # Use Docker `latest` tag convention - # [ "$VERSION" == "main" ] && VERSION=latest - - echo IMAGE_ID=$IMAGE_ID - echo VERSION=$VERSION - # 推送 v* 标签的镜像 - docker tag $IMAGE_NAME $IMAGE_ID:$VERSION - docker push $IMAGE_ID:$VERSION - - # 推送 latest 标签的镜像 - docker tag $IMAGE_NAME $IMAGE_ID:latest - docker push $IMAGE_ID:latest diff --git a/.github/workflows/ci-container-github-packages.yml b/.github/workflows/ci-container-github-packages.yml deleted file mode 100644 index 05fb1dbbf..000000000 --- a/.github/workflows/ci-container-github-packages.yml +++ /dev/null @@ -1,48 +0,0 @@ -# -name: Create and publish a Docker image - -# Configures this workflow to run every time a change is pushed to the branch called `release`. -on: - push: - branches: [ 'main' ] - -# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds. -env: - REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository }} - -# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu. -jobs: - build-and-push-image: - runs-on: ubuntu-latest - # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job. - permissions: - contents: read - packages: write - # - steps: - - name: Checkout repository - uses: actions/checkout@v4 - # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here. - - name: Log in to the Container registry - uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.LOCAL_TOKEN }} - # This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels. - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - # This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages. - # It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository. - # It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step. - - name: Build and push Docker image - uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 - with: - context: . - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/ci-publish-container-image.yml b/.github/workflows/ci-publish-container-image.yml new file mode 100644 index 000000000..b220c79a8 --- /dev/null +++ b/.github/workflows/ci-publish-container-image.yml @@ -0,0 +1,58 @@ +name: CI for publishing container image + +on: + push: + tags: + - 'v*' + +env: + REGISTRY: ghcr.io + DOCKERHUB_REGISTRY: docker.io + IMAGE_NAME: ${{ github.repository }} + DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} + DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} + +jobs: + build-and-push-image: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Log in to the GitHub Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.LOCAL_TOKEN }} + + - name: Log in to Docker Hub + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.DOCKERHUB_REGISTRY }} + username: ${{ env.DOCKERHUB_USERNAME }} + password: ${{ env.DOCKERHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + ${{ env.DOCKERHUB_REGISTRY }}/${{ env.DOCKERHUB_USERNAME }}/${{ env.IMAGE_NAME }} + tags: | + type=ref,event=tag + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + + - name: Build and push Docker image + uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/ci-laravel-test.yml b/.github/workflows/ci-test.yml similarity index 97% rename from .github/workflows/ci-laravel-test.yml rename to .github/workflows/ci-test.yml index 1a9dc1c7d..c9cf3f16e 100644 --- a/.github/workflows/ci-laravel-test.yml +++ b/.github/workflows/ci-test.yml @@ -1,4 +1,4 @@ -name: CI for Laravel test +name: CI for testing on: push: