Compare commits

..

10 Commits

Author SHA1 Message Date
Colin Griffin
04f97c34c8 add arm-specific build with -arm suffix 2023-07-03 10:21:00 -04:00
Colin Griffin
03569bcc72 test tmpfs for build 2023-06-11 17:07:27 -04:00
Colin Griffin
408c36a221 try tmpfs 2023-06-11 12:14:05 -04:00
Colin Griffin
1315026fb4 re-add qemu for testing amd64 2023-06-11 11:17:09 -04:00
Colin Griffin
f2cdcb69d3 add suffix for arm 2023-06-11 10:17:52 -04:00
Colin Griffin
1cadb680b9 allow push for testing 2023-06-10 10:42:34 -04:00
Colin Griffin
9ff79941ba remove platform designation from runner stage 2023-06-10 10:41:12 -04:00
Colin Griffin
9a04fe8697 update targetplatform to allow multi-arch 2023-06-10 09:59:10 -04:00
Colin Griffin
facc5178ce update platforms and disable push 2023-06-10 09:26:18 -04:00
Colin Griffin
0bbe3ed1a1 Update Dockerfile 2023-06-10 09:21:34 -04:00
9 changed files with 160 additions and 191 deletions

View File

@@ -32,9 +32,6 @@ POSTGRES_PASSWORD=magical_password
POSTGRES_DB=calendso
DATABASE_HOST=database:5432
DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB}
# Needed to run migrations while using a connection pooler like PgBouncer
# Use the same one as DATABASE_URL if you're not using a connection pooler
DATABASE_DIRECT_URL=${DATABASE_URL}
GOOGLE_API_CREDENTIALS={}
# Set this to '1' if you don't want Cal to collect anonymous usage

View File

@@ -1,60 +0,0 @@
name: "Create Release"
on: # yamllint disable-line rule:truthy
workflow_dispatch:
inputs:
RELEASE_TAG:
description: 'v{Major}.{Minor}.{Patch}'
jobs:
release:
name: "Release"
permissions:
contents: write
runs-on: "ubuntu-latest"
steps:
- name: Checkout source
uses: actions/checkout@v3
with:
token: ${{ secrets.ACTIONS_ACCESS_TOKEN }}
submodules: true
- name: Create branch and tag submodule
run: |
git config user.email "actions@github.com"
git config user.name "actions-user"
git submodule update --init --remote
git checkout -b 'release-${{ inputs.RELEASE_TAG }}'
(cd calcom && git fetch --tags origin && git checkout 'refs/tags/${{ inputs.RELEASE_TAG }}')
git add calcom
git commit -m "tag version Cal.com version ${{ inputs.RELEASE_TAG }}"
git push origin 'release-${{ inputs.RELEASE_TAG }}'
# note: instead of secrets.GITHUB_TOKEN here, we need to use a PAT
# so that the release creation triggers the image build workflow
- name: "Create release"
uses: "actions/github-script@v6"
with:
github-token: "${{ secrets.ACTIONS_ACCESS_TOKEN }}"
script: |
const isPreRelease = '${{ inputs.RELEASE_TAG }}'.includes('-rc');
try {
const response = await github.rest.repos.createRelease({
draft: false,
generate_release_notes: true,
body: 'For Cal.com release details, see: https://github.com/calcom/cal.com/releases/tag/${{ inputs.RELEASE_TAG }}',
name: '${{ inputs.RELEASE_TAG }}',
target_commitish: 'release-${{ inputs.RELEASE_TAG }}',
owner: context.repo.owner,
prerelease: isPreRelease,
repo: context.repo.repo,
tag_name: '${{ inputs.RELEASE_TAG }}',
});
core.exportVariable('RELEASE_ID', response.data.id);
core.exportVariable('RELEASE_UPLOAD_URL', response.data.upload_url);
} catch (error) {
core.setFailed(error.message);
}

View File

@@ -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 }}

View File

