Skip to content

Commit 8268f02

Browse files
committed
Implement Version Policy
- Introduce changelog - Update workflow configurations - Pin TimescaleDB version - Modify MAKEFILE to manage Warpsql versioning, prerelease, and generate Docker image tags Signed-off-by: Piyush Raj <[email protected]>
1 parent a0b0727 commit 8268f02

File tree

5 files changed

+92
-63
lines changed

5 files changed

+92
-63
lines changed

.github/workflows/docker-image.yml

+11-15
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ on:
1717
ts_version:
1818
description: 'TS version to be used'
1919
required: false
20-
default: main
20+
default: ""
2121
env:
2222
ORG: ${{inputs.ORG}}
2323
TS_VERSION: ${{inputs.ts_version}}
24-
BETA: 1 # prevents the latest tag from being pushed.
24+
PRE_RELEASE: "true" # prevents the latest tag from being pushed.
2525
jobs:
2626

2727
# Build multi-arch TimescaleDB images for both TSL and OSS code.
@@ -56,14 +56,12 @@ jobs:
5656

5757
- name: Build and push multi-platform Docker image for postgres
5858
run: |
59-
if [${{inputs.tag_latest}} == 'true']; then
60-
export BETA=''
59+
if [ "${{inputs.tag_latest}}" == "true" ]; then
60+
export PRE_RELEASE=''
6161
fi
62-
make multi${{ matrix.oss }} ORG=$ORG PG_VER=pg${{ matrix.pg }} \
63-
TS_VERSION=$TS_VERSION TAG_VERSION="$TAG_VERSION" PREV_EXTRA="${{ matrix.oss }}" BETA=$BETA
64-
env:
65-
TAG_VERSION: "${{inputs.ORG}}/postgres:${{inputs.version}}-pg${{ matrix.pg }}"
66-
# Build bitnami images of TimscaleDB.
62+
make multi${{ matrix.oss }} ORG="$ORG" PG_VER="pg${{ matrix.pg }}" \
63+
${TS_VERSION:+TS_VERSION="$TS_VERSION"} PREV_EXTRA="${{ matrix.oss }}" PRE_RELEASE="$PRE_RELEASE"
64+
# Build bitnami images of TimscaleDB.
6765
# The images are built only for amd64, since it is the only supported architecture in the base image bitname/postgresql.
6866
# The images are only built for TSL code.
6967
timescaledb-bitnami:
@@ -85,10 +83,8 @@ jobs:
8583

8684
- name: Build and push amd64 Docker image for TimescaleDB bitnami
8785
run: |
88-
if [${{inputs.tag_latest}} == 'true']; then
89-
export BETA=''
86+
if [ "${{inputs.tag_latest}}" == "true" ]; then
87+
export PRE_RELEASE=''
9088
fi
91-
make push ORG=$ORG PG_VER=pg${{ matrix.pg }} TS_VERSION=$TS_VERSION BETA=$BETA TAG_VERSION="$TAG_VERSION"
92-
working-directory: bitnami
93-
env:
94-
TAG_VERSION: "${{inputs.ORG}}/timescaledb:${{inputs.version}}-pg${{ matrix.pg }}-bitnami"
89+
make push ORG="$ORG" PG_VER="pg${{ matrix.pg }}" ${TS_VERSION:+TS_VERSION="$TS_VERSION"} PRE_RELEASE="$PRE_RELEASE"
90+
working-directory: bitnami

CHANGELOG.md

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Changelog
2+
3+
All notable changes to this project will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). For additional details, refer to our [versioning policy](./docs/version-policy.md).
7+
8+
9+
## [Unreleased]
10+
### Added
11+
### Changed
12+
### Deprecated
13+
### Removed
14+
### Fixed
15+
### Security
16+
17+
## [Version] - YYYY-MM-DD

Makefile

