Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .env.docker-dev.example
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
# See: https://docs.docker.com/compose/how-tos/profiles/
COMPOSE_PROFILES=optional

SECRET_KEY=baserow
SECRET_KEY=baserow # CHANGE THIS IN PRODUCTION!
DATABASE_PASSWORD=baserow
REDIS_PASSWORD=baserow

Expand Down
12 changes: 3 additions & 9 deletions .env.local.example → .env.local-dev.example
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,14 @@ DJANGO_SETTINGS_MODULE=baserow.config.settings.dev
# DJANGO_SETTINGS_MODULE=baserow.config.settings.test

# =============================================================================
# Security (use simple values for local dev only!)
# Security (use same values as in env.docker-dev for local dev only!)
# =============================================================================
SECRET_KEY=baserow
BASEROW_JWT_SIGNING_KEY=baserow
SECRET_KEY=baserow # CHANGE THIS IN PRODUCTION!

# =============================================================================
# Database (local PostgreSQL)
# =============================================================================
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_NAME=baserow
DATABASE_USER=baserow
DATABASE_PASSWORD=baserow
# speed up operations and tests (must be single line, quoted for bash sourcing)
POSTGRES_DEV_EXTRA_ARGS="-c shared_buffers=512MB -c fsync=off -c full_page_writes=off -c synchronous_commit=off -c max_locks_per_transaction=512 -c logging_collector=off -c log_statement=none -c log_duration=off -c log_min_duration_statement=-1 -c log_checkpoints=off -c log_connections=off -c log_disconnections=off -c log_lock_waits=off -c log_temp_files=-1 -c checkpoint_timeout=1h -c max_wal_size=10GB -c min_wal_size=1GB -c wal_level=minimal -c max_wal_senders=0 -c autovacuum=off -c random_page_cost=1.0 -c effective_io_concurrency=200 -c work_mem=256MB -c maintenance_work_mem=512MB"

Expand All @@ -35,7 +30,6 @@ POSTGRES_DEV_EXTRA_ARGS="-c shared_buffers=512MB -c fsync=off -c full_page_write
# Redis (local Redis)
# =============================================================================
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=baserow

# =============================================================================
Expand Down Expand Up @@ -71,4 +65,4 @@ MIGRATE_ON_STARTUP=false
# Media files (path relative to the backend folder)
# =============================================================================
MEDIA_ROOT=media
MEDIA_URL=http://localhost:8000/media/
MEDIA_URL=http://localhost:4000/media/
121 changes: 121 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1195,6 +1195,127 @@ jobs:
echo "Publishing $SOURCE → $TARGET"
docker buildx imagetools create -t $TARGET $SOURCE

# ==========================================================================
# CI STATUS - Single required check for branch protection
# ==========================================================================
# This job aggregates the results of all CI jobs and provides a single
# status check for branch protection rules.
#
# To configure optional checks:
# 1. Go to Settings → Secrets and variables → Actions → Variables
# 2. Create a repository variable named OPTIONAL_CHECKS
# 3. Set its value to a comma-separated list of job names that should be optional
# Example: "test-e2e,test-zapier,helm-chart-lint"
#
# Jobs listed in OPTIONAL_CHECKS can fail without blocking the PR.
# Jobs NOT listed are required and must pass (or be skipped due to path filtering).
# ==========================================================================

ci-status:
name: CI Status
runs-on: ubuntu-latest
if: always()
needs:
# Lint jobs (can be skipped based on path changes)
- backend-lint
- frontend-lint
- dockerfile-lint
- helm-chart-lint
# Test jobs (can be skipped based on path changes)
- backend-check-startup
- test-backend
- test-frontend
- test-zapier
- check-mjml-compiled
# E2E tests (can be skipped based on path changes)
- test-e2e
- collect-e2e-reports
# Coverage (depends on test-backend)
- collect-coverage
steps:
- name: Evaluate CI results
env:
OPTIONAL_CHECKS: ${{ vars.OPTIONAL_CHECKS || '' }}
RESULTS: |
backend-lint=${{ needs.backend-lint.result }}
frontend-lint=${{ needs.frontend-lint.result }}
dockerfile-lint=${{ needs.dockerfile-lint.result }}
helm-chart-lint=${{ needs.helm-chart-lint.result }}
backend-check-startup=${{ needs.backend-check-startup.result }}
test-backend=${{ needs.test-backend.result }}
test-frontend=${{ needs.test-frontend.result }}
test-zapier=${{ needs.test-zapier.result }}
check-mjml-compiled=${{ needs.check-mjml-compiled.result }}
test-e2e=${{ needs.test-e2e.result }}
collect-e2e-reports=${{ needs.collect-e2e-reports.result }}
collect-coverage=${{ needs.collect-coverage.result }}
run: |
echo "=================================="
echo "CI Status Check"
echo "=================================="
echo ""
echo "Optional checks (from OPTIONAL_CHECKS variable):"
echo " ${OPTIONAL_CHECKS:-"(none configured)"}"
echo ""
echo "Job results:"
echo "$RESULTS" | grep -v '^$'
echo ""
echo "=================================="

# Convert OPTIONAL_CHECKS to an array for easier lookup
IFS=',' read -ra OPTIONAL_ARRAY <<< "$OPTIONAL_CHECKS"

is_optional() {
local job_name="$1"
for optional in "${OPTIONAL_ARRAY[@]}"; do
# Trim whitespace
optional=$(echo "$optional" | xargs)
if [[ "$job_name" == "$optional" ]]; then
return 0
fi
done
return 1
}

has_failure=false

while IFS='=' read -r job_name result; do
# Skip empty lines
[[ -z "$job_name" ]] && continue

# Trim whitespace
job_name=$(echo "$job_name" | xargs)
result=$(echo "$result" | xargs)

if is_optional "$job_name"; then
if [[ "$result" == "failure" || "$result" == "cancelled" ]]; then
echo "⚠️ $job_name: $result (optional - ignored)"
else
echo "✅ $job_name: $result (optional)"
fi
else
if [[ "$result" == "failure" || "$result" == "cancelled" ]]; then
echo "❌ $job_name: $result (required)"
has_failure=true
elif [[ "$result" == "skipped" ]]; then
echo "⏭️ $job_name: $result (skipped due to path filter)"
else
echo "✅ $job_name: $result"
fi
fi
done <<< "$RESULTS"

echo ""
echo "=================================="

if [[ "$has_failure" == "true" ]]; then
echo "❌ CI failed: one or more required checks failed"
exit 1
else
echo "✅ CI passed: all required checks passed (or were skipped)"
exit 0
fi

trigger-saas-build:
name: Trigger SaaS GitLab Pipeline
runs-on: ubuntu-latest
Expand Down
2 changes: 2 additions & 0 deletions backend/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,7 @@ RUN mkdir -p /baserow/backend/reports /baserow/premium/backend /baserow/enterpri

# Copy the virtual environment and source code with tests
COPY --chown=$UID:$GID --from=builder-ci /baserow /baserow
COPY --chown=$UID:$GID ./docs /baserow/docs/
COPY --chown=$UID:$GID deploy/plugins/*.sh /baserow/plugins/

USER $UID:$GID
Expand Down Expand Up @@ -355,6 +356,7 @@ COPY --chown=$UID:$GID LICENSE /baserow/LICENSE
COPY --chown=$UID:$GID --from=builder-prod /baserow/backend /baserow/backend/
COPY --chown=$UID:$GID --from=builder-prod /baserow/premium /baserow/premium/
COPY --chown=$UID:$GID --from=builder-prod /baserow/enterprise /baserow/enterprise/
COPY --chown=$UID:$GID ./docs /baserow/docs/

COPY --chown=$UID:$GID deploy/plugins/*.sh /baserow/plugins/

Expand Down
8 changes: 4 additions & 4 deletions backend/justfile
Original file line number Diff line number Diff line change
Expand Up @@ -120,13 +120,13 @@ init: _setup-env _create-venv
@echo " just run <command>"
@echo " uv run <command>"

# Copy .env.local.example to .env.local if it doesn't exist (in project root)
# Copy .env.local-dev.example to .env.local if it doesn't exist (in project root)
_setup-env:
#!/usr/bin/env bash
set -euo pipefail
if [ ! -f ../.env.local ] && [ -f ../.env.local.example ]; then
echo "Creating .env.local from .env.local.example..."
cp ../.env.local.example ../.env.local
if [ ! -f ../.env.local ] && [ -f ../.env.local-dev.example ]; then
echo "Creating .env.local from .env.local-dev.example..."
cp ../.env.local-dev.example ../.env.local
echo "Please review and edit .env.local as needed."
fi

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"type": "bug",
"message": "Improve docs search accuracy for the AI Assistant",
"issue_origin": "github",
"issue_number": null,
"domain": "core",
"bullet_points": [],
"created_at": "2026-01-14"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"type": "bug",
"message": "Fix Create row modal inside linked row field fails if the primary field is of type formula array",
"issue_origin": "github",
"issue_number": 4547,
"domain": "database",
"bullet_points": [],
"created_at": "2026-01-15"
}
2 changes: 1 addition & 1 deletion docs/development/running-the-dev-env-locally.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ All processes log to `/tmp/`:

### The .env.local File

The `just init` command creates `.env.local` in the project root with sensible defaults, taken from `.env.local.example`:
The `just init` command creates `.env.local` in the project root with sensible defaults, taken from `.env.local-dev.example`:

```bash
# Key settings in .env.local
Expand Down
Loading
Loading