name: docker-node image on: push: schedule: - cron: '0 1 * * 0' # 01:00 sáng Chủ nhật (UTC) workflow_dispatch: # Cho phép chạy tay nếu cần env: IMAGE_BASE: git.thuanle.me/public/base IMAGE: docker-node jobs: build: strategy: matrix: arch: - arm64 - amd64 runs-on: ${{ matrix.arch }} steps: - name: Checkout uses: actions/checkout@v4 - name: Login to Docker Registry uses: docker/login-action@v3 with: registry: git.thuanle.me username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Build Docker images run: | echo "Building image ${{ env.IMAGE }} for architecture: ${{ matrix.arch }}" docker build \ -f ${{ env.IMAGE }}.Dockerfile \ -t ${{ env.IMAGE_BASE }}:${{ env.IMAGE }}-${{ matrix.arch }}-latest \ --label "build_date=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" \ --label "commit_sha=${{ github.sha }}" \ . docker push ${{ env.IMAGE_BASE }}:${{ env.IMAGE }}-${{ matrix.arch }}-latest amend-manifest: runs-on: linux needs: [build] steps: - name: Login to Docker Registry uses: docker/login-action@v3 with: registry: git.thuanle.me username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Push Docker manifest run: | echo "Delete existing manifest" docker manifest rm ${{ env.IMAGE_BASE }}:${{ env.IMAGE }}-latest || true echo "Create new manifest" docker manifest create ${{ env.IMAGE_BASE }}:${{ env.IMAGE }}-latest \ ${{ env.IMAGE_BASE }}:${{ env.IMAGE }}-amd64-latest \ ${{ env.IMAGE_BASE }}:${{ env.IMAGE }}-arm64-latest docker manifest push ${{ env.IMAGE_BASE }}:${{ env.IMAGE }}-latest