name: Build And Push Docker Image on: push: paths-ignore: - "*.md" branches: - "master" - "develop" tags: - "v*" schedule: - cron: "00 20 * * *" workflow_dispatch: jobs: to_gitlab: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: pixta-dev/repository-mirroring-action@v1 with: target_repo_url: git@gitlab.com:whyour/qinglong.git ssh_private_key: ${{ secrets.GITLAB_SSH_PK }} to_gitee: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: pixta-dev/repository-mirroring-action@v1 with: target_repo_url: git@gitee.com:whyour/qinglong.git ssh_private_key: ${{ secrets.GITLAB_SSH_PK }} build-static: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v3 with: version: "8.3.1" - uses: actions/setup-node@v4 with: cache: "pnpm" - name: build front and back run: | pnpm install --frozen-lockfile pnpm build:front pnpm build:back - name: copy to static repo env: GITHUB_REPO: github.com/${{ github.repository_owner }}/qinglong-static GITHUB_BRANCH: ${{ github.ref_name }} REPO_GITEE: git@gitee.com:whyour/qinglong-static.git REPO_GITLAB: git@gitlab.com:whyour/qinglong-static.git PRIVATE_KEY: ${{ secrets.GITLAB_SSH_PK }} run: | mkdir -p tmp cd ./tmp cp -rf ../static/* ./ git init -b ${GITHUB_BRANCH} && git add . git config --local user.name 'github-actions[bot]' git config --local user.email 'github-actions[bot]@users.noreply.github.com' git commit --allow-empty -m "copy static at $(date +'%Y-%m-%d %H:%M:%S')" git push --force --quiet "https://${{ secrets.API_TOKEN }}@${GITHUB_REPO}.git" ${GITHUB_BRANCH}:${GITHUB_BRANCH} mkdir -p ~/.ssh echo "${PRIVATE_KEY}" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa export GIT_SSH_COMMAND="ssh -v -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no -l git" git remote add gitee "${REPO_GITEE}" git remote add gitlab "${REPO_GITLAB}" git gc git push --force --quiet gitee ${GITHUB_BRANCH}:${GITHUB_BRANCH} git push --force --quiet gitlab ${GITHUB_BRANCH}:${GITHUB_BRANCH} build: needs: build-static # 由于 ubuntu-latest 中使用 linux6.x 内核 linux/s390x npm 无法使用 runs-on: ubuntu-20.04 # runs-on: self-hosted permissions: packages: write contents: read steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v3 with: version: "8.3.1" - uses: actions/setup-node@v4 with: cache: "pnpm" - name: Setup timezone uses: szenius/set-timezone@v2.0 with: timezoneLinux: Asia/Shanghai - name: Login to DockerHub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Login to GHCR uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Extract metadata (tags, labels) for Docker id: meta uses: docker/metadata-action@v5 with: images: | ${{ github.repository }} ghcr.io/${{ github.repository }} # generate Docker tags based on the following events/attributes # nightly, master, pr-2, 1.2.3, 1.2, 1 flavor: | latest=false tags: | type=schedule,pattern=nightly type=edge type=ref,event=pr type=ref,event=branch,enable=${{ github.ref != format('refs/heads/{0}', 'master') }} type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'master') }} type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build and push id: docker_build uses: docker/build-push-action@v6 with: build-args: | MAINTAINER=${{ github.repository_owner }} QL_BRANCH=${{ github.ref_name }} SOURCE_COMMIT=${{ github.sha }} network: host platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,linux/386 # platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/s390x,linux/386 context: . file: ./docker/Dockerfile push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=registry,ref=whyour/qinglong:cache cache-to: type=registry,ref=whyour/qinglong:cache,mode=max - name: Image digest run: | echo ${{ steps.docker_build.outputs.digest }} build310: if: ${{ github.ref_name == 'master' }} needs: build-static runs-on: ubuntu-20.04 permissions: packages: write contents: read steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v3 with: version: "8.3.1" - uses: actions/setup-node@v4 with: cache: "pnpm" - name: Setup timezone uses: szenius/set-timezone@v2.0 with: timezoneLinux: Asia/Shanghai - name: Login to DockerHub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Login to GHCR uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build and push python3.10 id: docker_build_310 uses: docker/build-push-action@v6 with: build-args: | MAINTAINER=${{ github.repository_owner }} QL_BRANCH=${{ github.ref_name }} SOURCE_COMMIT=${{ github.sha }} network: host platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,linux/386 context: . file: ./docker/310.Dockerfile push: true tags: whyour/qinglong:python3.10 cache-from: type=registry,ref=whyour/qinglong:cache-python3.10 cache-to: type=registry,ref=whyour/qinglong:cache-python3.10,mode=max - name: Image digest run: | echo ${{ steps.docker_build_310.outputs.digest }}