diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..d4d662d --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,133 @@ +name: Publish Docker + +on: + push: + branches: ["release"] + +jobs: + build_and_publish_platform_containers: + name: Build and publish platform containers + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: + - warp-ubuntu-latest-x64-4x + - warp-ubuntu-latest-arm64-4x + + steps: + - uses: actions/checkout@v4 + with: + fetch-tags: true + + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build the docker image + env: + BUILD_PLATFORM: ${{ matrix.os == 'warp-ubuntu-latest-arm64-4x' && 'arm64' || 'amd64' }} + run: | + APP_VERSION="$(git name-rev --tags --name-only $(git rev-parse HEAD) | head -n 1 | sed 's/\^0//')" + GIT_SHA="$(git rev-parse HEAD)" + + docker build \ + -f ./docker/Dockerfile \ + --progress=plain \ + -t "unsend/unsend-$BUILD_PLATFORM:latest" \ + -t "unsend/unsend-$BUILD_PLATFORM:$GIT_SHA" \ + -t "unsend/unsend-$BUILD_PLATFORM:$APP_VERSION" \ + -t "ghcr.io/unsend/unsend-$BUILD_PLATFORM:latest" \ + -t "ghcr.io/unsend/unsend-$BUILD_PLATFORM:$GIT_SHA" \ + -t "ghcr.io/unsend/unsend-$BUILD_PLATFORM:$APP_VERSION" \ + . + + - name: Push the docker image to DockerHub + run: docker push --all-tags "unsend/unsend-$BUILD_PLATFORM" + env: + BUILD_PLATFORM: ${{ matrix.os == 'warp-ubuntu-latest-arm64-4x' && 'arm64' || 'amd64' }} + + - name: Push the docker image to GitHub Container Registry + run: docker push --all-tags "ghcr.io/unsend/unsend-$BUILD_PLATFORM" + env: + BUILD_PLATFORM: ${{ matrix.os == 'warp-ubuntu-latest-arm64-4x' && 'arm64' || 'amd64' }} + + create_and_publish_manifest: + name: Create and publish manifest + runs-on: ubuntu-latest + needs: build_and_publish_platform_containers + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-tags: true + + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GH_TOKEN }} + + - name: Create and push DockerHub manifest + run: | + APP_VERSION="$(git name-rev --tags --name-only $(git rev-parse HEAD) | head -n 1 | sed 's/\^0//')" + GIT_SHA="$(git rev-parse HEAD)" + + docker manifest create \ + unsend/unsend:latest \ + --amend unsend/unsend-amd64:latest \ + --amend unsend/unsend-arm64:latest \ + + docker manifest create \ + unsend/unsend:$GIT_SHA \ + --amend unsend/unsend-amd64:$GIT_SHA \ + --amend unsend/unsend-arm64:$GIT_SHA \ + + docker manifest create \ + unsend/unsend:$APP_VERSION \ + --amend unsend/unsend-amd64:$APP_VERSION \ + --amend unsend/unsend-arm64:$APP_VERSION \ + + docker manifest push unsend/unsend:latest + docker manifest push unsend/unsend:$GIT_SHA + docker manifest push unsend/unsend:$APP_VERSION + + - name: Create and push Github Container Registry manifest + run: | + APP_VERSION="$(git name-rev --tags --name-only $(git rev-parse HEAD) | head -n 1 | sed 's/\^0//')" + GIT_SHA="$(git rev-parse HEAD)" + + docker manifest create \ + ghcr.io/unsend/unsend:latest \ + --amend ghcr.io/unsend/unsend-amd64:latest \ + --amend ghcr.io/unsend/unsend-arm64:latest \ + + docker manifest create \ + ghcr.io/unsend/unsend:$GIT_SHA \ + --amend ghcr.io/unsend/unsend-amd64:$GIT_SHA \ + --amend ghcr.io/unsend/unsend-arm64:$GIT_SHA \ + + docker manifest create \ + ghcr.io/unsend/unsend:$APP_VERSION \ + --amend ghcr.io/unsend/unsend-amd64:$APP_VERSION \ + --amend ghcr.io/unsend/unsend-arm64:$APP_VERSION \ + + docker manifest push ghcr.io/unsend/unsend:latest + docker manifest push ghcr.io/unsend/unsend:$GIT_SHA + docker manifest push ghcr.io/unsend/unsend:$APP_VERSION diff --git a/.gitignore b/.gitignore index dbf76d9..b2a2c70 100644 --- a/.gitignore +++ b/.gitignore @@ -37,4 +37,6 @@ yarn-error.log* # Misc .DS_Store *.pem -prod_db.tar \ No newline at end of file +prod_db.tar + +bin \ No newline at end of file