first commit
This commit is contained in:
7
.github/dependabot.yml
vendored
Normal file
7
.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
version: 2
|
||||
updates:
|
||||
# Maintain dependencies for GitHub Actions
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
60
.github/workflows/create-release.yaml
vendored
Normal file
60
.github/workflows/create-release.yaml
vendored
Normal file
@ -0,0 +1,60 @@
|
||||
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);
|
||||
}
|
199
.github/workflows/docker-build-push-dockerhub.yml
vendored
Normal file
199
.github/workflows/docker-build-push-dockerhub.yml
vendored
Normal file
@ -0,0 +1,199 @@
|
||||
# This is a basic workflow to help you get started with Actions
|
||||
|
||||
name: Build and push 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:
|
||||
# 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:
|
||||
# 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: ubuntu-latest
|
||||
|
||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||
steps:
|
||||
- name: Free Disk Space (Ubuntu)
|
||||
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: checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Git submodule update
|
||||
run: |
|
||||
git submodule update --init
|
||||
|
||||
- name: Log in to the Docker Hub registry
|
||||
uses: docker/login-action@v3
|
||||
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@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
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: |
|
||||
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@v3
|
||||
with:
|
||||
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 image
|
||||
id: docker_build
|
||||
uses: docker/build-push-action@v5
|
||||
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
|
||||
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 }}
|
||||
|
||||
- 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
|
||||
id: docker_push
|
||||
uses: docker/build-push-action@v5
|
||||
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_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
|
||||
run: |
|
||||
docker compose down
|
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 }}
|
26
.github/workflows/update-submodules.yml
vendored
Normal file
26
.github/workflows/update-submodules.yml
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
name: Update Calendso
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 4 * * *"
|
||||
workflow_dispatch: ~
|
||||
|
||||
jobs:
|
||||
sync:
|
||||
name: 'Submodules Sync'
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Git submodule update
|
||||
run: |
|
||||
git submodule update --remote --init
|
||||
|
||||
- name: Commit
|
||||
run: |
|
||||
git config user.email "actions@github.com"
|
||||
git config user.name "actions-user"
|
||||
git commit -am "Auto updated submodule references" && git push || echo "No changes to commit"
|
Reference in New Issue
Block a user