name: Docker Image CI # 定义工作流的名称为 "Docker Image CI"
on: # 定义触发工作流的事件
push: # 当代码推送到以下分支时触发
branches: [ "main" ]
pull_request: # 当有拉取请求到以下分支时触发
branches: [ "main" ]
schedule:
# 设置定时任务的CRON表达式,这个例子是每天凌晨 1 点执行 时差
- cron: '10 9 * * *'
# 设置GitHub UB_TOKEN的权限以允许部署到GitHub Pages
permissions:
contents: write
pages: write
id-token: write
jobs: # 定义作业
build: # 定义一个名为 build 的作业
runs-on: ubuntu-latest # 指定作业在 ubuntu-latest 系统上运行
environment: xxx # 指定作业的环境,但此处被留空
steps: # 定义作业中的一系列步骤
- uses: actions/checkout@v3 # 使用 actions/checkout 动作检出代码到工作目录
- name: Build the Docker image # 给步骤命名为 "Build the Docker image"
run: docker build . --file Dockerfile --tag my-image-name:$(date +%s) # 构建 Docker 镜像的命令
- name: Docker Setup Buildx # 设置 Docker 的 Buildx
uses: docker/setup-buildx-action@v2.10.0 # 使用 docker/setup-buildx-action 动作
- name: Docker Login # 登录到 Docker 仓库
uses: docker/login-action@v2.2.0 # 使用 docker/login-action 动作
with: # 指定登录所需的用户名和密码,从 GitHub 仓库的 secrets 中获取
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and Push Images # 构建并推送镜像
id: buildx # 给这个步骤一个唯一的 id
uses: docker/build-push-action@v4.1.1 # 使用 docker/build-push-action 动作
with: # 指定构建和推送镜像所需的参数
context: . # 指定构建上下文为当前目录
platforms: linux/amd64,linux/arm64,linux/arm/v7 # 指定要构建的平台
push: true # 将构建的镜像推送到 Docker 仓库
tags: admibo/clash_vpn:latest # 指定要为镜像打的标签,使用 latest 标签
tests: # 发送通知,执行cloudfire上的任务
name: Tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup BATS
uses: mig4/setup-bats@v1
with:
bats-version: 1.5.0
- name: deploy-nav
run: curl -X POST "https://api.cloudflare.com/client/v4/pages/webhooks/deploy_hooks/7 "
- name: deploy-hook
run: curl -X POST "https://api.cloudflare.com/client/v4/pages/webhooks/deploy_hooks/7 "
- name: deploy-hook # 更新一些记录到本仓库,注意使用下面方式后就不要开启push 触发任务的功能,否则会陷入死循环,任务反复执行
run: echo `date "+%Y-%m-%d %H:%M:%S"` >> .github/readme123
- name: Commit changes
uses: actions-x/commit@v6
with:
email: me@example.com
name: GitHub Actions Autocommitter
branch: master
files: .github/readme123
force: true
directory: .