name: DockerHub Build and Push #`DOCKER_HUB_USERNAME` is the username you use to log in to Docker Hub at https://hub.docker.com/. It's your Docker Hub # account username. #`DOCKER_HUB_ACCESS_TOKEN` is a security token that you should create in your Docker Hub account settings, specifically # under "account settings / security." This token should be generated with read and write access permissions to Docker # Hub repositories. It allows you to authenticate and interact with Docker Hub programmatically, such as pushing and pulling Docker images or making API requests. on: push: tags: - 'v[0-9]+.[0-9]+.[0-9]+*' # Trigger for tags like v1.2.3 - '[0-9]+.[0-9]+.[0-9]+*' # Trigger for tags like 1.2.3 or 1.2.3-alpha env: CARGO_TERM_COLOR: always LATEST_TAG: latest jobs: gotrue_image: runs-on: ubuntu-22.04 steps: - name: Check out the repository uses: actions/checkout@v3 with: fetch-depth: 1 - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Build and Push GoTrue run: | export TAG=${GITHUB_REF#refs/*/} docker buildx build --platform linux/amd64,linux/arm64 -t appflowyinc/gotrue:${TAG} -t appflowyinc/gotrue:latest -f docker/gotrue/Dockerfile --push docker/gotrue appflowy_cloud_image: runs-on: ubuntu-22.04 env: IMAGE_NAME: ${{ secrets.DOCKER_HUB_USERNAME }}/appflowy_cloud strategy: fail-fast: false matrix: job: - { name: "amd64", docker_platform: "linux/amd64" } - { name: "arm64v8", docker_platform: "linux/arm64" } steps: - name: Check out the repository uses: actions/checkout@v2 with: fetch-depth: 1 - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Get git tag id: vars run: | T=${GITHUB_REF#refs/*/} # Remove "refs/*/" prefix from GITHUB_REF echo "GIT_TAG=$T" >> $GITHUB_ENV - name: Extract metadata id: meta uses: docker/metadata-action@v4 with: images: registry.hub.docker.com/${{ env.IMAGE_NAME }} - name: Build and push ${{ matrix.job.image_name }}:${{ env.GIT_TAG }} uses: docker/build-push-action@v5 with: platforms: ${{ matrix.job.docker_platform }} push: true tags: | ${{ env.IMAGE_NAME }}:${{ env.LATEST_TAG }}-${{ matrix.job.name }} ${{ env.IMAGE_NAME }}:${{ env.GIT_TAG }}-${{ matrix.job.name }} labels: ${{ steps.meta.outputs.labels }} provenance: false build-args: | PROFILE=release FEATURES= - name: Logout from Docker Hub if: always() run: docker logout appflowy_cloud_docker_manifest: runs-on: ubuntu-22.04 needs: [ appflowy_cloud_image ] strategy: fail-fast: false matrix: job: - { image_name: "appflowy_cloud" } steps: - name: Log in to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Get git tag id: vars run: | T=${GITHUB_REF#refs/*/} # Remove "refs/*/" prefix from GITHUB_REF echo "GIT_TAG=$T" >> $GITHUB_ENV - name: Create and push manifest for ${{ matrix.job.image_name }}:version uses: Noelware/docker-manifest-action@master with: inputs: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.GIT_TAG }} images: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.GIT_TAG }}-amd64,${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.GIT_TAG }}-arm64v8 push: true - name: Create and push manifest for ${{ matrix.job.image_name }}:latest uses: Noelware/docker-manifest-action@master with: inputs: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.LATEST_TAG }} images: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.LATEST_TAG }}-amd64,${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.LATEST_TAG }}-arm64v8 push: true - name: Logout from Docker Hub if: always() run: docker logout admin_frontend_image: runs-on: ubuntu-22.04 env: IMAGE_NAME: ${{ secrets.DOCKER_HUB_USERNAME }}/admin_frontend strategy: fail-fast: false matrix: job: - { name: "amd64", docker_platform: "linux/amd64" } - { name: "arm64v8", docker_platform: "linux/arm64" } steps: - name: Check out the repository uses: actions/checkout@v2 with: fetch-depth: 1 - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Get git tag id: vars run: | T=${GITHUB_REF#refs/*/} # Remove "refs/*/" prefix from GITHUB_REF echo "GIT_TAG=$T" >> $GITHUB_ENV - name: Extract metadata id: meta uses: docker/metadata-action@v4 with: images: registry.hub.docker.com/${{ env.IMAGE_NAME }} - name: Build and push ${{ matrix.job.image_name }}:${{ env.GIT_TAG }} uses: docker/build-push-action@v5 with: platforms: ${{ matrix.job.docker_platform }} file: ./admin_frontend/Dockerfile push: true tags: | ${{ env.IMAGE_NAME }}:${{ env.LATEST_TAG }}-${{ matrix.job.name }} ${{ env.IMAGE_NAME }}:${{ env.GIT_TAG }}-${{ matrix.job.name }} labels: ${{ steps.meta.outputs.labels }} provenance: false - name: Logout from Docker Hub if: always() run: docker logout admin_frontend_docker_manifest: runs-on: ubuntu-22.04 needs: [ admin_frontend_image ] strategy: fail-fast: false matrix: job: - { image_name: "admin_frontend" } steps: - name: Log in to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Get git tag id: vars run: | T=${GITHUB_REF#refs/*/} # Remove "refs/*/" prefix from GITHUB_REF echo "GIT_TAG=$T" >> $GITHUB_ENV - name: Create and push manifest for ${{ matrix.job.image_name }}:version uses: Noelware/docker-manifest-action@master with: inputs: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.GIT_TAG }} images: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.GIT_TAG }}-amd64,${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.GIT_TAG }}-arm64v8 push: true - name: Create and push manifest for ${{ matrix.job.image_name }}:latest uses: Noelware/docker-manifest-action@master with: inputs: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.LATEST_TAG }} images: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.LATEST_TAG }}-amd64,${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.LATEST_TAG }}-arm64v8 push: true - name: Logout from Docker Hub if: always() run: docker logout appflowy_worker_image: runs-on: ubuntu-22.04 env: IMAGE_NAME: ${{ secrets.DOCKER_HUB_USERNAME }}/appflowy_worker strategy: fail-fast: false matrix: job: - { name: "amd64", docker_platform: "linux/amd64" } - { name: "arm64v8", docker_platform: "linux/arm64" } steps: - name: Check out the repository uses: actions/checkout@v2 with: fetch-depth: 1 - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Get git tag id: vars run: | T=${GITHUB_REF#refs/*/} # Remove "refs/*/" prefix from GITHUB_REF echo "GIT_TAG=$T" >> $GITHUB_ENV - name: Extract metadata id: meta uses: docker/metadata-action@v4 with: images: registry.hub.docker.com/${{ env.IMAGE_NAME }} - name: Build and push ${{ matrix.job.image_name }}:${{ env.GIT_TAG }} uses: docker/build-push-action@v5 with: platforms: ${{ matrix.job.docker_platform }} file: ./services/appflowy-worker/Dockerfile push: true tags: | ${{ env.IMAGE_NAME }}:${{ env.LATEST_TAG }}-${{ matrix.job.name }} ${{ env.IMAGE_NAME }}:${{ env.GIT_TAG }}-${{ matrix.job.name }} labels: ${{ steps.meta.outputs.labels }} provenance: false - name: Logout from Docker Hub if: always() run: docker logout appflowy_worker_manifest: runs-on: ubuntu-22.04 needs: [ appflowy_worker_image ] strategy: fail-fast: false matrix: job: - { image_name: "appflowy_worker" } steps: - name: Log in to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Get git tag id: vars run: | T=${GITHUB_REF#refs/*/} # Remove "refs/*/" prefix from GITHUB_REF echo "GIT_TAG=$T" >> $GITHUB_ENV - name: Create and push manifest for ${{ matrix.job.image_name }}:version uses: Noelware/docker-manifest-action@master with: inputs: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.GIT_TAG }} images: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.GIT_TAG }}-amd64,${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.GIT_TAG }}-arm64v8 push: true - name: Create and push manifest for ${{ matrix.job.image_name }}:latest uses: Noelware/docker-manifest-action@master with: inputs: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.LATEST_TAG }} images: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.LATEST_TAG }}-amd64,${{ secrets.DOCKER_HUB_USERNAME }}/${{ matrix.job.image_name }}:${{ env.LATEST_TAG }}-arm64v8 push: true - name: Logout from Docker Hub if: always() run: docker logout