Skip to content

Commit 6d651ae

Browse files
authored
Merge pull request #416 from fzipi/chore/add-lts-specific
feat: add LTS-specific build tags for v3 and v4 CRS releases
2 parents c7a08dd + 9e1f397 commit 6d651ae

File tree

3 files changed

+53
-19
lines changed

3 files changed

+53
-19
lines changed

.github/workflows/verifyimage.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,9 @@ jobs:
9292

9393
- name: Run ${{ matrix.target }}
9494
run: |
95-
# get the major version from the matrix.target
96-
# The targets end with `<major>-<minor>-<patch>`.
97-
CRS_VERSION="v$(awk -F'-' '{print $(NF-2)}' <<< ${{ matrix.target }})"
95+
# get the major CRS version from the matrix.target
96+
# Targets ending with "previous" are v3; all others are v4.
97+
CRS_VERSION="$([[ "${{ matrix.target }}" == *-previous ]] && echo v3 || echo v4)"
9898
. .github/workflows/configure-rules-for-test.sh \
9999
"src/opt/modsecurity/configure-rules.${CRS_VERSION}.conf" \
100100
README.md \

README.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,23 @@ Examples:
4545
* `nginx`
4646
* `apache-alpine`
4747

48+
### LTS Tags
49+
50+
LTS (Long-Term Support) tags are stable tags pointing to a designated LTS release. They are updated less frequently than stable tags and are intended for users who prioritize stability over new features.
51+
52+
LTS Tags are composed of:
53+
* CRS version, in the format `<minor>` or `<minor>.<patch>`
54+
* web server variant
55+
* OS variant (optional)
56+
* `lts` suffix
57+
58+
The LTS tag format is `<CRS version>-<web server>[-<os>]-lts`.
59+
Examples:
60+
* `4.25-nginx-lts`
61+
* `4.25.0-nginx-lts`
62+
* `4.25-apache-lts`
63+
* `4.25.0-apache-alpine-lts`
64+
4865
## OS Variants
4966

5067
* nginx – *latest stable ModSecurity v3 on Nginx 1.28.2 official stable base image, and latest stable OWASP CRS 4.25.0*

docker-bake.hcl

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,25 @@ variable "modsec2-flags" {
1717
default = "--with-yajl --with-ssdeep --with-pcre2"
1818
}
1919

20-
variable "previous-major-crs-version" {
21-
default = "3.3.8"
20+
variable "previous-lts-crs-version" {
21+
default = "3.3.9"
2222
}
2323

2424
variable "major-crs-version" {
2525
# renovate: depName=coreruleset/coreruleset datasource=github-releases
2626
default = "4.25.0"
2727
}
2828

29+
variable "v4-lts-crs-version" {
30+
default = "4.25.0"
31+
}
32+
2933
variable "crs-versions" {
30-
default = {
31-
"previous" = previous-major-crs-version,
32-
"latest" = major-crs-version
33-
}
34+
default = [
35+
{ tag = "previous-lts", version = previous-lts-crs-version },
36+
{ tag = "lts", version = v4-lts-crs-version },
37+
{ tag = "latest", version = major-crs-version }
38+
]
3439
}
3540

3641
variable "nginx-version" {
@@ -112,6 +117,14 @@ function "vtag" {
112117
)
113118
}
114119

120+
function "lts-tag" {
121+
params = [semver, variant]
122+
result = concat(
123+
tag("${minor(semver)}-${variant}-lts"),
124+
tag("${patch(semver)}-${variant}-lts")
125+
)
126+
}
127+
115128
group "default" {
116129
targets = [
117130
"apache",
@@ -137,7 +150,7 @@ target "platforms-base" {
137150

138151
target "apache" {
139152
matrix = {
140-
crs_release = crs-versions
153+
crs_entry = crs-versions
141154
base = [
142155
{
143156
name = "debian"
@@ -157,23 +170,25 @@ target "apache" {
157170
}
158171

159172
inherits = ["platforms-base"]
160-
name = "apache-${base.name}-${replace(crs_release, ".", "-")}"
173+
name = "apache-${base.name}-${crs_entry.tag}"
161174
contexts = {
162175
image = base.image
163176
}
164177
dockerfile = base.dockerfile
165178
args = {
166-
CRS_RELEASE = "${crs_release}"
179+
CRS_RELEASE = crs_entry.version
167180
LUA_MODULES = base.lua_modules
168181
}
169-
tags = concat(tag(base.tag_base),
170-
vtag("${crs_release}", base.tag_base)
182+
tags = concat(
183+
tag(base.tag_base),
184+
vtag("${crs_entry.version}", base.tag_base),
185+
equal(crs_entry.tag, "lts") ? lts-tag("${crs_entry.version}", base.tag_base) : []
171186
)
172187
}
173188

174189
target "nginx" {
175190
matrix = {
176-
crs_release = crs-versions
191+
crs_entry = crs-versions
177192
base = [
178193
{
179194
name = "debian"
@@ -203,20 +218,22 @@ target "nginx" {
203218
]
204219
}
205220
inherits = ["platforms-base"]
206-
name = "nginx-${base.name}-${read-only-fs.name}-${replace(crs_release, ".", "-")}"
221+
name = "nginx-${base.name}-${read-only-fs.name}-${crs_entry.tag}"
207222
contexts = {
208223
image = base.image
209224
}
210225
dockerfile = base.dockerfile
211226
args = {
212-
CRS_RELEASE = crs_release
227+
CRS_RELEASE = crs_entry.version
213228
NGINX_VERSION = nginx-version
214229
LUA_MODULES = base.lua_modules
215230
NGINX_DYNAMIC_MODULES = join(" ", [for mod in nginx-dynamic-modules : join(" ", [mod.owner, mod.name, mod.version])])
216231
NGINX_HOME = "/etc/nginx"
217232
READ_ONLY_FS = read-only-fs.read-only
218233
}
219-
tags = concat(tag("${base.tag_base}${equal(read-only-fs.read-only, "true") ? "-read-only" : ""}"),
220-
vtag("${crs_release}", "${base.tag_base}${equal(read-only-fs.read-only, "true") ? "-read-only" : ""}")
234+
tags = concat(
235+
tag("${base.tag_base}${equal(read-only-fs.read-only, "true") ? "-read-only" : ""}"),
236+
vtag("${crs_entry.version}", "${base.tag_base}${equal(read-only-fs.read-only, "true") ? "-read-only" : ""}"),
237+
equal(crs_entry.tag, "lts") ? lts-tag("${crs_entry.version}", "${base.tag_base}${equal(read-only-fs.read-only, "true") ? "-read-only" : ""}") : []
221238
)
222239
}

0 commit comments

Comments
 (0)