diff --git a/.github/workflows/docker-build-push-dockerhub.yml b/.github/workflows/docker-build-push-dockerhub.yml index 03c3c3a..3b62c52 100644 --- a/.github/workflows/docker-build-push-dockerhub.yml +++ b/.github/workflows/docker-build-push-dockerhub.yml @@ -17,6 +17,11 @@ on: - completed # Allow running workflow manually from the Actions tab workflow_dispatch: + # Uncomment below to allow specific version workflow run + # inputs: + # version: + # description: 'Version to build' + # required: true # Leaving in example for releases. Initially we simply push to 'latest' # on: @@ -32,7 +37,12 @@ jobs: # 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 + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it, uncomment below + # - name: Checkout code at specified version + # uses: actions/checkout@v2 + # with: + # ref: ${{ github.event.inputs.version }} + - name: checkout uses: actions/checkout@v3 @@ -91,14 +101,15 @@ jobs: # config-inline: | # [worker.oci] # max-parallelism = 1 - - - name: Build and push image + + - name: Build image id: docker_build uses: docker/build-push-action@v4 with: context: ./ file: ./Dockerfile - push: ${{ github.event_name != 'pull_request' }} + load: true # Load the image into the Docker daemon + push: false # Do not push the image at this stage platforms: linux/amd64 tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} @@ -107,11 +118,61 @@ jobs: 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: Test runtime + run: | + tags="${{ steps.meta.outputs.tags }}" + IFS=',' read -ra ADDR <<< "$tags" # Convert string to array using ',' as delimiter + tag=${ADDR[0]} # Get the first tag + + docker run --rm --network stack \ + -p 3000:3000 \ + -e DATABASE_URL=postgresql://${{ env.POSTGRES_USER }}:${{ env.POSTGRES_PASSWORD }}@database/${{ env.POSTGRES_DB }} \ + -e NEXTAUTH_SECRET=${{ env.NEXTAUTH_SECRET }} \ + -e CALENDSO_ENCRYPTION_KEY=${{ env.CALENDSO_ENCRYPTION_KEY }} \ + $tag & + + server_pid=$! + + + echo "Waiting for the server to start..." + sleep 120 + + echo ${{ env.NEXT_PUBLIC_WEBAPP_URL }}/auth/login + + for i in {1..60}; do + echo "Checking server health ($i/60)..." + response=$(curl -o /dev/null -s -w "%{http_code}" ${{ env.NEXT_PUBLIC_WEBAPP_URL }}/auth/login) + echo "HTTP Status Code: $response" + if [[ "$response" == "200" ]] || [[ "$response" == "307" ]]; then + echo "Server is healthy" + # Now, shutdown the server + kill $server_pid + exit 0 + fi + sleep 1 + done + + echo "Server health check failed" + kill $server_pid + exit 1 + env: + NEXTAUTH_SECRET: 'EI4qqDpcfdvf4A+0aQEEx8JjHxHSy4uWiZw/F32K+pA=' + CALENDSO_ENCRYPTION_KEY: '0zfLtY99wjeLnsM7qsa8xsT+Q0oSgnOL' + + - name: Push image + run: | + tags="${{ steps.meta.outputs.tags }}" + IFS=',' read -ra ADDR <<< "$tags" # Convert string to array using ',' as delimiter + tag=${ADDR[0]} # Get the first tag + + docker push $tag + + - name: Cleanup run: | docker compose down