blob: 3ed4f52b93a7647f3448826ced136e652533c0b6 [file] [log] [blame]
pierventre2c7a4db2020-06-26 21:24:00 +02001#
2# Copyright 2020-present Open Networking Foundation
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16
17# set default shell
pierventre83611422020-08-14 22:53:15 +020018SHELL := /bin/bash -e -o pipefail
pierventre2c7a4db2020-06-26 21:24:00 +020019
pierventre83611422020-08-14 22:53:15 +020020# General variables
pierventre83611422020-08-14 22:53:15 +020021THIS_MAKE := $(lastword $(MAKEFILE_LIST))
pierventre2c7a4db2020-06-26 21:24:00 +020022
23# Docker related
pierventre83611422020-08-14 22:53:15 +020024DOCKER_REGISTRY ?=
Carmelo Cascone68528e82022-02-04 18:42:34 -080025DOCKER_REPOSITORY ?= opennetworking/sdfabric-onos
pierventre83611422020-08-14 22:53:15 +020026DOCKER_BUILD_ARGS ?=
pierventredd900102020-11-06 19:23:41 +010027DOCKER_TAG ?= stable
28DOCKER_TAG_BUILD_DATE ?=
pierventre7fdd3602021-05-05 10:54:38 +020029DOCKER_TAG_PROFILER ?=
pierventre2c7a4db2020-06-26 21:24:00 +020030
31# Docker labels. Only set ref and commit date if committed
pierventre83611422020-08-14 22:53:15 +020032DOCKER_LABEL_VCS_URL ?= $(shell git remote get-url $(shell git remote))
33DOCKER_LABEL_BUILD_DATE ?= $(shell date -u "+%Y-%m-%dT%H:%M:%SZ")
34DOCKER_LABEL_COMMIT_DATE = $(shell git show -s --format=%cd --date=iso-strict HEAD)
pierventre2c7a4db2020-06-26 21:24:00 +020035
36ifeq ($(shell git ls-files --others --modified --exclude-standard 2>/dev/null | wc -l | sed -e 's/ //g'),0)
37 DOCKER_LABEL_VCS_REF = $(shell git rev-parse HEAD)
38else
39 DOCKER_LABEL_VCS_REF = $(shell git rev-parse HEAD)+dirty
40endif
41
pierventredd900102020-11-06 19:23:41 +010042ifeq ($(DOCKER_TAG),stable)
pierventred3ba4522022-01-12 22:10:58 +010043# FIXME temporary until stable moves to newer commits
44 KARAF_VERSION := 4.2.9
pierventre83611422020-08-14 22:53:15 +020045# Includes the default ("working") versions of each component
pierventredd900102020-11-06 19:23:41 +010046 include ./Makefile.vars.stable
47else ifeq ($(DOCKER_TAG),master)
pierventred3ba4522022-01-12 22:10:58 +010048# FIXME temporary until stable moves to newer commits
49 KARAF_VERSION := 4.2.14
pierventredd900102020-11-06 19:23:41 +010050# Includes the master versions of each component
51 include ./Makefile.vars.master
52else
53 $(error You must define properly the DOCKER_TAG variable)
54endif
55
Carmelo Cascone68528e82022-02-04 18:42:34 -080056FINAL_IMAGENAME := ${DOCKER_REGISTRY}${DOCKER_REPOSITORY}:${DOCKER_TAG}${DOCKER_TAG_PROFILER}${DOCKER_TAG_BUILD_DATE}
57export LOCAL_APPS := local-apps
pierventre83611422020-08-14 22:53:15 +020058
59# Shellcheck related
60SHELLCHECK_TAG=v0.7.1
61SHELLCHECK_IMAGE=koalaman/shellcheck:${SHELLCHECK_TAG}
62
pierventre16709162020-07-16 20:48:24 +020063# ONOS related
Carmelo Cascone68528e82022-02-04 18:42:34 -080064ONOS_BASE_IMAGENAME := onos-base:${DOCKER_TAG}${DOCKER_TAG_PROFILER}${DOCKER_TAG_BUILD_DATE}
pierventre16709162020-07-16 20:48:24 +020065export ONOS_ROOT := $(shell pwd)/onos
pierventre83611422020-08-14 22:53:15 +020066ONOS_REPO := https://gerrit.onosproject.org/onos
Charles Chanca28c842022-02-04 21:49:00 -080067# This profile contains the minimal set of ONOS built-in apps required to control SD-Fabric.
68ONOS_PROFILE := "sdfabric"
pierventre7fdd3602021-05-05 10:54:38 +020069PROFILER ?=
70ONOS_YOURKIT := 2021.3-b230
Daniele Morod49dd092021-06-04 17:56:32 +020071USE_ONOS_BAZEL_OUTPUT ?=
Daniele Morof969c742022-01-03 22:01:00 +010072USE_LOCAL_SNAPSHOT_ARTIFACTS ?=
pierventre2c7a4db2020-06-26 21:24:00 +020073
pierventre16709162020-07-16 20:48:24 +020074# Trellis-Control related
pierventre83611422020-08-14 22:53:15 +020075export TRELLIS_CONTROL_ROOT := $(shell pwd)/trellis-control
76export TRELLIS_CONTROL_REPO := https://gerrit.onosproject.org/trellis-control
pierventre16709162020-07-16 20:48:24 +020077
78# Trellis-T3 related
pierventre83611422020-08-14 22:53:15 +020079export TRELLIS_T3_ROOT := $(shell pwd)/trellis-t3
80export TRELLIS_T3_REPO := https://gerrit.onosproject.org/trellis-t3
pierventre16709162020-07-16 20:48:24 +020081
pierventre16709162020-07-16 20:48:24 +020082# Up4 related
pierventre83611422020-08-14 22:53:15 +020083export UP4_ROOT := $(shell pwd)/up4
pierventre0b6a9c32020-10-02 11:32:54 +020084export UP4_REPO := git@github.com:omec-project/up4.git
pierventre16709162020-07-16 20:48:24 +020085
pierventref33fc112020-07-30 12:55:54 +020086# Fabric-TNA related
pierventre83611422020-08-14 22:53:15 +020087export FABRIC_TNA_ROOT := $(shell pwd)/fabric-tna
pierventre0b6a9c32020-10-02 11:32:54 +020088export FABRIC_TNA_REPO := git@github.com:stratum/fabric-tna.git
pierventref33fc112020-07-30 12:55:54 +020089
Charles Chanc11ecd62022-02-07 15:46:48 -080090.PHONY: onos trellis-control up4 fabric-tna
pierventre16709162020-07-16 20:48:24 +020091
pierventref33fc112020-07-30 12:55:54 +020092.SILENT: up4 fabric-tna
pierventre2c7a4db2020-06-26 21:24:00 +020093
94# This should to be the first and default target in this Makefile
95help: ## : Print this help
96 @echo "Usage: make [<target>]"
97 @echo "where available targets are:"
98 @echo
pierventre83611422020-08-14 22:53:15 +020099 @grep '^[[:alnum:]_-]*:.* ##' $(THIS_MAKE) \
pierventre2c7a4db2020-06-26 21:24:00 +0200100 | sort | awk 'BEGIN {FS=":.* ## "}; {printf "%-25s %s\n", $$1, $$2};'
101 @echo
102 @echo "Environment variables:"
pierventre83611422020-08-14 22:53:15 +0200103 @echo "ONOS_VERSION : Override to use a specific branch/commit/tag/release to build the image"
104 @echo "TRELLIS_CONTROL_VERSION : Override to use a specific branch/commit/tag/release to build the image"
105 @echo "TRELLIS_T3_VERSION : Override to use a specific branch/commit/tag/release to build the image"
pierventre83611422020-08-14 22:53:15 +0200106 @echo "UP4_VERSION : Override to use a specific branch/commit/tag/release to build the image"
pierventre83611422020-08-14 22:53:15 +0200107 @echo "FABRIC_TNA_VERSION : Override to use a specific branch/commit/tag/release to build the image"
pierventre2c7a4db2020-06-26 21:24:00 +0200108 @echo ""
pierventredd900102020-11-06 19:23:41 +0100109 @echo "'Makefile.vars.stable' defines the stable values for '*_VERSION' variables".
110 @echo "'Makefile.vars.master' defines the tip values for '*_VERSION' variables".
pierventref33fc112020-07-30 12:55:54 +0200111 @echo ""
pierventre2c7a4db2020-06-26 21:24:00 +0200112
113## Make targets
114
pierventre83611422020-08-14 22:53:15 +0200115check-scripts: ## : Provides warnings and suggestions for bash/sh shell scripts
116 # Fail if any of these files have warnings, exclude sed replacement warnings
117 docker run --rm -v "${PWD}:/mnt" ${SHELLCHECK_IMAGE} *.sh -e SC2001
118
pierventre16709162020-07-16 20:48:24 +0200119mvn_settings.xml: mvn_settings.sh ## : Builds mvn_settings file for proxy
120 @./$<
121
122local-apps: ## : Creates the folder that will host the oar file
123 mkdir -p ${LOCAL_APPS}/
124
125trellis-control: ## : Checkout trellis-control code
126 # Clones trellis-control if it does not exist
127 if [ ! -d "trellis-control" ]; then \
pierventre83611422020-08-14 22:53:15 +0200128 git clone ${TRELLIS_CONTROL_REPO}; \
pierventre16709162020-07-16 20:48:24 +0200129 fi
pierventre83611422020-08-14 22:53:15 +0200130
131 # Pending changes - do not proceed
132 @modified=$$(cd ${TRELLIS_CONTROL_ROOT} && git status --porcelain); \
133 if [ ! -z "$${modified}" ]; then \
134 echo "Unable to checkout, you have pending changes in trellis-control repository"; \
135 exit 1; \
136 fi
137
pierventre3b5f9f12020-10-22 16:24:34 +0200138 # Updates the repo and avoids any stale branches
139 cd ${TRELLIS_CONTROL_ROOT} && git remote update
140
pierventre0b6a9c32020-10-02 11:32:54 +0200141 # Try the git checkout first otherwise we download the review
pierventre3b5f9f12020-10-22 16:24:34 +0200142 if ! (cd ${TRELLIS_CONTROL_ROOT} && (git checkout origin/${TRELLIS_CONTROL_VERSION} || git checkout ${TRELLIS_CONTROL_VERSION})); then \
pierventre83611422020-08-14 22:53:15 +0200143 if ! (cd ${TRELLIS_CONTROL_ROOT} && git fetch ${TRELLIS_CONTROL_REPO} ${TRELLIS_CONTROL_VERSION} && git checkout FETCH_HEAD); then \
144 echo "Unable to fetch the changes from the trellis-control repository"; \
145 fi \
146 fi
pierventre16709162020-07-16 20:48:24 +0200147
Daniele Morof969c742022-01-03 22:01:00 +0100148trellis-control-build: mvn_settings.xml .onos-publish-local local-apps trellis-control ## : Builds trellis-control using local app or mvn
pierventre83611422020-08-14 22:53:15 +0200149 @./app-build.sh $@
150
pierventre16709162020-07-16 20:48:24 +0200151trellis-t3: ## : Checkout trellis-t3 code
152 if [ ! -d "trellis-t3" ]; then \
pierventre83611422020-08-14 22:53:15 +0200153 git clone ${TRELLIS_T3_REPO}; \
pierventre16709162020-07-16 20:48:24 +0200154 fi
pierventre83611422020-08-14 22:53:15 +0200155
156 @modified=$$(cd ${TRELLIS_T3_ROOT} && git status --porcelain); \
157 if [ ! -z "$${modified}" ]; then \
158 echo "Unable to checkout, you have pending changes in trellis-t3 repository"; \
159 exit 1; \
160 fi
161
pierventre3b5f9f12020-10-22 16:24:34 +0200162 cd ${TRELLIS_T3_ROOT} && git remote update
163
164 if ! (cd ${TRELLIS_T3_ROOT} && (git checkout origin/${TRELLIS_T3_VERSION} || git checkout ${TRELLIS_T3_VERSION})); then \
pierventre83611422020-08-14 22:53:15 +0200165 if ! (cd ${TRELLIS_T3_ROOT} && git fetch ${TRELLIS_T3_REPO} ${TRELLIS_T3_VERSION} && git checkout FETCH_HEAD); then \
166 echo "Unable to fetch the changes from the trellis-t3 repository"; \
167 fi \
168 fi
pierventre16709162020-07-16 20:48:24 +0200169
Daniele Morof969c742022-01-03 22:01:00 +0100170trellis-t3-build: mvn_settings.xml .onos-publish-local local-apps trellis-t3 ## : Builds trellis-t3 using local app or mvn
pierventre83611422020-08-14 22:53:15 +0200171 @./app-build.sh $@
172
pierventre16709162020-07-16 20:48:24 +0200173up4: ## : Checkout up4 code
174 if [ ! -d "up4" ]; then \
175 git clone ${UP4_REPO}; \
176 fi
pierventre83611422020-08-14 22:53:15 +0200177
178 @modified=$$(cd ${UP4_ROOT} && git status --porcelain); \
179 if [ ! -z "$${modified}" ]; then \
180 echo "Unable to checkout, you have pending changes in up4 repository"; \
181 exit 1; \
182 fi
183
pierventre3b5f9f12020-10-22 16:24:34 +0200184 cd ${UP4_ROOT} && git remote update
185
186 if ! (cd ${UP4_ROOT} && (git checkout origin/${UP4_VERSION} || git checkout ${UP4_VERSION})); then \
pierventre83611422020-08-14 22:53:15 +0200187 if ! (cd ${UP4_ROOT} && git fetch ${UP4_REPO} ${UP4_VERSION} && git checkout FETCH_HEAD); then \
188 echo "Unable to fetch the changes from the up4 repository"; \
189 exit 1; \
190 fi \
191 fi
pierventre16709162020-07-16 20:48:24 +0200192
Daniele Morof969c742022-01-03 22:01:00 +0100193up4-build: mvn_settings.xml .onos-publish-local local-apps up4 ## : Builds up4 using local app
pierventre83611422020-08-14 22:53:15 +0200194 @./app-build.sh $@
195
pierventref33fc112020-07-30 12:55:54 +0200196fabric-tna: ## : Checkout fabric-tna code
197 if [ ! -d "fabric-tna" ]; then \
198 git clone ${FABRIC_TNA_REPO}; \
199 fi
pierventre83611422020-08-14 22:53:15 +0200200
201 @modified=$$(cd ${FABRIC_TNA_ROOT} && git status --porcelain); \
202 if [ ! -z "$${modified}" ]; then \
203 echo "Unable to checkout, you have pending changes in fabric-tna repository"; \
204 exit 1; \
205 fi
206
pierventre3b5f9f12020-10-22 16:24:34 +0200207 cd ${FABRIC_TNA_ROOT} && git remote update
208
209 if ! (cd ${FABRIC_TNA_ROOT} && (git checkout origin/${FABRIC_TNA_VERSION} || git checkout ${FABRIC_TNA_VERSION})); then \
pierventre83611422020-08-14 22:53:15 +0200210 if ! (cd ${FABRIC_TNA_ROOT} && git fetch ${FABRIC_TNA_REPO} ${FABRIC_TNA_VERSION} && git checkout FETCH_HEAD); then \
211 echo "Unable to fetch the changes from the fabric-tna repository"; \
212 exit 1; \
213 fi \
214 fi
pierventref33fc112020-07-30 12:55:54 +0200215
Daniele Morof969c742022-01-03 22:01:00 +0100216fabric-tna-build: mvn_settings.xml .onos-publish-local local-apps fabric-tna ## : Builds fabric-tna using local app
pierventre83611422020-08-14 22:53:15 +0200217 @./app-build.sh $@
218
Charles Chanc11ecd62022-02-07 15:46:48 -0800219## : downloads commits, files, and refs from remotes. Intentionally leave out t3.
220apps: trellis-control up4 fabric-tna
pierventre83611422020-08-14 22:53:15 +0200221
Charles Chanc11ecd62022-02-07 15:46:48 -0800222## : Build the onos apps. Intentionally leave out t3.
223apps-build: trellis-control-build up4-build fabric-tna-build
pierventref33fc112020-07-30 12:55:54 +0200224
pierventre2c7a4db2020-06-26 21:24:00 +0200225onos: ## : Checkout onos code
pierventre2c7a4db2020-06-26 21:24:00 +0200226 if [ ! -d "onos" ]; then \
227 git clone https://gerrit.onosproject.org/onos; \
228 fi
pierventre2c7a4db2020-06-26 21:24:00 +0200229
pierventre83611422020-08-14 22:53:15 +0200230 @modified=$$(cd ${ONOS_ROOT} && git status --porcelain); \
231 if [ ! -z "$${modified}" ]; then \
232 echo "Unable to checkout, you have pending changes in onos repository"; \
233 exit 1; \
234 fi
235
pierventre3b5f9f12020-10-22 16:24:34 +0200236 cd ${ONOS_ROOT} && git remote update
237
pierventre83611422020-08-14 22:53:15 +0200238 # In case of failure, we do not proceed because we cannot build with mvn
pierventre3b5f9f12020-10-22 16:24:34 +0200239 if ! (cd ${ONOS_ROOT} && (git checkout origin/${ONOS_VERSION} || git checkout ${ONOS_VERSION})); then \
pierventre83611422020-08-14 22:53:15 +0200240 if ! (cd ${ONOS_ROOT} && git fetch ${ONOS_REPO} ${ONOS_VERSION} && git checkout FETCH_HEAD); then \
241 echo "Unable to fetch the changes from the onos repository"; \
242 exit 1; \
243 fi \
244 fi
pierventred9cb7292020-07-31 00:01:47 +0200245
Carmelo Cascone68528e82022-02-04 18:42:34 -0800246onos-build: onos ## : Builds the onos-base docker image
Daniele Morof969c742022-01-03 22:01:00 +0100247 rm -rf .onos-publish-local
pierventre7fdd3602021-05-05 10:54:38 +0200248ifeq ($(PROFILER),true)
249 # profiler enabled
250 cd ${ONOS_ROOT} && \
251 . tools/build/envDefaults && \
Carmelo Cascone68528e82022-02-04 18:42:34 -0800252 docker build . -t ${ONOS_BASE_IMAGENAME} \
pierventre7fdd3602021-05-05 10:54:38 +0200253 --build-arg PROFILE=${ONOS_PROFILE} \
254 --build-arg ONOS_YOURKIT=${ONOS_YOURKIT} \
255 -f tools/dev/Dockerfile-yourkit
Daniele Morod49dd092021-06-04 17:56:32 +0200256else ifeq ($(USE_ONOS_BAZEL_OUTPUT),true)
257 # profiler not enabled, using local bazel output
258 cd ${ONOS_ROOT} && \
259 . tools/build/envDefaults && \
260 bazel build onos --define profile=${ONOS_PROFILE}
Carmelo Cascone68528e82022-02-04 18:42:34 -0800261 docker build -t ${ONOS_BASE_IMAGENAME} -f ${ONOS_ROOT}/tools/dev/Dockerfile-bazel ${ONOS_ROOT}/bazel-bin
pierventre7fdd3602021-05-05 10:54:38 +0200262else
263 # profiler not enabled
pierventre2c7a4db2020-06-26 21:24:00 +0200264 cd ${ONOS_ROOT} && \
265 . tools/build/envDefaults && \
Carmelo Cascone68528e82022-02-04 18:42:34 -0800266 docker build . -t ${ONOS_BASE_IMAGENAME} \
pierventre2c7a4db2020-06-26 21:24:00 +0200267 --build-arg PROFILE=${ONOS_PROFILE}
pierventre7fdd3602021-05-05 10:54:38 +0200268endif
Daniele Morof969c742022-01-03 22:01:00 +0100269 make .onos-publish-local
270
271.onos-publish-local:
272ifeq ($(USE_LOCAL_SNAPSHOT_ARTIFACTS),true)
273 @# TODO: build custom docker container with required dependencies instead of installing via publish-local script
Carmelo Cascone68528e82022-02-04 18:42:34 -0800274 docker run --rm --entrypoint bash -it -v $(shell pwd)/:/src \
275 -e ONOS_ROOT=/src/onos -e MAVEN_REPO=/src/.m2/repository -w /src \
Daniele Morof969c742022-01-03 22:01:00 +0100276 bitnami/minideb:buster ./publish-local.sh
277endif
278 touch .onos-publish-local
pierventre2c7a4db2020-06-26 21:24:00 +0200279
Carmelo Cascone68528e82022-02-04 18:42:34 -0800280package: ## : Builds the sdfabric-onos docker image
pierventre16709162020-07-16 20:48:24 +0200281 docker build $(DOCKER_BUILD_ARGS) \
Carmelo Cascone68528e82022-02-04 18:42:34 -0800282 -t ${FINAL_IMAGENAME} \
pierventre7fdd3602021-05-05 10:54:38 +0200283 --build-arg DOCKER_TAG="${DOCKER_TAG}${DOCKER_TAG_PROFILER}${DOCKER_TAG_BUILD_DATE}" \
pierventre16709162020-07-16 20:48:24 +0200284 --build-arg LOCAL_APPS=${LOCAL_APPS} \
285 --build-arg KARAF_VERSION=${KARAF_VERSION} \
pierventre7fdd3602021-05-05 10:54:38 +0200286 --build-arg org_label_schema_version="${DOCKER_TAG}${DOCKER_TAG_PROFILER}${DOCKER_TAG_BUILD_DATE}" \
pierventre16709162020-07-16 20:48:24 +0200287 --build-arg org_label_schema_vcs_url="${DOCKER_LABEL_VCS_URL}" \
288 --build-arg org_label_schema_vcs_ref="${DOCKER_LABEL_VCS_REF}" \
289 --build-arg org_label_schema_build_date="${DOCKER_LABEL_BUILD_DATE}" \
pierventredd900102020-11-06 19:23:41 +0100290 --build-arg org_onosproject_onos_version="$(shell cd ${ONOS_ROOT} && git rev-parse HEAD)"\
291 --build-arg org_onosproject_trellis_control_version="$(shell cd ${TRELLIS_CONTROL_ROOT} && git rev-parse HEAD)"\
pierventredd900102020-11-06 19:23:41 +0100292 --build-arg org_omecproject_up4_version="$(shell cd ${UP4_ROOT} && git rev-parse HEAD)"\
pierventredd900102020-11-06 19:23:41 +0100293 --build-arg org_stratumproject_fabric_tna_version="$(shell cd ${FABRIC_TNA_ROOT} && git rev-parse HEAD)"\
Carmelo Cascone68528e82022-02-04 18:42:34 -0800294 -f Dockerfile .
pierventre16709162020-07-16 20:48:24 +0200295
Carmelo Cascone68528e82022-02-04 18:42:34 -0800296onos-push: ## : Pushes the onos-base docker image to an external repository
297 docker push ${ONOS_BASE_IMAGENAME}
pierventre2c7a4db2020-06-26 21:24:00 +0200298
Carmelo Cascone68528e82022-02-04 18:42:34 -0800299push: ## : Pushes the sdfabric-onos docker image to an external repository
300 docker push ${FINAL_IMAGENAME}
pierventre2c7a4db2020-06-26 21:24:00 +0200301
pierventref03097a2020-07-15 18:49:05 +0200302# Used for CI job
Carmelo Cascone68528e82022-02-04 18:42:34 -0800303docker-build: check-scripts onos-build apps-build package ## : Builds the sdfabric-onos image
pierventre2c7a4db2020-06-26 21:24:00 +0200304
pierventref03097a2020-07-15 18:49:05 +0200305# User for CD job
Carmelo Cascone68528e82022-02-04 18:42:34 -0800306docker-push: push ## : Pushes the sdfabric-onos Docker image
pierventref03097a2020-07-15 18:49:05 +0200307
pierventre16709162020-07-16 20:48:24 +0200308clean: ## : Deletes any locally copied files or artifacts
309 rm -rf ${ONOS_ROOT}
310 rm -rf ${TRELLIS_CONTROL_ROOT}
311 rm -rf ${TRELLIS_T3_ROOT}
pierventre16709162020-07-16 20:48:24 +0200312 rm -rf ${UP4_ROOT}
pierventref33fc112020-07-30 12:55:54 +0200313 rm -rf ${FABRIC_TNA_ROOT}
pierventre16709162020-07-16 20:48:24 +0200314 rm -rf ${LOCAL_APPS}
315 rm -rf .m2
316 rm -rf mvn_settings.xml
Daniele Morof969c742022-01-03 22:01:00 +0100317 rm -rf .onos-publish-local
pierventre2c7a4db2020-06-26 21:24:00 +0200318
319# end file