diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 503b64bb..8942f060 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -17,11 +17,11 @@ on: ts_version: description: 'TS version to be used' required: false - default: main + default: "" env: ORG: ${{inputs.ORG}} TS_VERSION: ${{inputs.ts_version}} - BETA: 1 # prevents the latest tag from being pushed. + PRE_RELEASE: "true" # prevents the latest tag from being pushed. jobs: # Build multi-arch TimescaleDB images for both TSL and OSS code. @@ -56,14 +56,12 @@ jobs: - name: Build and push multi-platform Docker image for postgres run: | - if [${{inputs.tag_latest}} == 'true']; then - export BETA='' + if [ "${{inputs.tag_latest}}" == "true" ]; then + export PRE_RELEASE='' fi - make multi${{ matrix.oss }} ORG=$ORG PG_VER=pg${{ matrix.pg }} \ - TS_VERSION=$TS_VERSION TAG_VERSION="$TAG_VERSION" PREV_EXTRA="${{ matrix.oss }}" BETA=$BETA - env: - TAG_VERSION: "${{inputs.ORG}}/postgres:${{inputs.version}}-pg${{ matrix.pg }}" - # Build bitnami images of TimscaleDB. + make multi${{ matrix.oss }} ORG="$ORG" PG_VER="pg${{ matrix.pg }}" \ + ${TS_VERSION:+TS_VERSION="$TS_VERSION"} PREV_EXTRA="${{ matrix.oss }}" PRE_RELEASE="$PRE_RELEASE" + # Build bitnami images of TimscaleDB. # The images are built only for amd64, since it is the only supported architecture in the base image bitname/postgresql. # The images are only built for TSL code. timescaledb-bitnami: @@ -85,10 +83,8 @@ jobs: - name: Build and push amd64 Docker image for TimescaleDB bitnami run: | - if [${{inputs.tag_latest}} == 'true']; then - export BETA='' + if [ "${{inputs.tag_latest}}" == "true" ]; then + export PRE_RELEASE='' fi - make push ORG=$ORG PG_VER=pg${{ matrix.pg }} TS_VERSION=$TS_VERSION BETA=$BETA TAG_VERSION="$TAG_VERSION" - working-directory: bitnami - env: - TAG_VERSION: "${{inputs.ORG}}/timescaledb:${{inputs.version}}-pg${{ matrix.pg }}-bitnami" + make push ORG="$ORG" PG_VER="pg${{ matrix.pg }}" ${TS_VERSION:+TS_VERSION="$TS_VERSION"} PRE_RELEASE="$PRE_RELEASE" + working-directory: bitnami \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..eab110ca --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,17 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +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). + + +## [Unreleased] +### Added +### Changed +### Deprecated +### Removed +### Fixed +### Security + +## [Version] - YYYY-MM-DD \ No newline at end of file diff --git a/Makefile b/Makefile index d45cc664..3a4b605e 100644 --- a/Makefile +++ b/Makefile @@ -4,81 +4,85 @@ NAME=postgres ORG=samagragovernance PG_VER=pg15 PG_VER_NUMBER=$(shell echo $(PG_VER) | cut -c3-) -TS_VERSION=main +TS_VERSION=2.13.0 PG_CRON_VERSION=v1.6.0 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 = !!') PREV_TS_IMAGE="timescale/timescaledb:$(PREV_TS_VERSION)-pg$(PG_VER_NUMBER)$(PREV_EXTRA)" PREV_IMAGE=$(shell if docker pull $(PREV_TS_IMAGE) >/dev/null; then echo "$(PREV_TS_IMAGE)"; else echo "postgres:$(PG_VER_NUMBER)-alpine"; fi ) -# Beta releases should not be tagged as latest, so BETA is used to track. -BETA=$(findstring rc,$(TS_VERSION)) PLATFORM=linux/amd64,linux/arm64 +# Retrieve the latest Git tag for the current commit +RELEASE_TAG = $(shell git describe --tags --abbrev=0 --exact-match HEAD 2>/dev/null) + +WARPSQL_VERSION := $(if $(RELEASE_TAG),$(RELEASE_TAG),dev-$(shell git rev-parse HEAD)) + +# Pre releases should not be tagged as latest, so PRE_RELEASE is used to track. +PRE_RELEASE=$(shell echo "$(WARPSQL_VERSION)" | grep -Eo "alpha|beta|rc") # PUSH_MULTI can be set to nothing for dry-run without pushing during multi-arch build PUSH_MULTI=--push -TAG_VERSION=$(ORG)/$(NAME):$(TS_VERSION)-$(PG_VER) -TAG_LATEST=$(ORG)/$(NAME):latest-$(PG_VER) -TAG=-t $(TAG_VERSION) $(if $(BETA),,-t $(TAG_LATEST)) -TAG_OSS=-t $(TAG_VERSION)-oss $(if $(BETA),,-t $(TAG_LATEST)-oss) +TAG_VERSION=$(ORG)/$(NAME):$(WARPSQL_VERSION)-pg$(PG_VER_NUMBER) +TAG_LATEST=$(ORG)/$(NAME):latest-pg$(PG_VER_NUMBER) +TAG=-t $(TAG_VERSION) $(if $(PRE_RELEASE),,-t $(TAG_LATEST)) +TAG_OSS=-t $(TAG_VERSION)-oss $(if $(PRE_RELEASE),,-t $(TAG_LATEST)-oss) + +DOCKER_BUILD_ARGS = --build-arg TS_VERSION=$(TS_VERSION) \ + --build-arg PG_VERSION=$(PG_VER_NUMBER) \ + --build-arg PREV_IMAGE=$(PREV_IMAGE) \ + --build-arg PG_CRON_VERSION=$(PG_CRON_VERSION) + default: image -.multi_$(TS_VERSION)_$(PG_VER)_oss: Dockerfile - test -n "$(TS_VERSION)" # TS_VERSION - test -n "$(PREV_TS_VERSION)" # PREV_TS_VERSION +.multi_$(WARPSQL_VERSION)_$(PG_VER)_oss: Dockerfile docker buildx create --platform $(PLATFORM) --name multibuild --use docker buildx inspect multibuild --bootstrap docker buildx build --platform $(PLATFORM) \ - --build-arg TS_VERSION=$(TS_VERSION) \ - --build-arg PG_CRON_VERSION=$(PG_CRON_VERSION) \ - --build-arg PG_VERSION=$(PG_VER_NUMBER) \ - --build-arg PREV_IMAGE=$(PREV_IMAGE) \ --build-arg OSS_ONLY=" -DAPACHE_ONLY=1" \ + $(DOCKER_BUILD_ARGS) \ $(TAG_OSS) $(PUSH_MULTI) . - touch .multi_$(TS_VERSION)_$(PG_VER)_oss + touch .multi_$(WARPSQL_VERSION)_$(PG_VER)_oss docker buildx rm multibuild -.multi_$(TS_VERSION)_$(PG_VER): Dockerfile - test -n "$(TS_VERSION)" # TS_VERSION - test -n "$(PREV_TS_VERSION)" # PREV_TS_VERSION - test -n "$(PREV_IMAGE)" # PREV_IMAGE +.multi_$(WARPSQL_VERSION)_$(PG_VER): Dockerfile docker buildx create --platform $(PLATFORM) --name multibuild --use docker buildx inspect multibuild --bootstrap docker buildx build --platform $(PLATFORM) \ - --build-arg TS_VERSION=$(TS_VERSION) \ - --build-arg PG_CRON_VERSION=$(PG_CRON_VERSION) \ - --build-arg PREV_IMAGE=$(PREV_IMAGE) \ - --build-arg PG_VERSION=$(PG_VER_NUMBER) \ + $(DOCKER_BUILD_ARGS) \ $(TAG) $(PUSH_MULTI) . - touch .multi_$(TS_VERSION)_$(PG_VER) + touch .multi_$(WARPSQL_VERSION)_$(PG_VER) docker buildx rm multibuild -.build_$(TS_VERSION)_$(PG_VER)_oss: Dockerfile - 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) . - touch .build_$(TS_VERSION)_$(PG_VER)_oss +.build_$(WARPSQL_VERSION)_$(PG_VER)_oss: Dockerfile + docker build --build-arg OSS_ONLY=" -DAPACHE_ONLY=1" \ + $(DOCKER_BUILD_ARGS) \ + $(TAG_OSS) . + touch .build_$(WARPSQL_VERSION)_$(PG_VER)_oss -.build_$(TS_VERSION)_$(PG_VER): Dockerfile - 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) . - touch .build_$(TS_VERSION)_$(PG_VER) +.build_$(WARPSQL_VERSION)_$(PG_VER): Dockerfile + docker build \ + $(DOCKER_BUILD_ARGS) \ + $(TAG) . + touch .build_$(WARPSQL_VERSION)_$(PG_VER) -image: .build_$(TS_VERSION)_$(PG_VER) +image: .build_$(WARPSQL_VERSION)_$(PG_VER) -oss: .build_$(TS_VERSION)_$(PG_VER)_oss +oss: .build_$(WARPSQL_VERSION)_$(PG_VER)_oss push: image docker push $(TAG_VERSION) - if [ -z "$(BETA)" ]; then \ + if [ -z "$(PRE_RELEASE)" ]; then \ docker push $(TAG_LATEST); \ fi push-oss: oss docker push $(TAG_VERSION)-oss - if [ -z "$(BETA)" ]; then \ + if [ -z "$(PRE_RELEASE)" ]; then \ docker push $(TAG_LATEST)-oss; \ fi -multi: .multi_$(TS_VERSION)_$(PG_VER) +multi: .multi_$(WARPSQL_VERSION)_$(PG_VER) -multi-oss: .multi_$(TS_VERSION)_$(PG_VER)_oss +multi-oss: .multi_$(WARPSQL_VERSION)_$(PG_VER)_oss all: multi multi-oss diff --git a/bitnami/Makefile b/bitnami/Makefile index 780d89ac..0e1f9645 100644 --- a/bitnami/Makefile +++ b/bitnami/Makefile @@ -5,30 +5,41 @@ ORG=timescaledev PG_VER=pg15 PG_VER_NUMBER=$(shell echo $(PG_VER) | cut -c3-) PG_CRON_VERSION=v1.6.0 -TS_VERSION=main +TS_VERSION=2.13.0 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 = !!') PREV_TS_IMAGE="timescale/timescaledb:$(PREV_TS_VERSION)-pg$(PG_VER_NUMBER)-bitnami" PREV_IMAGE=$(shell if docker pull $(PREV_TS_IMAGE) >/dev/null; then echo "$(PREV_TS_IMAGE)"; else echo "bitnami/postgresql:$(PG_VER_NUMBER)"; fi ) -# Beta releases should not be tagged as latest, so BETA is used to track. -BETA=$(findstring rc,$(TS_VERSION)) -TAG_VERSION=$(ORG)/$(NAME):$(TS_VERSION)-$(PG_VER)-bitnami +# Retrieve the latest Git tag for the current commit +RELEASE_TAG = $(shell git describe --tags --abbrev=0 --exact-match HEAD 2>/dev/null) + +WARPSQL_VERSION := $(if $(RELEASE_TAG),$(RELEASE_TAG),dev-$(shell git rev-parse HEAD)) + +# Pre releases should not be tagged as latest, so PRE_RELEASE is used to track. +PRE_RELEASE=$(shell echo "$(WARPSQL_VERSION)" | grep -Eo "alpha|beta|rc") + +TAG_VERSION=$(ORG)/$(NAME):$(WARPSQL_VERSION)-$(PG_VER)-bitnami TAG_LATEST=$(ORG)/$(NAME):latest-$(PG_VER)-bitnami -TAG=-t $(TAG_VERSION) $(if $(BETA),,-t $(TAG_LATEST)) +TAG=-t $(TAG_VERSION) $(if $(PRE_RELEASE),,-t $(TAG_LATEST)) + +DOCKER_BUILD_ARGS = --build-arg PG_VERSION=$(PG_VER_NUMBER) \ + --build-arg TS_VERSION=$(TS_VERSION) \ + --build-arg PREV_IMAGE=$(PREV_IMAGE) \ + --build-arg PG_CRON_VERSION=$(PG_CRON_VERSION) default: image -.build_$(TS_VERSION)_$(PG_VER): Dockerfile - test -n "$(TS_VERSION)" # TS_VERSION - test -n "$(PREV_TS_VERSION)" # PREV_TS_VERSION - 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) .. - touch .build_$(TS_VERSION)_$(PG_VER)-bitnami +.build_$(WARPSQL_VERSION)_$(PG_VER): Dockerfile + docker build -f ./Dockerfile \ + $(DOCKER_BUILD_ARGS) \ + $(TAG) .. + touch .build_$(WARPSQL_VERSION)_$(PG_VER)-bitnami -image: .build_$(TS_VERSION)_$(PG_VER) +image: .build_$(WARPSQL_VERSION)_$(PG_VER) push: image docker push $(TAG_VERSION) - if [ -z "$(BETA)" ]; then \ + if [ -z "$(PRE_RELEASE)" ]; then \ docker push $(TAG_LATEST); \ fi diff --git a/docs/version-policy.md b/docs/version-policy.md index 3bc0b206..d1f7a42f 100644 --- a/docs/version-policy.md +++ b/docs/version-policy.md @@ -1,6 +1,7 @@ # Version Policy WarpSQL adopts [Semantic Versioning(SemVer)](https://semver.org/) using the `MAJOR.MINOR.PATCH` format. +For a summary of changes in the WarpSQL refer to the [CHANGELOG](../CHANGELOG.md). ## WarpSQL versions