@@ -17,11 +17,6 @@ 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:
@@ -33,16 +28,11 @@ jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
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, uncomment below
# - name: Checkout code at specified version
# uses: actions/checkout@v2
# with:
# ref: ${{ github.event.inputs.version }}
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- name: checkout
uses: actions/checkout@v3
@@ -71,13 +61,12 @@ jobs:
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
# Add flavor latest only on full releases, not on pre-releases
flavor: |
latest=${{ !github.event.release.prerelease }}
- name: Copy env
run: |
@@ -87,8 +76,8 @@ jobs:
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: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Start database
run: |
@@ -97,6 +86,7 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
platforms: linux/amd64,linux/arm64
driver-opts: |
network=container:database
buildkitd-flags: |
@@ -105,15 +95,14 @@ jobs:
# [worker.oci]
# max-parallelism = 1
- name: Build image
- name: Build and push image
id: docker_build
uses: docker/build-push-action@v4
with:
context: ./
file: ./Dockerfile
load: true # Load the image into the Docker daemon
push: false # Do not push the image at this stage
platforms: linux/amd64
push: ${{ github.event_name != 'pull_request' }}
platforms: linux/amd64,linux/arm64
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
@@ -121,80 +110,10 @@ 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 }}
DATABASE_DIRECT_URL=postgresql://${{ env.POSTGRES_USER }}:${{ env.POSTGRES_PASSWORD }}@${{ env.DATABASE_HOST }}/${{ env.POSTGRES_DB }}
- 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 DATABASE_DIRECT_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
# for tag in "${ADDR[@]}"; do
# docker push $tag
# done
- name: Push image
id: docker_push
uses: docker/build-push-action@v4
with:
context: ./
file: ./Dockerfile
push: true
platforms: linux/amd64
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 }}
DATABASE_DIRECT_URL=postgresql://${{ env.POSTGRES_USER }}:${{ env.POSTGRES_PASSWORD }}@${{ env.DATABASE_HOST }}/${{ env.POSTGRES_DB }}
if: ${{ !github.event.release.prerelease }}
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
- name: Cleanup
run: |
docker compose down
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}

View File

@@ -13,7 +13,7 @@ jobs:
shell: bash
steps:
- name: checkout
uses: actions/checkout@v3
uses: actions/checkout@v2
- name: Git submodule update
run: |

View File

@@ -1,4 +1,4 @@
FROM node:18 as builder
FROM --platform=$BUILDPLATFORM node:18 as builder
WORKDIR /calcom
@@ -13,7 +13,6 @@ ENV NEXT_PUBLIC_WEBAPP_URL=http://NEXT_PUBLIC_WEBAPP_URL_PLACEHOLDER \
NEXT_PUBLIC_LICENSE_CONSENT=$NEXT_PUBLIC_LICENSE_CONSENT \
CALCOM_TELEMETRY_DISABLED=$CALCOM_TELEMETRY_DISABLED \
DATABASE_URL=$DATABASE_URL \
DATABASE_DIRECT_URL=$DATABASE_URL \
NEXTAUTH_SECRET=${NEXTAUTH_SECRET} \
CALENDSO_ENCRYPTION_KEY=${CALENDSO_ENCRYPTION_KEY} \
NODE_OPTIONS=--max-old-space-size=${MAX_OLD_SPACE_SIZE}
@@ -22,7 +21,6 @@ COPY calcom/package.json calcom/yarn.lock calcom/.yarnrc.yml calcom/playwright.c
COPY calcom/.yarn ./.yarn
COPY calcom/apps/web ./apps/web
COPY calcom/packages ./packages
COPY calcom/tests ./tests
RUN yarn config set httpTimeout 1200000 && \
npx turbo prune --scope=@calcom/web --docker && \
@@ -30,13 +28,14 @@ RUN yarn config set httpTimeout 1200000 && \
yarn db-deploy && \
yarn --cwd packages/prisma seed-app-store
RUN yarn turbo run build --filter=@calcom/web
RUN --mount=type=tmpfs,destination=/tmp \
yarn turbo run build --filter=@calcom/web
# RUN yarn plugin import workspace-tools && \
# yarn workspaces focus --all --production
RUN rm -rf node_modules/.cache .yarn/cache apps/web/.next/cache
FROM node:18 as builder-two
FROM --platform=$BUILDPLATFORM node:18 as builder-two
WORKDIR /calcom
ARG NEXT_PUBLIC_WEBAPP_URL=http://localhost:3000
@@ -57,10 +56,10 @@ ENV NEXT_PUBLIC_WEBAPP_URL=$NEXT_PUBLIC_WEBAPP_URL \
BUILT_NEXT_PUBLIC_WEBAPP_URL=$NEXT_PUBLIC_WEBAPP_URL
RUN scripts/replace-placeholder.sh http://NEXT_PUBLIC_WEBAPP_URL_PLACEHOLDER ${NEXT_PUBLIC_WEBAPP_URL}
ARG TARGETPLATFORM
ARG TARGETARCH
FROM node:18 as runner
WORKDIR /calcom
COPY --from=builder-two /calcom ./
ARG NEXT_PUBLIC_WEBAPP_URL=http://localhost:3000
@@ -69,8 +68,4 @@ ENV NEXT_PUBLIC_WEBAPP_URL=$NEXT_PUBLIC_WEBAPP_URL \
ENV NODE_ENV production
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=30s --retries=5 \
CMD wget --spider http://localhost:3000 || exit 1
CMD ["/calcom/scripts/start.sh"]