+40-36
Original file line numberDiff line numberDiff line change
@@ -4,81 +4,85 @@ NAME=postgres
44
ORG=samagragovernance
55
PG_VER=pg15
66
PG_VER_NUMBER=$(shell echo $(PG_VER) | cut -c3-)
7-
TS_VERSION=main
7+
TS_VERSION=2.13.0
88
PG_CRON_VERSION=v1.6.0
99
PREV_TS_VERSION=$(shell wget --quiet -O - https://raw.githubusercontent.com/timescale/timescaledb/${TS_VERSION}/version.config | grep update_from_version | sed -e 's!update_from_version = !!')
1010
PREV_TS_IMAGE="timescale/timescaledb:$(PREV_TS_VERSION)-pg$(PG_VER_NUMBER)$(PREV_EXTRA)"
1111
PREV_IMAGE=$(shell if docker pull $(PREV_TS_IMAGE) >/dev/null; then echo "$(PREV_TS_IMAGE)"; else echo "postgres:$(PG_VER_NUMBER)-alpine"; fi )
12-
# Beta releases should not be tagged as latest, so BETA is used to track.
13-
BETA=$(findstring rc,$(TS_VERSION))
1412
PLATFORM=linux/amd64,linux/arm64
13+
# Retrieve the latest Git tag for the current commit
14+
RELEASE_TAG = $(shell git describe --tags --abbrev=0 --exact-match HEAD 2>/dev/null)
15+
16+
WARPSQL_VERSION := $(if $(RELEASE_TAG),$(RELEASE_TAG),dev-$(shell git rev-parse HEAD))
17+
18+
# Pre releases should not be tagged as latest, so PRE_RELEASE is used to track.
19+
PRE_RELEASE=$(shell echo "$(WARPSQL_VERSION)" | grep -Eo "alpha|beta|rc")
1520

1621
# PUSH_MULTI can be set to nothing for dry-run without pushing during multi-arch build
1722
PUSH_MULTI=--push
18-
TAG_VERSION=$(ORG)/$(NAME):$(TS_VERSION)-$(PG_VER)
19-
TAG_LATEST=$(ORG)/$(NAME):latest-$(PG_VER)
20-
TAG=-t $(TAG_VERSION) $(if $(BETA),,-t $(TAG_LATEST))
21-
TAG_OSS=-t $(TAG_VERSION)-oss $(if $(BETA),,-t $(TAG_LATEST)-oss)
23+
TAG_VERSION=$(ORG)/$(NAME):$(WARPSQL_VERSION)-pg$(PG_VER_NUMBER)
24+
TAG_LATEST=$(ORG)/$(NAME):latest-pg$(PG_VER_NUMBER)
25+
TAG=-t $(TAG_VERSION) $(if $(PRE_RELEASE),,-t $(TAG_LATEST))
26+
TAG_OSS=-t $(TAG_VERSION)-oss $(if $(PRE_RELEASE),,-t $(TAG_LATEST)-oss)
27+
28+
DOCKER_BUILD_ARGS = --build-arg TS_VERSION=$(TS_VERSION) \
29+
--build-arg PG_VERSION=$(PG_VER_NUMBER) \
30+
--build-arg PREV_IMAGE=$(PREV_IMAGE) \
31+
--build-arg PG_CRON_VERSION=$(PG_CRON_VERSION)
32+
2233

2334
default: image
2435

25-
.multi_$(TS_VERSION)_$(PG_VER)_oss: Dockerfile
26-
test -n "$(TS_VERSION)" # TS_VERSION
27-
test -n "$(PREV_TS_VERSION)" # PREV_TS_VERSION
36+
.multi_$(WARPSQL_VERSION)_$(PG_VER)_oss: Dockerfile
2837
docker buildx create --platform $(PLATFORM) --name multibuild --use
2938
docker buildx inspect multibuild --bootstrap
3039
docker buildx build --platform $(PLATFORM) \
31-
--build-arg TS_VERSION=$(TS_VERSION) \
32-
--build-arg PG_CRON_VERSION=$(PG_CRON_VERSION) \
33-
--build-arg PG_VERSION=$(PG_VER_NUMBER) \
34-
--build-arg PREV_IMAGE=$(PREV_IMAGE) \
3540
--build-arg OSS_ONLY=" -DAPACHE_ONLY=1" \
41+
$(DOCKER_BUILD_ARGS) \
3642
$(TAG_OSS) $(PUSH_MULTI) .
37-
touch .multi_$(TS_VERSION)_$(PG_VER)_oss
43+
touch .multi_$(WARPSQL_VERSION)_$(PG_VER)_oss
3844
docker buildx rm multibuild
3945

40-
.multi_$(TS_VERSION)_$(PG_VER): Dockerfile
41-
test -n "$(TS_VERSION)" # TS_VERSION
42-
test -n "$(PREV_TS_VERSION)" # PREV_TS_VERSION
43-
test -n "$(PREV_IMAGE)" # PREV_IMAGE
46+
.multi_$(WARPSQL_VERSION)_$(PG_VER): Dockerfile
4447
docker buildx create --platform $(PLATFORM) --name multibuild --use
4548
docker buildx inspect multibuild --bootstrap
4649
docker buildx build --platform $(PLATFORM) \
47-
--build-arg TS_VERSION=$(TS_VERSION) \
48-
--build-arg PG_CRON_VERSION=$(PG_CRON_VERSION) \
49-
--build-arg PREV_IMAGE=$(PREV_IMAGE) \
50-
--build-arg PG_VERSION=$(PG_VER_NUMBER) \
50+
$(DOCKER_BUILD_ARGS) \
5151
$(TAG) $(PUSH_MULTI) .
52-
touch .multi_$(TS_VERSION)_$(PG_VER)
52+
touch .multi_$(WARPSQL_VERSION)_$(PG_VER)
5353
docker buildx rm multibuild
5454

55-
.build_$(TS_VERSION)_$(PG_VER)_oss: Dockerfile
56-
docker build --build-arg OSS_ONLY=" -DAPACHE_ONLY=1" --build-arg PG_VERSION=$(PG_VER_NUMBER) --build-arg PG_CRON_VERSION=$(PG_CRON_VERSION) $(TAG_OSS) .
57-
touch .build_$(TS_VERSION)_$(PG_VER)_oss
55+
.build_$(WARPSQL_VERSION)_$(PG_VER)_oss: Dockerfile
56+
docker build --build-arg OSS_ONLY=" -DAPACHE_ONLY=1" \
57+
$(DOCKER_BUILD_ARGS) \
58+
$(TAG_OSS) .
59+
touch .build_$(WARPSQL_VERSION)_$(PG_VER)_oss
5860

59-
.build_$(TS_VERSION)_$(PG_VER): Dockerfile
60-
docker build --build-arg PG_VERSION=$(PG_VER_NUMBER) --build-arg TS_VERSION=$(TS_VERSION) --build-arg PG_CRON_VERSION=$(PG_CRON_VERSION) --build-arg PREV_IMAGE=$(PREV_IMAGE) $(TAG) .
61-
touch .build_$(TS_VERSION)_$(PG_VER)
61+
.build_$(WARPSQL_VERSION)_$(PG_VER): Dockerfile
62+
docker build \
63+
$(DOCKER_BUILD_ARGS) \
64+
$(TAG) .
65+
touch .build_$(WARPSQL_VERSION)_$(PG_VER)
6266

63-
image: .build_$(TS_VERSION)_$(PG_VER)
67+
image: .build_$(WARPSQL_VERSION)_$(PG_VER)
6468

65-
oss: .build_$(TS_VERSION)_$(PG_VER)_oss
69+
oss: .build_$(WARPSQL_VERSION)_$(PG_VER)_oss
6670

6771
push: image
6872
docker push $(TAG_VERSION)
69-
if [ -z "$(BETA)" ]; then \
73+
if [ -z "$(PRE_RELEASE)" ]; then \
7074
docker push $(TAG_LATEST); \
7175
fi
7276

7377
push-oss: oss
7478
docker push $(TAG_VERSION)-oss
75-
if [ -z "$(BETA)" ]; then \
79+
if [ -z "$(PRE_RELEASE)" ]; then \
7680
docker push $(TAG_LATEST)-oss; \
7781
fi
7882

79-
multi: .multi_$(TS_VERSION)_$(PG_VER)
83+
multi: .multi_$(WARPSQL_VERSION)_$(PG_VER)
8084

81-
multi-oss: .multi_$(TS_VERSION)_$(PG_VER)_oss
85+
multi-oss: .multi_$(WARPSQL_VERSION)_$(PG_VER)_oss
8286

8387
all: multi multi-oss
8488

bitnami/Makefile

+23-12
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,41 @@ ORG=timescaledev
55
PG_VER=pg15
66
PG_VER_NUMBER=$(shell echo $(PG_VER) | cut -c3-)
77
PG_CRON_VERSION=v1.6.0
8-
TS_VERSION=main
8+
TS_VERSION=2.13.0
99
PREV_TS_VERSION=$(shell wget --quiet -O - https://raw.githubusercontent.com/timescale/timescaledb/${TS_VERSION}/version.config | grep update_from_version | sed -e 's!update_from_version = !!')
1010
PREV_TS_IMAGE="timescale/timescaledb:$(PREV_TS_VERSION)-pg$(PG_VER_NUMBER)-bitnami"
1111
PREV_IMAGE=$(shell if docker pull $(PREV_TS_IMAGE) >/dev/null; then echo "$(PREV_TS_IMAGE)"; else echo "bitnami/postgresql:$(PG_VER_NUMBER)"; fi )
1212

13-
# Beta releases should not be tagged as latest, so BETA is used to track.
14-
BETA=$(findstring rc,$(TS_VERSION))
15-
TAG_VERSION=$(ORG)/$(NAME):$(TS_VERSION)-$(PG_VER)-bitnami
13+
# Retrieve the latest Git tag for the current commit
14+
RELEASE_TAG = $(shell git describe --tags --abbrev=0 --exact-match HEAD 2>/dev/null)
15+
16+
WARPSQL_VERSION := $(if $(RELEASE_TAG),$(RELEASE_TAG),dev-$(shell git rev-parse HEAD))
17+
18+
# Pre releases should not be tagged as latest, so PRE_RELEASE is used to track.
19+
PRE_RELEASE=$(shell echo "$(WARPSQL_VERSION)" | grep -Eo "alpha|beta|rc")
20+
21+
TAG_VERSION=$(ORG)/$(NAME):$(WARPSQL_VERSION)-$(PG_VER)-bitnami
1622
TAG_LATEST=$(ORG)/$(NAME):latest-$(PG_VER)-bitnami
17-
TAG=-t $(TAG_VERSION) $(if $(BETA),,-t $(TAG_LATEST))
23+
TAG=-t $(TAG_VERSION) $(if $(PRE_RELEASE),,-t $(TAG_LATEST))
24+
25+
DOCKER_BUILD_ARGS = --build-arg PG_VERSION=$(PG_VER_NUMBER) \
26+
--build-arg TS_VERSION=$(TS_VERSION) \
27+
--build-arg PREV_IMAGE=$(PREV_IMAGE) \
28+
--build-arg PG_CRON_VERSION=$(PG_CRON_VERSION)
1829

1930
default: image
2031

21-
.build_$(TS_VERSION)_$(PG_VER): Dockerfile
22-
test -n "$(TS_VERSION)" # TS_VERSION
23-
test -n "$(PREV_TS_VERSION)" # PREV_TS_VERSION
24-
docker build -f ./Dockerfile --build-arg PG_VERSION=$(PG_VER_NUMBER) --build-arg TS_VERSION=$(TS_VERSION) --build-arg PG_CRON_VERSION=$(PG_CRON_VERSION) --build-arg PREV_IMAGE=$(PREV_IMAGE) $(TAG) ..
25-
touch .build_$(TS_VERSION)_$(PG_VER)-bitnami
32+
.build_$(WARPSQL_VERSION)_$(PG_VER): Dockerfile
33+
docker build -f ./Dockerfile \
34+
$(DOCKER_BUILD_ARGS) \
35+
$(TAG) ..
36+
touch .build_$(WARPSQL_VERSION)_$(PG_VER)-bitnami
2637

27-
image: .build_$(TS_VERSION)_$(PG_VER)
38+
image: .build_$(WARPSQL_VERSION)_$(PG_VER)
2839

2940
push: image
3041
docker push $(TAG_VERSION)
31-
if [ -z "$(BETA)" ]; then \
42+
if [ -z "$(PRE_RELEASE)" ]; then \
3243
docker push $(TAG_LATEST); \
3344
fi
3445

docs/version-policy.md

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Version Policy
22

33
WarpSQL adopts [Semantic Versioning(SemVer)](https://semver.org/) using the `MAJOR.MINOR.PATCH` format.
4+
For a summary of changes in the WarpSQL refer to the [CHANGELOG](../CHANGELOG.md).
45

56
## WarpSQL versions
67

0 commit comments

Comments
 (0)