Compare commits
1 Commits
main
...
version-2.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9847f30a9e |
@@ -13,7 +13,6 @@ LICENSE=
|
|||||||
# NEXT_PUBLIC_APP_URL=http://localhost:3000
|
# NEXT_PUBLIC_APP_URL=http://localhost:3000
|
||||||
|
|
||||||
NEXT_PUBLIC_WEBAPP_URL=http://localhost:3000
|
NEXT_PUBLIC_WEBAPP_URL=http://localhost:3000
|
||||||
NEXT_PUBLIC_API_V2_URL=http://localhost:5555/api/v2
|
|
||||||
|
|
||||||
# Configure NEXTAUTH_URL manually if needed, otherwise it will resolve to {NEXT_PUBLIC_WEBAPP_URL}/api/auth
|
# Configure NEXTAUTH_URL manually if needed, otherwise it will resolve to {NEXT_PUBLIC_WEBAPP_URL}/api/auth
|
||||||
# NEXTAUTH_URL=http://localhost:3000/api/auth
|
# NEXTAUTH_URL=http://localhost:3000/api/auth
|
||||||
@@ -33,9 +32,6 @@ POSTGRES_PASSWORD=magical_password
|
|||||||
POSTGRES_DB=calendso
|
POSTGRES_DB=calendso
|
||||||
DATABASE_HOST=database:5432
|
DATABASE_HOST=database:5432
|
||||||
DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB}
|
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={}
|
GOOGLE_API_CREDENTIALS={}
|
||||||
|
|
||||||
# Set this to '1' if you don't want Cal to collect anonymous usage
|
# Set this to '1' if you don't want Cal to collect anonymous usage
|
||||||
@@ -51,7 +47,6 @@ ZOOM_CLIENT_SECRET=
|
|||||||
|
|
||||||
# E-mail settings
|
# E-mail settings
|
||||||
# Configures the global From: header whilst sending emails.
|
# Configures the global From: header whilst sending emails.
|
||||||
EMAIL_FROM_NAME=YourOrganizationName
|
|
||||||
EMAIL_FROM=notifications@example.com
|
EMAIL_FROM=notifications@example.com
|
||||||
|
|
||||||
# Configure SMTP settings (@see https://nodemailer.com/smtp/).
|
# Configure SMTP settings (@see https://nodemailer.com/smtp/).
|
||||||
|
|||||||
7
.github/dependabot.yml
vendored
7
.github/dependabot.yml
vendored
@@ -1,7 +0,0 @@
|
|||||||
version: 2
|
|
||||||
updates:
|
|
||||||
# Maintain dependencies for GitHub Actions
|
|
||||||
- package-ecosystem: "github-actions"
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: "daily"
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
name: "Create Release Tag"
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
version:
|
|
||||||
description: 'The new release tag to create (e.g., v3.8.1)'
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
commit_sha:
|
|
||||||
description: 'The short commit SHA from the calcom submodule to use for this release'
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
release:
|
|
||||||
name: "Tag Release"
|
|
||||||
runs-on: "ubuntu-latest"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: "Checkout main branch to get starting point"
|
|
||||||
uses: "actions/checkout@v4"
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.TOKEN_GITEA }}
|
|
||||||
# We check out main, but will create the release commit off of it
|
|
||||||
# without modifying the branch itself.
|
|
||||||
ref: 'main'
|
|
||||||
submodules: true
|
|
||||||
|
|
||||||
- name: "Create Release Commit and Tag"
|
|
||||||
run: |
|
|
||||||
# Configure git user for the commit
|
|
||||||
git config user.email "actions@gitea.local"
|
|
||||||
git config user.name "Gitea Actions"
|
|
||||||
|
|
||||||
echo "Updating submodule to commit ${{ inputs.commit_sha }}..."
|
|
||||||
|
|
||||||
# Navigate into the submodule, fetch latest history, and check out the specific commit.
|
|
||||||
# This modifies the submodule's checked-out version in the working directory.
|
|
||||||
cd calcom
|
|
||||||
git fetch origin
|
|
||||||
git checkout ${{ inputs.commit_sha }}
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
# Stage the change to the submodule pointer.
|
|
||||||
git add calcom
|
|
||||||
|
|
||||||
# Create a NEW commit. This commit is NOT on the main branch.
|
|
||||||
# It's a "dangling" commit that only HEAD is pointing to at this moment.
|
|
||||||
# The parent of this new commit is the latest commit from 'main'.
|
|
||||||
git commit -m "release: Version ${{ inputs.version }} with calcom at ${{ inputs.commit_sha }}"
|
|
||||||
|
|
||||||
# Get the full SHA of the new commit we just created.
|
|
||||||
NEW_COMMIT_SHA=$(git rev-parse HEAD)
|
|
||||||
echo "Created new release commit: $NEW_COMMIT_SHA"
|
|
||||||
|
|
||||||
echo "Creating and pushing tag ${{ inputs.version }}..."
|
|
||||||
|
|
||||||
# Create an annotated tag pointing directly at our new, branchless commit.
|
|
||||||
git tag -a "${{ inputs.version }}" -m "Release ${{ inputs.version }}" $NEW_COMMIT_SHA
|
|
||||||
|
|
||||||
# Push ONLY the new tag to the repository. Git will automatically send
|
|
||||||
# the required commit object ($NEW_COMMIT_SHA) along with the tag.
|
|
||||||
git push origin "${{ inputs.version }}"
|
|
||||||
77
.github/workflows/create-release.yaml
vendored
77
.github/workflows/create-release.yaml
vendored
@@ -1,77 +0,0 @@
|
|||||||
name: "Create Gitea Release"
|
|
||||||
|
|
||||||
# This workflow is triggered manually from the Gitea Actions UI
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
RELEASE_TAG:
|
|
||||||
description: 'The release tag to create, formatted as v{Major}.{Minor}.{Patch}'
|
|
||||||
required: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
release:
|
|
||||||
name: "Release"
|
|
||||||
runs-on: "ubuntu-latest"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
# Step 1: Check out the repository source code and its submodules.
|
|
||||||
# The TOKEN_GITEA is used here to grant permission for the later 'git push'.
|
|
||||||
- name: Checkout source
|
|
||||||
uses: "actions/checkout@v4"
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.TOKEN_GITEA }}
|
|
||||||
submodules: true
|
|
||||||
|
|
||||||
# Step 2: Create a new release branch, update the submodule to the specified tag,
|
|
||||||
# and push the new branch to the Gitea repository.
|
|
||||||
- name: Create Branch and Update Submodule
|
|
||||||
run: |
|
|
||||||
# Configure git user for the commit
|
|
||||||
git config user.email "actions@gitea.local"
|
|
||||||
git config user.name "Gitea Actions"
|
|
||||||
|
|
||||||
# Create the new release branch
|
|
||||||
git checkout -b 'release-${{ inputs.RELEASE_TAG }}'
|
|
||||||
|
|
||||||
# Enter the submodule directory, fetch the latest tags, and check out the correct one.
|
|
||||||
# This points the submodule to the specific commit associated with the release tag.
|
|
||||||
(cd calcom && git fetch --tags origin && git checkout 'refs/tags/${{ inputs.RELEASE_TAG }}')
|
|
||||||
|
|
||||||
# Stage and commit the change to the submodule pointer
|
|
||||||
git add calcom
|
|
||||||
git commit -m "Update submodule to Cal.com version ${{ inputs.RELEASE_TAG }}"
|
|
||||||
|
|
||||||
# Push the newly created release branch to the remote Gitea repository
|
|
||||||
git push origin 'release-${{ inputs.RELEASE_TAG }}'
|
|
||||||
|
|
||||||
# Step 3: Call the Gitea API to create the official release object.
|
|
||||||
# This uses the same API token to authorize the action.
|
|
||||||
- name: "Create Gitea Release"
|
|
||||||
env:
|
|
||||||
GITEA_TOKEN: ${{ secrets.TOKEN_GITEA }}
|
|
||||||
GITEA_API_URL: https://git.nethery.dev/api/v1
|
|
||||||
OWNER: ${{ gitea.repository_owner }}
|
|
||||||
REPO: ${{ gitea.repository_name }}
|
|
||||||
run: |
|
|
||||||
# Determine if the tag indicates a pre-release
|
|
||||||
is_prerelease=false
|
|
||||||
if [[ "${{ inputs.RELEASE_TAG }}" == *"-rc"* || "${{ inputs.RELEASE_TAG }}" == *"-beta"* ]]; then
|
|
||||||
is_prerelease=true
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Creating release ${{ inputs.RELEASE_TAG }}..."
|
|
||||||
echo "Is prerelease: $is_prerelease"
|
|
||||||
|
|
||||||
# Use curl to send a POST request to the Gitea API's 'create release' endpoint
|
|
||||||
curl --fail --silent --show-error -L -X POST \
|
|
||||||
-H "accept: application/json" \
|
|
||||||
-H "Authorization: token ${GITEA_TOKEN}" \
|
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
"${GITEA_API_URL}/repos/${OWNER}/${REPO}/releases" \
|
|
||||||
-d '{
|
|
||||||
"tag_name": "${{ inputs.RELEASE_TAG }}",
|
|
||||||
"target_commitish": "release-${{ inputs.RELEASE_TAG }}",
|
|
||||||
"name": "${{ inputs.RELEASE_TAG }}",
|
|
||||||
"body": "For Cal.com release details, see: https://github.com/calcom/cal.com/releases/tag/${{ inputs.RELEASE_TAG }}",
|
|
||||||
"prerelease": '${is_prerelease}'
|
|
||||||
}'
|
|
||||||
136
.github/workflows/docker-build-push-dockerhub.yml
vendored
136
.github/workflows/docker-build-push-dockerhub.yml
vendored
@@ -17,17 +17,15 @@ on:
|
|||||||
- completed
|
- completed
|
||||||
# Allow running workflow manually from the Actions tab
|
# Allow running workflow manually from the Actions tab
|
||||||
workflow_dispatch:
|
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'
|
# Leaving in example for releases. Initially we simply push to 'latest'
|
||||||
# on:
|
# on:
|
||||||
# release:
|
# release:
|
||||||
# types: [ created ]
|
# types: [ created ]
|
||||||
|
|
||||||
|
# # Allows you to run this workflow manually from the Actions tab
|
||||||
|
# workflow_dispatch:
|
||||||
|
|
||||||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||||
jobs:
|
jobs:
|
||||||
# This workflow contains a single job called "build"
|
# This workflow contains a single job called "build"
|
||||||
@@ -37,52 +35,39 @@ jobs:
|
|||||||
|
|
||||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||||
steps:
|
steps:
|
||||||
- name: Free Disk Space (Ubuntu)
|
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||||
uses: jlumbroso/free-disk-space@main
|
|
||||||
with:
|
|
||||||
# Free about 4.5 GB, elminating our disk space issues
|
|
||||||
tool-cache: true
|
|
||||||
|
|
||||||
# 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: Base requirements
|
|
||||||
run: |
|
|
||||||
# packages
|
|
||||||
apk update && apk add --no-cache git docker docker-compose nodejs gpg openssh npm ansible
|
|
||||||
|
|
||||||
- name: checkout
|
- name: checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Git submodule update
|
- name: Git submodule update
|
||||||
run: |
|
run: |
|
||||||
git submodule update --init
|
git submodule update --init
|
||||||
|
|
||||||
- name: Log in to the Docker Hub registry
|
- name: Log in to the Docker Hub registry
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v1.10.0
|
||||||
with:
|
with:
|
||||||
|
# Username used to log against the Docker registry
|
||||||
username: ${{ secrets.DOCKER_HUB_USERNAME }}
|
username: ${{ secrets.DOCKER_HUB_USERNAME }}
|
||||||
|
# Password or personal access token used to log against the Docker registry
|
||||||
password: ${{ secrets.DOCKER_HUB_TOKEN }}
|
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
|
- name: Log in to the Github Container registry
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v1.10.0
|
||||||
with:
|
with:
|
||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
username: nnethery
|
username: ${{ github.actor }}
|
||||||
password: ${{ secrets.GHCR_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Docker meta
|
- name: Docker meta
|
||||||
id: meta
|
id: meta
|
||||||
uses: docker/metadata-action@v5
|
uses: docker/metadata-action@v4
|
||||||
with:
|
with:
|
||||||
images: |
|
images: |
|
||||||
ghcr.io/nnethery/cal.com
|
docker.io/calendso/calendso
|
||||||
nnethery/cal.com
|
docker.io/calcom/cal.com
|
||||||
flavor: |
|
ghcr.io/calcom/cal.com
|
||||||
latest=${{ !github.event.release.prerelease }}
|
|
||||||
|
|
||||||
- name: Copy env
|
- name: Copy env
|
||||||
run: |
|
run: |
|
||||||
@@ -92,107 +77,44 @@ jobs:
|
|||||||
eval $(sed -e '/^#/d' -e 's/^/export /' -e 's/$/;/' .env) ;
|
eval $(sed -e '/^#/d' -e 's/^/export /' -e 's/$/;/' .env) ;
|
||||||
|
|
||||||
# Temporarily disable ARM build due to runner performance issues
|
# Temporarily disable ARM build due to runner performance issues
|
||||||
|
# - name: Set up QEMU
|
||||||
|
# uses: docker/setup-qemu-action@v2
|
||||||
|
|
||||||
- name: Start database
|
- name: Start database
|
||||||
run: |
|
run: |
|
||||||
docker compose up -d database
|
docker compose up -d database
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v2
|
||||||
with:
|
with:
|
||||||
driver-opts: |
|
driver-opts: |
|
||||||
network=container:database
|
network=container:database
|
||||||
buildkitd-flags: |
|
buildkitd-flags: |
|
||||||
--allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host
|
--allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host
|
||||||
# config-inline: |
|
|
||||||
# [worker.oci]
|
|
||||||
# max-parallelism = 1
|
|
||||||
|
|
||||||
- name: Build image
|
- name: Build and push image
|
||||||
id: docker_build
|
id: docker_build
|
||||||
uses: docker/build-push-action@v5
|
uses: docker/build-push-action@v3
|
||||||
with:
|
with:
|
||||||
context: ./
|
context: ./
|
||||||
file: ./Dockerfile
|
file: ./Dockerfile
|
||||||
load: true # Load the image into the Docker daemon
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
push: false # Do not push the image at this stage
|
platforms: linux/amd64
|
||||||
platforms: linux/arm64 # Changed from linux/amd64
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
build-args: |
|
build-args: |
|
||||||
NEXT_PUBLIC_WEBAPP_URL=${{ env.NEXT_PUBLIC_WEBAPP_URL }}
|
NEXT_PUBLIC_WEBAPP_URL=${{ env.NEXT_PUBLIC_WEBAPP_URL }}
|
||||||
NEXT_PUBLIC_API_V2_URL=${{ env.NEXT_PUBLIC_API_V2_URL }}
|
|
||||||
NEXT_PUBLIC_LICENSE_CONSENT=${{ env.NEXT_PUBLIC_LICENSE_CONSENT }}
|
NEXT_PUBLIC_LICENSE_CONSENT=${{ env.NEXT_PUBLIC_LICENSE_CONSENT }}
|
||||||
NEXT_PUBLIC_TELEMETRY_KEY=${{ env.NEXT_PUBLIC_TELEMETRY_KEY }}
|
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_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
|
# - name: Build with docker compose
|
||||||
# run: |
|
# run: |
|
||||||
# tags="${{ steps.meta.outputs.tags }}"
|
# DOCKER_BUILDKIT=0 docker compose build --build-arg DATABASE_URL=postgresql://${{ env.POSTGRES_USER }}:${{ env.POSTGRES_PASSWORD }}@${{ env.DATABASE_HOST }}/${{ env.POSTGRES_DB }} calcom
|
||||||
# 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
|
|
||||||
|
|
||||||
# apk add curl
|
|
||||||
|
|
||||||
# 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
|
|
||||||
id: docker_push
|
|
||||||
uses: docker/build-push-action@v5
|
|
||||||
with:
|
|
||||||
context: ./
|
|
||||||
file: ./Dockerfile
|
|
||||||
push: true
|
|
||||||
platforms: linux/arm64 # Changed from 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_API_V2_URL=${{ env.NEXT_PUBLIC_API_V2_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
|
- name: Cleanup
|
||||||
run: |
|
run: |
|
||||||
docker compose down
|
docker compose down
|
||||||
|
|
||||||
|
- name: Image digest
|
||||||
|
run: echo ${{ steps.docker_build.outputs.digest }}
|
||||||
|
|||||||
14
.github/workflows/scarf-data-export.yml
vendored
Normal file
14
.github/workflows/scarf-data-export.yml
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
name: Export Scarf data
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 0 * * *'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
export-scarf-data:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: docker://scarf.docker.scarf.sh/scarf-sh/scarf-postgres-exporter:latest
|
||||||
|
env:
|
||||||
|
SCARF_API_TOKEN: ${{ secrets.SCARF_API_TOKEN }}
|
||||||
|
SCARF_ENTITY_NAME: Calcom
|
||||||
|
PSQL_CONN_STRING: ${{ secrets.PSQL_CONN_STRING }}
|
||||||
2
.github/workflows/update-submodules.yml
vendored
2
.github/workflows/update-submodules.yml
vendored
@@ -13,7 +13,7 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
steps:
|
steps:
|
||||||
- name: checkout
|
- name: checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Git submodule update
|
- name: Git submodule update
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
62
Dockerfile
62
Dockerfile
@@ -1,61 +1,45 @@
|
|||||||
FROM node:18 AS builder
|
FROM node:16 as builder
|
||||||
|
|
||||||
WORKDIR /calcom
|
WORKDIR /calcom
|
||||||
|
|
||||||
ARG NEXT_PUBLIC_LICENSE_CONSENT
|
ARG NEXT_PUBLIC_LICENSE_CONSENT
|
||||||
ARG NEXT_PUBLIC_WEBSITE_TERMS_URL
|
|
||||||
ARG NEXT_PUBLIC_WEBSITE_PRIVACY_POLICY_URL
|
|
||||||
ARG CALCOM_TELEMETRY_DISABLED
|
ARG CALCOM_TELEMETRY_DISABLED
|
||||||
ARG DATABASE_URL
|
ARG DATABASE_URL
|
||||||
ARG NEXTAUTH_SECRET=secret
|
ARG NEXTAUTH_SECRET=secret
|
||||||
ARG CALENDSO_ENCRYPTION_KEY=secret
|
ARG CALENDSO_ENCRYPTION_KEY=secret
|
||||||
ARG MAX_OLD_SPACE_SIZE=4096
|
ARG MAX_OLD_SPACE_SIZE=4096
|
||||||
ARG NEXT_PUBLIC_API_V2_URL
|
|
||||||
|
|
||||||
ENV NEXT_PUBLIC_WEBAPP_URL=http://NEXT_PUBLIC_WEBAPP_URL_PLACEHOLDER \
|
ENV NEXT_PUBLIC_WEBAPP_URL=http://NEXT_PUBLIC_WEBAPP_URL_PLACEHOLDER \
|
||||||
NEXT_PUBLIC_API_V2_URL=$NEXT_PUBLIC_API_V2_URL \
|
|
||||||
NEXT_PUBLIC_LICENSE_CONSENT=$NEXT_PUBLIC_LICENSE_CONSENT \
|
NEXT_PUBLIC_LICENSE_CONSENT=$NEXT_PUBLIC_LICENSE_CONSENT \
|
||||||
NEXT_PUBLIC_WEBSITE_TERMS_URL=$NEXT_PUBLIC_WEBSITE_TERMS_URL \
|
|
||||||
NEXT_PUBLIC_WEBSITE_PRIVACY_POLICY_URL=$NEXT_PUBLIC_WEBSITE_PRIVACY_POLICY_URL \
|
|
||||||
CALCOM_TELEMETRY_DISABLED=$CALCOM_TELEMETRY_DISABLED \
|
CALCOM_TELEMETRY_DISABLED=$CALCOM_TELEMETRY_DISABLED \
|
||||||
DATABASE_URL=$DATABASE_URL \
|
DATABASE_URL=$DATABASE_URL \
|
||||||
DATABASE_DIRECT_URL=$DATABASE_URL \
|
|
||||||
NEXTAUTH_SECRET=${NEXTAUTH_SECRET} \
|
NEXTAUTH_SECRET=${NEXTAUTH_SECRET} \
|
||||||
CALENDSO_ENCRYPTION_KEY=${CALENDSO_ENCRYPTION_KEY} \
|
CALENDSO_ENCRYPTION_KEY=${CALENDSO_ENCRYPTION_KEY} \
|
||||||
NODE_OPTIONS=--max-old-space-size=${MAX_OLD_SPACE_SIZE} \
|
NODE_OPTIONS=--max-old-space-size=${MAX_OLD_SPACE_SIZE}
|
||||||
BUILD_STANDALONE=true
|
|
||||||
|
|
||||||
COPY calcom/package.json calcom/yarn.lock calcom/.yarnrc.yml calcom/playwright.config.ts calcom/turbo.json calcom/i18n.json ./
|
COPY calcom/package.json calcom/yarn.lock calcom/turbo.json calcom/git-init.sh calcom/git-setup.sh ./
|
||||||
COPY calcom/.yarn ./.yarn
|
|
||||||
COPY calcom/apps/web ./apps/web
|
COPY calcom/apps/web ./apps/web
|
||||||
COPY calcom/apps/api/v2 ./apps/api/v2
|
|
||||||
COPY calcom/packages ./packages
|
COPY calcom/packages ./packages
|
||||||
COPY calcom/tests ./tests
|
|
||||||
|
|
||||||
RUN yarn config set httpTimeout 1200000
|
RUN yarn global add turbo && \
|
||||||
RUN npx turbo prune --scope=@calcom/web --scope=@calcom/trpc --docker
|
yarn config set network-timeout 1000000000 -g && \
|
||||||
RUN yarn install
|
turbo prune --scope=@calcom/web --docker && \
|
||||||
RUN yarn db-deploy
|
yarn install
|
||||||
RUN yarn --cwd packages/prisma seed-app-store
|
|
||||||
# Build and make embed servable from web/public/embed folder
|
|
||||||
RUN yarn workspace @calcom/trpc run build
|
|
||||||
RUN yarn --cwd packages/embeds/embed-core workspace @calcom/embed-core run build
|
|
||||||
RUN yarn --cwd apps/web workspace @calcom/web run build
|
|
||||||
|
|
||||||
# RUN yarn plugin import workspace-tools && \
|
RUN yarn turbo run build --filter=@calcom/web
|
||||||
# yarn workspaces focus --all --production
|
|
||||||
RUN rm -rf node_modules/.cache .yarn/cache apps/web/.next/cache
|
|
||||||
|
|
||||||
FROM node:18 AS builder-two
|
FROM node:16 as runner
|
||||||
|
|
||||||
WORKDIR /calcom
|
WORKDIR /calcom
|
||||||
ARG NEXT_PUBLIC_WEBAPP_URL=http://localhost:3000
|
ARG NEXT_PUBLIC_WEBAPP_URL=http://localhost:3000
|
||||||
|
|
||||||
ENV NODE_ENV=production
|
ENV NODE_ENV production
|
||||||
|
|
||||||
COPY calcom/package.json calcom/.yarnrc.yml calcom/turbo.json calcom/i18n.json ./
|
RUN apt-get update && \
|
||||||
COPY calcom/.yarn ./.yarn
|
apt-get -y install netcat && \
|
||||||
COPY --from=builder /calcom/yarn.lock ./yarn.lock
|
rm -rf /var/lib/apt/lists/* && \
|
||||||
|
npm install --global prisma
|
||||||
|
|
||||||
|
COPY calcom/package.json calcom/yarn.lock calcom/turbo.json ./
|
||||||
COPY --from=builder /calcom/node_modules ./node_modules
|
COPY --from=builder /calcom/node_modules ./node_modules
|
||||||
COPY --from=builder /calcom/packages ./packages
|
COPY --from=builder /calcom/packages ./packages
|
||||||
COPY --from=builder /calcom/apps/web ./apps/web
|
COPY --from=builder /calcom/apps/web ./apps/web
|
||||||
@@ -69,19 +53,5 @@ ENV NEXT_PUBLIC_WEBAPP_URL=$NEXT_PUBLIC_WEBAPP_URL \
|
|||||||
|
|
||||||
RUN scripts/replace-placeholder.sh http://NEXT_PUBLIC_WEBAPP_URL_PLACEHOLDER ${NEXT_PUBLIC_WEBAPP_URL}
|
RUN scripts/replace-placeholder.sh http://NEXT_PUBLIC_WEBAPP_URL_PLACEHOLDER ${NEXT_PUBLIC_WEBAPP_URL}
|
||||||
|
|
||||||
FROM node:18 AS runner
|
|
||||||
|
|
||||||
|
|
||||||
WORKDIR /calcom
|
|
||||||
COPY --from=builder-two /calcom ./
|
|
||||||
ARG NEXT_PUBLIC_WEBAPP_URL=http://localhost:3000
|
|
||||||
ENV NEXT_PUBLIC_WEBAPP_URL=$NEXT_PUBLIC_WEBAPP_URL \
|
|
||||||
BUILT_NEXT_PUBLIC_WEBAPP_URL=$NEXT_PUBLIC_WEBAPP_URL
|
|
||||||
|
|
||||||
ENV NODE_ENV=production
|
|
||||||
EXPOSE 3000
|
EXPOSE 3000
|
||||||
|
|
||||||
HEALTHCHECK --interval=30s --timeout=30s --retries=5 \
|
|
||||||
CMD wget --spider http://localhost:3000 || exit 1
|
|
||||||
|
|
||||||
CMD ["/calcom/scripts/start.sh"]
|
CMD ["/calcom/scripts/start.sh"]
|
||||||
|
|||||||
12
README.md
12
README.md
@@ -27,6 +27,8 @@
|
|||||||
|
|
||||||
# Docker
|
# Docker
|
||||||
|
|
||||||
|
NOTE: DockerHub organization has not yet been renamed.
|
||||||
|
|
||||||
This image can be found on DockerHub at [https://hub.docker.com/r/calcom/cal.com](https://hub.docker.com/r/calcom/cal.com)
|
This image can be found on DockerHub at [https://hub.docker.com/r/calcom/cal.com](https://hub.docker.com/r/calcom/cal.com)
|
||||||
|
|
||||||
The Docker configuration for Cal.com is an effort powered by people within the community. Cal.com, Inc. does not yet provide official support for Docker, but we will accept fixes and documentation at this time. Use at your own risk.
|
The Docker configuration for Cal.com is an effort powered by people within the community. Cal.com, Inc. does not yet provide official support for Docker, but we will accept fixes and documentation at this time. Use at your own risk.
|
||||||
@@ -52,7 +54,7 @@ If you are evaluating Cal.com or running with minimal to no modifications, this
|
|||||||
1. Clone calcom/docker
|
1. Clone calcom/docker
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone --recursive https://github.com/calcom/docker.git
|
git clone https://github.com/calcom/docker.git
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Change into the directory
|
2. Change into the directory
|
||||||
@@ -206,8 +208,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_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` |
|
| NEXTAUTH_SECRET | must match build variable | required | `secret` |
|
||||||
| CALENDSO_ENCRYPTION_KEY | 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_URL | database url with credentials | 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 | |
|
|
||||||
|
|
||||||
### Build-time variables
|
### Build-time variables
|
||||||
|
|
||||||
@@ -219,11 +220,8 @@ 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_WEBAPP_URL | Base URL injected into static files | optional | `http://localhost:3000` |
|
||||||
| NEXT_PUBLIC_LICENSE_CONSENT | license consent - true/false | | |
|
| NEXT_PUBLIC_LICENSE_CONSENT | license consent - true/false | | |
|
||||||
| NEXT_PUBLIC_WEBSITE_TERMS_URL | custom URL for terms and conditions website | optional | `https://cal.com/terms` |
|
|
||||||
| NEXT_PUBLIC_WEBSITE_PRIVACY_POLICY_URL | custom URL for privacy policy website | optional | `https://cal.com/privacy` |
|
|
||||||
| CALCOM_TELEMETRY_DISABLED | Allow cal.com to collect anonymous usage data (set to `1` to disable) | | |
|
| 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_URL | database url with credentials | 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 | |
|
|
||||||
| NEXTAUTH_SECRET | Cookie encryption key | required | `secret` |
|
| NEXTAUTH_SECRET | Cookie encryption key | required | `secret` |
|
||||||
| CALENDSO_ENCRYPTION_KEY | Authentication encryption key | required | `secret` |
|
| CALENDSO_ENCRYPTION_KEY | Authentication encryption key | required | `secret` |
|
||||||
|
|
||||||
|
|||||||
2
calcom
2
calcom
Submodule calcom updated: 68b93385eb...865663646a
@@ -1,4 +1,5 @@
|
|||||||
# Use postgres/example user/password credentials
|
# Use postgres/example user/password credentials
|
||||||
|
version: '3.8'
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
database-data:
|
database-data:
|
||||||
@@ -26,15 +27,11 @@ services:
|
|||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
args:
|
args:
|
||||||
NEXT_PUBLIC_WEBAPP_URL: ${NEXT_PUBLIC_WEBAPP_URL}
|
NEXT_PUBLIC_WEBAPP_URL: ${NEXT_PUBLIC_WEBAPP_URL}
|
||||||
NEXT_PUBLIC_API_V2_URL: ${NEXT_PUBLIC_API_V2_URL}
|
|
||||||
NEXT_PUBLIC_LICENSE_CONSENT: ${NEXT_PUBLIC_LICENSE_CONSENT}
|
NEXT_PUBLIC_LICENSE_CONSENT: ${NEXT_PUBLIC_LICENSE_CONSENT}
|
||||||
NEXT_PUBLIC_WEBSITE_TERMS_URL: ${EXT_PUBLIC_WEBSITE_TERMS_URL}
|
|
||||||
NEXT_PUBLIC_WEBSITE_PRIVACY_POLICY_URL: ${NEXT_PUBLIC_WEBSITE_PRIVACY_POLICY_URL}
|
|
||||||
CALCOM_TELEMETRY_DISABLED: ${CALCOM_TELEMETRY_DISABLED}
|
CALCOM_TELEMETRY_DISABLED: ${CALCOM_TELEMETRY_DISABLED}
|
||||||
NEXTAUTH_SECRET: ${NEXTAUTH_SECRET}
|
NEXTAUTH_SECRET: ${NEXTAUTH_SECRET}
|
||||||
CALENDSO_ENCRYPTION_KEY: ${CALENDSO_ENCRYPTION_KEY}
|
CALENDSO_ENCRYPTION_KEY: ${CALENDSO_ENCRYPTION_KEY}
|
||||||
DATABASE_URL: ${DATABASE_URL}
|
DATABASE_URL: ${DATABASE_URL}
|
||||||
DATABASE_DIRECT_URL: ${DATABASE_URL}
|
|
||||||
network: stack
|
network: stack
|
||||||
restart: always
|
restart: always
|
||||||
networks:
|
networks:
|
||||||
@@ -44,7 +41,6 @@ services:
|
|||||||
env_file: .env
|
env_file: .env
|
||||||
environment:
|
environment:
|
||||||
- DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB}
|
- DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB}
|
||||||
- DATABASE_DIRECT_URL=${DATABASE_URL}
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- database
|
- database
|
||||||
|
|
||||||
@@ -59,7 +55,6 @@ services:
|
|||||||
env_file: .env
|
env_file: .env
|
||||||
environment:
|
environment:
|
||||||
- DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB}
|
- DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB}
|
||||||
- DATABASE_DIRECT_URL=${DATABASE_URL}
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- database
|
- database
|
||||||
command:
|
command:
|
||||||
|
|||||||
@@ -23,4 +23,4 @@ services:
|
|||||||
|
|
||||||
databases:
|
databases:
|
||||||
- name: cal-postgres
|
- name: cal-postgres
|
||||||
plan: basic-1gb
|
plan: starter
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ fi
|
|||||||
# Only peform action if $FROM and $TO are different.
|
# Only peform action if $FROM and $TO are different.
|
||||||
echo "Replacing all statically built instances of $FROM with $TO."
|
echo "Replacing all statically built instances of $FROM with $TO."
|
||||||
|
|
||||||
for file in $(egrep -r -l "${FROM}" apps/web/.next/ apps/web/public/); do
|
find apps/web/.next/ apps/web/public -type f |
|
||||||
sed -i -e "s|$FROM|$TO|g" "$file"
|
while read file; do
|
||||||
|
sed -i "s|$FROM|$TO|g" "$file"
|
||||||
done
|
done
|
||||||
|
|||||||
Reference in New Issue
Block a user