diff --git a/.github/workflows/docker-build-push-dockerhub-arm.yml b/.github/workflows/docker-build-push-dockerhub-arm.yml new file mode 100644 index 0000000..b822f9c --- /dev/null +++ b/.github/workflows/docker-build-push-dockerhub-arm.yml @@ -0,0 +1,123 @@ +# This is a basic workflow to help you get started with Actions + +name: Build and push ARM image to DockerHub + +# Controls when the workflow will run +on: + push: + branches: + - 'main' + tags: + - 'v*' + # update on run of Update Calendso nightly submodule update + workflow_run: + workflows: ["Update Calendso"] + branches: [main] + types: + - completed + # Allow running workflow manually from the Actions tab + workflow_dispatch: + +# Leaving in example for releases. Initially we simply push to 'latest' +# on: + # release: + # types: [ created ] + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: self-hosted + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: checkout + uses: actions/checkout@v3 + + - name: Git submodule update + run: | + git submodule update --init + + - name: Log in to the Docker Hub registry + uses: docker/login-action@v2 + with: + # Username used to log against the Docker registry + username: ${{ secrets.DOCKER_HUB_USERNAME }} + # Password or personal access token used to log against the Docker registry + password: ${{ secrets.DOCKER_HUB_TOKEN }} + # Log out from the Docker registry at the end of a job + logout: true # optional, default is true + + - name: Log in to the Github Container registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Docker meta + id: meta + uses: docker/metadata-action@v4 + with: + flavor: | + suffix=-arm + images: | + docker.io/calendso/calendso + docker.io/calcom/cal.com + ghcr.io/calcom/cal.com + + - name: Copy env + run: | + grep -o '^[^#]*' .env.example > .env + cat .env >> $GITHUB_ENV + echo "DATABASE_HOST=localhost:5432" >> $GITHUB_ENV + eval $(sed -e '/^#/d' -e 's/^/export /' -e 's/$/;/' .env) ; + + # Temporarily disable ARM build due to runner performance issues + # - name: Set up QEMU + # uses: docker/setup-qemu-action@v2 + + - name: Start database + run: | + docker compose up -d database + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + with: + platforms: linux/amd64,linux/arm64 + driver-opts: | + network=container:database + buildkitd-flags: | + --allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host +# config-inline: | +# [worker.oci] +# max-parallelism = 1 + + - name: Build and push image + id: docker_build + uses: docker/build-push-action@v4 + with: + context: ./ + file: ./Dockerfile + push: ${{ github.event_name != 'pull_request' }} + platforms: linux/amd64,linux/arm64 + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + build-args: | + NEXT_PUBLIC_WEBAPP_URL=${{ env.NEXT_PUBLIC_WEBAPP_URL }} + NEXT_PUBLIC_LICENSE_CONSENT=${{ env.NEXT_PUBLIC_LICENSE_CONSENT }} + NEXT_PUBLIC_TELEMETRY_KEY=${{ env.NEXT_PUBLIC_TELEMETRY_KEY }} + DATABASE_URL=postgresql://${{ env.POSTGRES_USER }}:${{ env.POSTGRES_PASSWORD }}@${{ env.DATABASE_HOST }}/${{ env.POSTGRES_DB }} + + # - name: Build with docker compose + # run: | + # DOCKER_BUILDKIT=0 docker compose build --build-arg DATABASE_URL=postgresql://${{ env.POSTGRES_USER }}:${{ env.POSTGRES_PASSWORD }}@${{ env.DATABASE_HOST }}/${{ env.POSTGRES_DB }} calcom + + - name: Cleanup + run: | + docker compose down + + - name: Image digest + run: echo ${{ steps.docker_build.outputs.digest }}