View File

@@ -206,8 +206,7 @@ These variables must also be provided at runtime
| NEXTAUTH_URL | Location of the auth server. By default, this is the Cal.com docker instance itself. | optional | `{NEXT_PUBLIC_WEBAPP_URL}/api/auth` |
| NEXTAUTH_SECRET | must match build variable | required | `secret` |
| CALENDSO_ENCRYPTION_KEY | must match build variable | required | `secret` |
| DATABASE_URL | database url with credentials - if using a connection pooler, this setting should point there | required | `postgresql://unicorn_user:magical_password@database:5432/calendso` |
| DATABASE_DIRECT_URL | direct database url with credentials if using a connection pooler (e.g. PgBouncer, Prisma Accelerate, etc.) | optional | |
| DATABASE_URL | database url with credentials | required | `postgresql://unicorn_user:magical_password@database:5432/calendso` |
### Build-time variables
@@ -220,8 +219,7 @@ Updating these variables is not required for evaluation, but is required for run
| NEXT_PUBLIC_WEBAPP_URL | Base URL injected into static files | optional | `http://localhost:3000` |
| NEXT_PUBLIC_LICENSE_CONSENT | license consent - true/false | | |
| CALCOM_TELEMETRY_DISABLED | Allow cal.com to collect anonymous usage data (set to `1` to disable) | | |
| DATABASE_URL | database url with credentials - if using a connection pooler, this setting should point there | required | `postgresql://unicorn_user:magical_password@database:5432/calendso` |
| DATABASE_DIRECT_URL | direct database url with credentials if using a connection pooler (e.g. PgBouncer, Prisma Accelerate, etc.) | optional | |
| DATABASE_URL | database url with credentials | required | `postgresql://unicorn_user:magical_password@database:5432/calendso` |
| NEXTAUTH_SECRET | Cookie encryption key | required | `secret` |
| CALENDSO_ENCRYPTION_KEY | Authentication encryption key | required | `secret` |

2
calcom

Submodule calcom updated: 75d5576e17...0d01d3246a

View File

@@ -32,7 +32,6 @@ services:
NEXTAUTH_SECRET: ${NEXTAUTH_SECRET}
CALENDSO_ENCRYPTION_KEY: ${CALENDSO_ENCRYPTION_KEY}
DATABASE_URL: ${DATABASE_URL}
DATABASE_DIRECT_URL: ${DATABASE_URL}
network: stack
restart: always
networks:
@@ -42,7 +41,6 @@ services:
env_file: .env
environment:
- DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB}
- DATABASE_DIRECT_URL=${DATABASE_URL}
depends_on:
- database
@@ -57,7 +55,6 @@ services:
env_file: .env
environment:
- DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB}
- DATABASE_DIRECT_URL=${DATABASE_URL}
depends_on:
- database
command: