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
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ existing tools and performs at any scale.
[![Deploy to Heroku](https://www.herokucdn.com/deploy/button.svg)](https://www.heroku.com/deploy/?template=https://github.com/baserow/baserow/tree/master)

```bash
docker run -v baserow_data:/baserow/data -p 80:80 -p 443:443 baserow/baserow:2.1.5
docker run -v baserow_data:/baserow/data -p 80:80 -p 443:443 baserow/baserow:2.1.6
```

![Baserow database screenshot](docs/assets/screenshot.png "Baserow database screenshot")
Expand Down Expand Up @@ -108,7 +108,7 @@ Created by Baserow B.V. - bram@baserow.io.

Distributes under the MIT license. See `LICENSE` for more information.

Version: 2.1.5
Version: 2.1.6

The official repository can be found at https://github.com/baserow/baserow.

Expand Down
2 changes: 1 addition & 1 deletion backend/docker/docker-entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ set -euo pipefail
# ENVIRONMENT VARIABLES USED DIRECTLY BY THIS ENTRYPOINT
# ======================================================

export BASEROW_VERSION="2.1.5"
export BASEROW_VERSION="2.1.6"

# Used by docker-entrypoint.sh to start the dev server
# If not configured you'll receive this: CommandError: "0.0.0.0:" is not a valid port number or address:port pair.
Expand Down
2 changes: 1 addition & 1 deletion backend/src/baserow/config/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -469,7 +469,7 @@
"name": "MIT",
"url": "https://github.com/baserow/baserow/blob/develop/LICENSE",
},
"VERSION": "2.1.5",
"VERSION": "2.1.6",
"SERVE_INCLUDE_SCHEMA": False,
"TAGS": [
{"name": "Settings"},
Expand Down
9 changes: 6 additions & 3 deletions backend/src/baserow/contrib/automation/nodes/node_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -369,13 +369,16 @@ def on_event(
for trigger in triggers:
# If we've received a callable payload, call it with the specific service,
# this can give us a payload that is specific to the trigger's service.
if callable(event_payload):
event_payload = event_payload(service_map[trigger.service_id])
service_payload = (
event_payload(service_map[trigger.service_id])
if callable(event_payload)
else event_payload
)

workflow = trigger.workflow
AutomationWorkflowHandler().async_start_workflow(
workflow,
event_payload,
service_payload,
)

# We don't want subsequent events to trigger a new test run
Expand Down
28 changes: 16 additions & 12 deletions backend/src/baserow/contrib/integrations/core/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,22 +76,26 @@ def calculate_next_periodic_run(
next_run = next_run.replace(hour=hour, minute=minute)

elif interval == PERIODIC_INTERVAL_MONTH:
# Run at the specified day_of_month at hour:minute each month
next_run = from_time.replace(day=day_of_month, hour=hour, minute=minute)
# Run at the specified day_of_month at hour:minute each month.
# Handle case where day_of_month doesn't exist in the current month
# (e.g., day 30 in February) by using the last day of the month.
try:
next_run = from_time.replace(day=day_of_month, hour=hour, minute=minute)
except ValueError:
# Use last day of the current month
next_run = from_time.replace(day=1) + relativedelta(months=1, days=-1)
next_run = next_run.replace(hour=hour, minute=minute)

# If we've already passed this time this month, move to next month
if next_run <= from_time:
# Move to next month
next_run += relativedelta(months=1)

# Handle case where day_of_month doesn't exist in the target month
# (e.g., day 31 in February)
try:
next_run = next_run.replace(day=day_of_month)
except ValueError:
# If the day doesn't exist, use the last day of the month
next_run = next_run.replace(day=1) + relativedelta(months=1, days=-1)
next_run = next_run.replace(hour=hour, minute=minute)
# Handle case where day_of_month doesn't exist in the target month
try:
next_run = next_run.replace(day=day_of_month)
except ValueError:
# Use last day of the target month
next_run = next_run.replace(day=1) + relativedelta(months=1, days=-1)
next_run = next_run.replace(hour=hour, minute=minute)

else:
# Unknown interval type, default to 1 hour from now
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,22 +50,26 @@ def _calculate_next_run(interval, minute, hour, day_of_week, day_of_month, from_
next_run = next_run.replace(hour=hour, minute=minute)

elif interval == "MONTH":
# Run at the specified day_of_month at hour:minute each month
next_run = from_time.replace(day=day_of_month, hour=hour, minute=minute)
# Run at the specified day_of_month at hour:minute each month.
# Handle case where day_of_month doesn't exist in the current month
# (e.g., day 30 in February) by using the last day of the month.
try:
next_run = from_time.replace(day=day_of_month, hour=hour, minute=minute)
except ValueError:
# Use last day of the current month
next_run = from_time.replace(day=1) + relativedelta(months=1, days=-1)
next_run = next_run.replace(hour=hour, minute=minute)

# If we've already passed this time this month, move to next month
if next_run <= from_time:
# Move to next month
next_run += relativedelta(months=1)

# Handle case where day_of_month doesn't exist in the target month
# (e.g., day 31 in February)
try:
next_run = next_run.replace(day=day_of_month)
except ValueError:
# If the day doesn't exist, use the last day of the month
next_run = next_run.replace(day=1) + relativedelta(months=1, days=-1)
next_run = next_run.replace(hour=hour, minute=minute)
# Handle case where day_of_month doesn't exist in the target month
try:
next_run = next_run.replace(day=day_of_month)
except ValueError:
# Use last day of the target month
next_run = next_run.replace(day=1) + relativedelta(months=1, days=-1)
next_run = next_run.replace(hour=hour, minute=minute)

else:
# Unknown interval type, default to 1 hour from now
Expand Down
2 changes: 1 addition & 1 deletion backend/src/baserow/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
VERSION = "2.1.5"
VERSION = "2.1.6"
Original file line number Diff line number Diff line change
Expand Up @@ -507,6 +507,36 @@
datetime(2025, 2, 15, 10, 0, 0, tzinfo=timezone.utc),
datetime(2025, 3, 1, 0, 0, 0, tzinfo=timezone.utc),
),
# Day doesn't exist in current month (e.g., Feb 30th)
(
PERIODIC_INTERVAL_MONTH,
30,
14,
0,
30, # Day 30 doesn't exist in February
datetime(2025, 2, 10, 10, 0, 0, tzinfo=timezone.utc), # Currently Feb 10th
datetime(2025, 2, 28, 14, 30, 0, tzinfo=timezone.utc), # Falls back to Feb 28th
),
# Day doesn't exist in current month and time has passed (move to next month)
(
PERIODIC_INTERVAL_MONTH,
30,
14,
0,
30, # Day 30 doesn't exist in February
datetime(2025, 2, 28, 15, 0, 0, tzinfo=timezone.utc), # After 14:30 on Feb 28th
datetime(2025, 3, 30, 14, 30, 0, tzinfo=timezone.utc), # March 30th exists
),
# Day doesn't exist in current or next month (Feb -> Mar with day 31)
(
PERIODIC_INTERVAL_MONTH,
30,
14,
0,
31, # Day 31
datetime(2025, 2, 10, 10, 0, 0, tzinfo=timezone.utc), # Currently Feb 10th
datetime(2025, 2, 28, 14, 30, 0, tzinfo=timezone.utc), # Falls back to Feb 28th
),
]

PERIODIC_SERVICE_NEXT_RUN_SET_CASES = [
Expand Down
6 changes: 6 additions & 0 deletions changelog.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Changelog

## Released 2.1.6

### Bug fixes
* [Integration] Resolved a bug in the periodic trigger which prevented it from being scheduled correctly.


## Released 2.1.5

### Bug fixes
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"type": "bug",
"message": "Resolved a bug in the periodic trigger which prevented it from being scheduled correctly.",
"issue_origin": "github",
"issue_number": null,
"domain": "integration",
"bullet_points": [],
"created_at": "2026-03-13"
}
4 changes: 4 additions & 0 deletions changelog/releases.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
{
"releases": [
{
"name": "2.1.6",
"created_at": "2026-03-13"
},
{
"name": "2.1.5",
"created_at": "2026-03-12"
Expand Down
40 changes: 20 additions & 20 deletions deploy/all-in-one/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ tool gives you the powers of a developer without leaving your browser.
[Vue.js](https://vuejs.org/) and [PostgreSQL](https://www.postgresql.org/).

```bash
docker run -v baserow_data:/baserow/data -p 80:80 -p 443:443 baserow/baserow:2.1.5
docker run -v baserow_data:/baserow/data -p 80:80 -p 443:443 baserow/baserow:2.1.6
```

## Quick Reference
Expand Down Expand Up @@ -52,7 +52,7 @@ docker run \
-p 80:80 \
-p 443:443 \
--restart unless-stopped \
baserow/baserow:2.1.5
baserow/baserow:2.1.6
```

* Change `BASEROW_PUBLIC_URL` to `https://YOUR_DOMAIN` or `http://YOUR_IP` to enable
Expand All @@ -75,7 +75,7 @@ docker run \

## Image Feature Overview

The `baserow/baserow:2.1.5` image by default runs all of Baserow's various services in
The `baserow/baserow:2.1.6` image by default runs all of Baserow's various services in
a single container for maximum ease of use.

> This image is designed for simple single server deployments or simple container
Expand Down Expand Up @@ -223,7 +223,7 @@ docker run \
-p 80:80 \
-p 443:443 \
--restart unless-stopped \
baserow/baserow:2.1.5
baserow/baserow:2.1.6
```

### Behind a reverse proxy already handling ssl
Expand All @@ -236,7 +236,7 @@ docker run \
-v baserow_data:/baserow/data \
-p 80:80 \
--restart unless-stopped \
baserow/baserow:2.1.5
baserow/baserow:2.1.6
```

### On a nonstandard HTTP port
Expand All @@ -249,7 +249,7 @@ docker run \
-v baserow_data:/baserow/data \
-p 3001:80 \
--restart unless-stopped \
baserow/baserow:2.1.5
baserow/baserow:2.1.6
```

### With an external PostgresSQL server
Expand All @@ -268,7 +268,7 @@ docker run \
-p 80:80 \
-p 443:443 \
--restart unless-stopped \
baserow/baserow:2.1.5
baserow/baserow:2.1.6
```

### With an external Redis server
Expand All @@ -289,7 +289,7 @@ docker run \
-p 80:80 \
-p 443:443 \
--restart unless-stopped \
baserow/baserow:2.1.5
baserow/baserow:2.1.6
```

### With an external email server
Expand All @@ -309,7 +309,7 @@ docker run \
-p 80:80 \
-p 443:443 \
--restart unless-stopped \
baserow/baserow:2.1.5
baserow/baserow:2.1.6
```

### With a Postgresql server running on the same host as the Baserow docker container
Expand Down Expand Up @@ -347,7 +347,7 @@ docker run \
-v baserow_data:/baserow/data \
-p 80:80 \
-p 443:443 \
baserow/baserow:2.1.5
baserow/baserow:2.1.6
```

### Supply secrets using files
Expand All @@ -374,7 +374,7 @@ docker run \
-v baserow_data:/baserow/data \
-p 80:80 \
-p 443:443 \
baserow/baserow:2.1.5
baserow/baserow:2.1.6
```

### Start just the embedded database
Expand All @@ -387,7 +387,7 @@ docker run -it \
--name baserow \
-p 5432:5432 \
-v baserow_data:/baserow/data \
baserow/baserow:2.1.5 \
baserow/baserow:2.1.6 \
start-only-db
# Now get the password from
docker exec -it baserow cat /baserow/data/.pgpass
Expand Down Expand Up @@ -419,7 +419,7 @@ docker run -it \
--rm \
--name baserow \
-v baserow_data:/baserow/data \
baserow/baserow:2.1.5 \
baserow/baserow:2.1.6 \
backend-cmd-with-db manage dbshell
```

Expand Down Expand Up @@ -542,19 +542,19 @@ the command below.

```bash
# First read the help message for this command
docker run -it --rm -v baserow_data:/baserow/data baserow/baserow:2.1.5 \
docker run -it --rm -v baserow_data:/baserow/data baserow/baserow:2.1.6 \
backend-cmd-with-db backup --help

# Stop Baserow instance
docker stop baserow

# The command below backs up Baserow to the backups folder in the baserow_data volume:
docker run -it --rm -v baserow_data:/baserow/data baserow/baserow:2.1.5 \
docker run -it --rm -v baserow_data:/baserow/data baserow/baserow:2.1.6 \
backend-cmd-with-db backup -f /baserow/data/backups/backup.tar.gz

# Or backup to a file on your host instead run something like:
docker run -it --rm -v baserow_data:/baserow/data -v $PWD:/baserow/host \
baserow/baserow:2.1.5 backend-cmd-with-db backup -f /baserow/host/backup.tar.gz
baserow/baserow:2.1.6 backend-cmd-with-db backup -f /baserow/host/backup.tar.gz
```

### Restore only Baserow's Postgres Database
Expand All @@ -570,13 +570,13 @@ docker stop baserow
docker run -it --rm \
-v old_baserow_data_volume_containing_the_backup_tar_gz:/baserow/old_data \
-v new_baserow_data_volume_to_restore_into:/baserow/data \
baserow/baserow:2.1.5 backend-cmd-with-db restore -f /baserow/old_data/backup.tar.gz
baserow/baserow:2.1.6 backend-cmd-with-db restore -f /baserow/old_data/backup.tar.gz

# Or to restore from a file on your host instead run something like:
docker run -it --rm \
-v baserow_data:/baserow/data -v \
$(pwd):/baserow/host \
baserow/baserow:2.1.5 backend-cmd-with-db restore -f /baserow/host/backup.tar.gz
baserow/baserow:2.1.6 backend-cmd-with-db restore -f /baserow/host/backup.tar.gz
```

## Running healthchecks on Baserow
Expand Down Expand Up @@ -627,7 +627,7 @@ docker run \
-p 80:80 \
-p 443:443 \
--restart unless-stopped \
baserow/baserow:2.1.5
baserow/baserow:2.1.6
```

Or you can just store it directly in the volume at `baserow_data/env` meaning it will be
Expand All @@ -636,7 +636,7 @@ loaded whenever you mount in this data volume.
### Building your own image from Baserow

```dockerfile
FROM baserow/baserow:2.1.5
FROM baserow/baserow:2.1.6

# Any .sh files found in /baserow/supervisor/env/ will be sourced and loaded at startup
# useful for storing your own environment variable overrides.
Expand Down
2 changes: 1 addition & 1 deletion deploy/all-in-one/supervisor/start.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ cat << EOF
██████╔╝██║ ██║███████║███████╗██║ ██║╚██████╔╝╚███╔███╔╝
╚═════╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚══╝╚══╝

Version 2.1.5
Version 2.1.6

=========================================================================================
EOF
Expand Down
2 changes: 1 addition & 1 deletion deploy/cloudron/CloudronManifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"contactEmail": "bram@baserow.io",
"icon": "file://logo.png",
"tags": ["no-code", "nocode", "database", "data", "collaborate", "airtable"],
"version": "2.1.5",
"version": "2.1.6",
"healthCheckPath": "/api/_health/",
"httpPort": 80,
"addons": {
Expand Down
Loading
Loading