From 07574f363f72ea6fddfcdc6edda56e16ea50827c Mon Sep 17 00:00:00 2001 From: Bruno Willenborg Date: Thu, 20 Apr 2023 11:51:42 +0200 Subject: [PATCH 01/10] Added workflow for devel images --- .github/workflows/devel.yml | 79 +++++++++++++++++++++++++++++++++++++ README.md | 3 +- 2 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/devel.yml diff --git a/.github/workflows/devel.yml b/.github/workflows/devel.yml new file mode 100644 index 0000000..cf6e36d --- /dev/null +++ b/.github/workflows/devel.yml @@ -0,0 +1,79 @@ +name: Build/push devel image + +on: + push: + branches: [devel] + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-and-push-images: + runs-on: ubuntu-latest + strategy: + matrix: + context: ['sddi-base', 'sddi', 'sddi-social'] + fail-fast: true + max-parallel: 1 + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Log in to the Github Container Registry + uses: docker/login-action@v2 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for devel docker image + id: meta + uses: docker/metadata-action@v4 + with: + images: | + ${{ env.REGISTRY }}/tum-gis/ckan-${{ matrix.context }} + tags: | + type=ref,enable=true,event=branch + labels: | + maintainer=Chair of Geoinformatics, Technical University of Munich (TUM) + org.opencontainers.image.vendor=Chair of Geoinformatics, Technical University of Munich (TUM) + org.opencontainers.image.title=ckan-sddi-docker + + - name: Build and publish ${{ env.REGISTRY }}/tum-gis/ckan-${{ matrix.context }}:devel + uses: docker/build-push-action@v4 + with: + context: ${{ matrix.context }} + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + build-args: | + BASEIMAGE_VERSION=devel + + - name: Extract metadata (tags, labels) for devel-debug docker image + id: meta-debug + uses: docker/metadata-action@v4 + with: + images: | + ${{ env.REGISTRY }}/tum-gis/ckan-${{ matrix.context }} + tags: | + type=ref,enable=true,event=branch,suffix=-debug + labels: | + maintainer=Chair of Geoinformatics, Technical University of Munich (TUM) + org.opencontainers.image.vendor=Chair of Geoinformatics, Technical University of Munich (TUM) + org.opencontainers.image.title=ckan-sddi-docker + + - name: Build and publish ${{ env.REGISTRY }}/tum-gis/ckan-${{ matrix.context }}:devel-debug + uses: docker/build-push-action@v4 + with: + context: ${{ matrix.context }} + file: ${{ matrix.context }}/Dockerfile.debug + push: true + tags: ${{ steps.meta-debug.outputs.tags }} + labels: ${{ steps.meta-debug.outputs.labels }} + build-args: | + BASEIMAGE_VERSION=devel diff --git a/README.md b/README.md index 0f70990..030a3bc 100644 --- a/README.md +++ b/README.md @@ -89,10 +89,11 @@ The images in this repo are versioned and tagged according to the [releases](https://github.com/tum-gis/ckan-docker/releases) of this repository. The `latest` tag points to the latest release number. The `edge` version is built from the latest commit to the `main` branch of this repo. +For development purposes the `devel` images, which are build from the latest commit to the `devel` branch are published. The CKAN and CKAN extension versions used for each image are listed in the table below. For development and debugging we provide a *debug* version for each image version. -These images are indicated by the `-debug` suffix on the image tag, e.g. `latest-debug` or `0.0.6-debug`. +These images are indicated by the `-debug` suffix on the image tag, e.g. `latest-debug`, `0.0.6-debug`, `edge-debug` or `devel-debug`. The debug images have the FLASK debug toolbar enabled and all required debugging dependencies installed. Read more on CKAN's debug mode in the [official docs](https://docs.ckan.org/en/latest/maintaining/configuration.html#debug). From 1ce956086d012360bd5b5bdb7d7d061a74afa661 Mon Sep 17 00:00:00 2001 From: Bruno Willenborg Date: Thu, 20 Apr 2023 12:00:10 +0200 Subject: [PATCH 02/10] Update docs --- CHANGELOG.md | 2 ++ README.md | 1 + 2 files changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bca7b58..73058d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ For releases `< 1.0.0` minor version steps may indicate breaking changes too. - Added *debug* images with CKAN FLASK Debug Toolbar enabled, see [here](https://github.com/tum-gis/ckan-docker#1234-image-versioning) +- Added *devel* images built form latest commit to `devel` branch. + ### Changed ### Removed diff --git a/README.md b/README.md index 030a3bc..f3462d1 100644 --- a/README.md +++ b/README.md @@ -90,6 +90,7 @@ The images in this repo are versioned and tagged according to the The `latest` tag points to the latest release number. The `edge` version is built from the latest commit to the `main` branch of this repo. For development purposes the `devel` images, which are build from the latest commit to the `devel` branch are published. +The `devel` images are used for testing and may contain errors. The CKAN and CKAN extension versions used for each image are listed in the table below. For development and debugging we provide a *debug* version for each image version. From e88b165867a8d4d2fcefdc72500389b70c39a2b1 Mon Sep 17 00:00:00 2001 From: Bruno Willenborg Date: Mon, 24 Apr 2023 11:03:48 +0200 Subject: [PATCH 03/10] update scheming (cherry picked from commit c3fe59ed46344a2e0ddffd82797fa0c4f8b29e8d) --- sddi-base/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sddi-base/Dockerfile b/sddi-base/Dockerfile index 602c692..dfac28e 100644 --- a/sddi-base/Dockerfile +++ b/sddi-base/Dockerfile @@ -50,7 +50,7 @@ RUN set -ex && \ ls -lah /wheels # ckanext-scheming ############################################################ -ARG CKANEXT_SCHEMING_VERSION="scheming_all_plugins" +ARG CKANEXT_SCHEMING_VERSION="scheming-spatial" ENV CKANEXT_SCHEMING_VERSION=${CKANEXT_SCHEMING_VERSION} ENV CKANEXT_SCHEMING_GITHUB_URL="https://github.com/MarijaKnezevic/ckanext-scheming" From 49f9aba1be0ba108bc2022df376a88c5222d6a9e Mon Sep 17 00:00:00 2001 From: Bruno Willenborg Date: Mon, 24 Apr 2023 14:50:01 +0200 Subject: [PATCH 04/10] fix naming conflict --- sddi/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sddi/Dockerfile b/sddi/Dockerfile index 15fa69b..411fd5e 100644 --- a/sddi/Dockerfile +++ b/sddi/Dockerfile @@ -35,7 +35,7 @@ RUN set -ex && \ git+${CKANEXT_DCAT_GITHUB_URL}.git@${CKANEXT_DCAT_VERSION}#egg=ckanext-dcat # ckanext-restricted ########################################################## -ARG CKANEXT_RESTRICTED_VERSION="02e7e14" +ARG CKANEXT_RESTRICTED_VERSION="remove-user-create" ENV CKANEXT_RESTRICTED_VERSION=${CKANEXT_RESTRICTED_VERSION} ENV CKANEXT_RESTRICTED_GITHUB_URL="https://github.com/MarijaKnezevic/ckanext-restricted" From b9a36622928672b65c655830d3a9c2ae29d58987 Mon Sep 17 00:00:00 2001 From: Marija <93824048+MarijaKnezevic@users.noreply.github.com> Date: Tue, 25 Apr 2023 17:45:53 +0200 Subject: [PATCH 05/10] Scheming update --- sddi-base/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sddi-base/Dockerfile b/sddi-base/Dockerfile index dfac28e..602c692 100644 --- a/sddi-base/Dockerfile +++ b/sddi-base/Dockerfile @@ -50,7 +50,7 @@ RUN set -ex && \ ls -lah /wheels # ckanext-scheming ############################################################ -ARG CKANEXT_SCHEMING_VERSION="scheming-spatial" +ARG CKANEXT_SCHEMING_VERSION="scheming_all_plugins" ENV CKANEXT_SCHEMING_VERSION=${CKANEXT_SCHEMING_VERSION} ENV CKANEXT_SCHEMING_GITHUB_URL="https://github.com/MarijaKnezevic/ckanext-scheming" From 061841b0483a3161cb26e5054d769096aaee50fb Mon Sep 17 00:00:00 2001 From: Bruno Willenborg Date: Fri, 28 Apr 2023 17:46:20 +0200 Subject: [PATCH 06/10] Add DOI and copy Contrib, research --- README.md | 146 ++++++++++++++++++++++++-- docs/img/bayernInnovativ_logo_h50.png | Bin 0 -> 11160 bytes docs/img/bsd_logo_h50.png | Bin 0 -> 24312 bytes docs/img/tum_logo_h50.png | Bin 0 -> 1075 bytes docs/img/twinBy_logo_h50.png | Bin 0 -> 7857 bytes 5 files changed, 137 insertions(+), 9 deletions(-) create mode 100644 docs/img/bayernInnovativ_logo_h50.png create mode 100644 docs/img/bsd_logo_h50.png create mode 100644 docs/img/tum_logo_h50.png create mode 100644 docs/img/twinBy_logo_h50.png diff --git a/README.md b/README.md index f3462d1..f7ae0c9 100644 --- a/README.md +++ b/README.md @@ -38,8 +38,12 @@ See [packages](https://github.com/orgs/tum-gis/packages?repo_name=ckan-docker) f - [:book: Configuration an documentation](#book-configuration-an-documentation) - [:hammer\_and\_wrench: Contributing](#hammer_and_wrench-contributing) - [Contributors](#contributors) + - [Github contributors to this repo](#github-contributors-to-this-repo) +- [:mortar\_board: Research](#mortar_board-research) + - [Publications](#publications) + - [Cite this repository](#cite-this-repository) - [:handshake: Thanks](#handshake-thanks) -- [:hammer\_and\_wrench: Build images](#hammer_and_wrench-build-images) +- [:memo: License](#memo-license) ## :inbox_tray: Image flavor overview @@ -160,19 +164,143 @@ Bug fixes, issue reports and contributions are greatly appreciated. ### Contributors +[Marija Knezevic](https://www.asg.ed.tum.de/en/gis/our-team/staff/marija-knezevic/) and +[Bruno Willenborg](https://www.asg.ed.tum.de/en/gis/our-team/staff/bruno-willenborg/) +at Technical University of Munich, Chair of Geoinformatics +realized the current SDDI CKAN [Docker images](https://github.com/tum-gis/ckan-docker) +and [Helm chart](https://github.com/tum-gis/sddi-ckan-k8s) and updated the +CKAN SDDI extensions ([ckanext-grouphierarchy](https://github.com/tum-gis/ckanext-grouphierarchy-sddi), +[ckanext-relation](https://github.com/tum-gis/ckanext-relation-sddi)) initially implemented by +[Mandana Moshrefzadeh](https://www.linkedin.com/in/mandana-moshrefzadeh-a4666454) +and [Wolfgang Deigele](https://www.linkedin.com/in/wolfgang-deigele-329673189). + +The core concepts, documentation, and [initial implementation](https://github.com/tum-gis/SDDI-CKAN-Docker) +for SDDI were realized at Technical University of Munich, Chair of Geoinformatics by: + +- [Mandana Moshrefzadeh](https://www.linkedin.com/in/mandana-moshrefzadeh-a4666454): Landeshauptstadt München, Kommunalreferat – GeodatenService +- [Prof. Thomas H. Kolbe](https://www.asg.ed.tum.de/gis/unser-team/lehrstuhlangehoerige/prof-thomas-h-kolbe/): + Technical University of Munich, Chair of Geoinformatics +- [Dr. Andreas Donaubauer](https://www.asg.ed.tum.de/gis/unser-team/lehrstuhlangehoerige/dr-andreas-donaubauer/): + Technical University of Munich, Chair of Geoinformatics +- [Marija Knezevic](https://www.asg.ed.tum.de/gis/unser-team/lehrstuhlangehoerige/marija-knezevic/): + Technical University of Munich, Chair of Geoinformatics +- [Bruno Willenborg](https://www.asg.ed.tum.de/gis/unser-team/lehrstuhlangehoerige/bruno-willenborg/): + Technical University of Munich, Chair of Geoinformatics +- [Kanishk Chaturvedi](https://www.linkedin.com/in/dr-kanishk-chaturvedi), Software AG +- [Son H. Nguyen](https://www.asg.ed.tum.de/en/gis/our-team/staff/son-h-nguyen/), Technical University of Munich, Chair of Geoinformatics +- [Wolfgang Deigele](https://www.linkedin.com/in/wolfgang-deigele-329673189), ESRI Deutschland + +

+ + Technical University of Munich, Chair of Geoinformatics + +

+ +#### Github contributors to this repo + +## :mortar_board: Research + +An overview of the Smart District Data Infrastructure (SDDI) Project is available +at the Chair of Geoinformatics, Technical University of Munich +[homepage](https://www.asg.ed.tum.de/gis) +in [english](https://www.asg.ed.tum.de/en/gis/projects/smart-district-data-infrastructure/) +and [german](https://www.asg.ed.tum.de/gis/projekte/sddi/). + +### Publications + +The full list of SDDI related publications is available +[here](https://www.asg.ed.tum.de/gis/projekte/sddi/#c11942). Some key publications +are listed below: + +- [**Knezevic et al. (2022)**](https://mediatum.ub.tum.de/node?id=1689713): + *Managing Urban Digital Twins with an Extended Catalog Service*, + Proceedings of the 7th International Smart Data and Smart Cities (SDSC) Conference 2022, ISPRS Annals of Photogrammetry, Remote Sensing and Spatial Information Sciences, + [PDF download / DOI](https://doi.org/10.5194/isprs-annals-X-4-W3-2022-119-2022). + +- [**Deigele, W. et al. (2021)**](https://mediatum.ub.tum.de/node?id=1684529): + *Leitfaden – Geobasierter Digitaler Zwilling nach der SDDI-Methode*, + Ed.: Bayern Innovativ, ZD.B – Themenplattform Smart Cities and Regions. + +- [**Gackstetter, D. et al. (2021)**](https://mediatum.ub.tum.de/node?id=1636657): + *Smart Rural Areas Data Infrastructure (SRADI) – an information logistics framework for digital agriculture based on open standards*, + 41. GIL-Jahrestagung 2021 - Fokus: Informations- und Kommunikationstechnologie in kritischen Zeiten, Gesellschaft für Informatik e.V. (GI), [PDF download / DOI](https://dl.gi.de/bitstream/handle/20.500.12116/35656/GIL2021_Gackstetter_109-114.pdf?sequence=1&isAllowed=y). + +- [**Kolbe, T. H. et al. (2020)**](https://mediatum.ub.tum.de/node?id=1554725): + *The Data Integration Challenge in Smart City Projects*, + Chair of Geoinformatics, Technical University of Munich, + [PDF download / DOI](https://mediatum.ub.tum.de/doc/1554725/671062.pdf). + +- [**Moshrefzadeh, M. et al. (2020)**](https://mediatum.ub.tum.de/node?id=1540127): + *Towards a Distributed Digital Twin of the Agricultural Landscape*, + Journal of Digital Landscape Architecture (5), + [PDF download / DOI](https://gispoint.de/fileadmin/user_upload/paper_gis_open/DLA_2020/537690019.pdf). + +- [**Moshrefzadeh, M. et al. (2017)**](https://mediatum.ub.tum.de/node?id=1350813): + *Integrating and Managing the Information for Smart Sustainable Districts - The Smart District Data Infrastructure (SDDI)*, + In: Kolbe, Thomas H.; Bill, Ralf; Donaubauer, Andreas (Hrsg.): Geoinformationssysteme 2017 – Beiträge zur 4. Münchner GI-Runde. . Wichmann Verlag, + [PDF download / DOI](https://mediatum.ub.tum.de/download/1350813/1350813.pdf). + +- [**Moshrefzadeh, M. and T.H. Kolbe (2016)**](https://mediatum.ub.tum.de/node?id=1304877): + *Smart Data Infrastructure for Smart and Sustainable Cities*, + DDSS 2016, + [PDF download / DOI](https://mediatum.ub.tum.de/doc/1304877/797209.pdf). + +### Cite this repository + +To cite this repository, please use the DOI provided by [Zenodo](https://zenodo.org). +If you want to reference a specific release version of the software, click the badge +and navigate to the desired version on the page. + +[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.7784078.svg?style=flat-square)](https://doi.org/10.5281/zenodo.7784078) + ## :handshake: Thanks -- This repo is based on the CKAN - [Docker images](https://github.com/keitaroinc/docker-ckan) of - [Keitaro](https://github.com/keitaroinc). Many thank's for your great work! +We would like to thank following institutions and persons for their contributions +to the SDDI concepts, tools, documentations, education, and funding: + +- [ZD.B-Themenplattform Smart Cities and Regions](https://www.bayern-innovativ.de/de/netzwerke-und-thinknet/uebersicht-digitalisierung/digitales-planen-und-bauen-smart-cities-and-regions/seite/zd-b-themenplattform-smart-cities-and-regions): + Willi Steincke at [Bayern Innovativ GmbH](https://www.bayern-innovativ.de/de?gclid=Cj0KCQjwk7ugBhDIARIsAGuvgPZkLiU4AhX1Xz-07vLIt0vpixwjF1wCrHau3PkGEMyl2ZoU_pn1hPMaAnALEALw_wcB) + und [Lutz Morich](https://www.linkedin.com/in/lutz-morich-in), for funding and supporting the SDDI development for several years. + +- [Bayerisches Staatsministerium für Digitales](https://www.stmd.bayern.de/) for funding the + [project TwinBy](https://twinby.bayern) and Stefan Bobinger for many contributions to SDDI concepts and documentation. + +- [Digital Twin Munich / Digitaler Zwilling München](https://muenchen.digital/twin/), + [Connected Urban Twins (CUT) research project](https://www.connectedurbantwins.de/en/), + [SAVeNoW research project](https://savenow.de/en/), + [eit Climate-KIC](https://www.climate-kic.org/) (SDDI research project) + for funding the work on SDDI concepts and implementation. + +- [Tome Petrovski](https://github.com/TomeCirun) :raised_hands: for professional support + with CKAN and CKAN extension development. + +- [KEITARO](https://www.keitaro.com/) for their [CKAN Docker images](https://github.com/keitaroinc/docker-ckan) + and [CKAN Helm chart](https://github.com/keitaroinc/ckan-helm) that inspired this work. + +

+ + TwinBy + +
+
+ + Bayerische Staatsministerium für Digitales + +
+
+ + Bayern Innovativ GmbH + +

-## :hammer_and_wrench: Build images +## :memo: License -- Switch to the image folder, e.g. `cd sddi-base` -- Run `./build.sh` to the image. Run `./build.sh 2.9.7` to build* using - a specific CKAN version. -- Use `./build-push.sh` to build and push the image. +This Helm chart is distributed under the Apache License 2.0. See [LICENSE](LICENSE) for more information. diff --git a/docs/img/bayernInnovativ_logo_h50.png b/docs/img/bayernInnovativ_logo_h50.png new file mode 100644 index 0000000000000000000000000000000000000000..eee50db1e3e73743ea9651706c3fb7349825808a GIT binary patch literal 11160 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 qH{7wwa%c<95V9?>VmW@#GQ; literal 0 HcmV?d00001 diff --git a/docs/img/bsd_logo_h50.png b/docs/img/bsd_logo_h50.png new file mode 100644 index 0000000000000000000000000000000000000000..0bf373f52031f8cc73758c4ebf8564c583234b48 GIT binary patch literal 24312 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 literal 0 HcmV?d00001 diff --git a/docs/img/tum_logo_h50.png b/docs/img/tum_logo_h50.png new file mode 100644 index 0000000000000000000000000000000000000000..ba1bb0be8dd5cfdc7f0380b95e551ec62a7c5b4f GIT binary patch literal 1075 zcmeAS@N?(olHy`uVBq!ia0vp^2|#Sb!3HE3-@A7NNO2Z;L>4nJ@B!I;M;NDS^GP!> zFhBKlaSW-r^>((mzi^<)adkWGA06`@FO^kfS;5^a)y%!9Q|hRT@UJCbOy{~c zI$c#zU~5)X^a?oO61DJv-}Ym@c_tTI=O0{Q!`1WLXSu}}M@2E0VzKm#=l1?D{`b86 z{JXeicYb-@Q5f`HC~@|!nk+Q{D-WWt2MfM%vc=n^xU7V+GqLr&Fky4 z)l(;%+H4N2Sz{)_dP=l1cdFPOfyf9gf&cP{Q+m&&U2Zhp zc;r{g+B-}RZ;#GO*8aHS*PQdM=XYFx`fC|uKt|uGn@*w=Pfs#CUhh6dV_VP3HI+7t z+3K{n^{je*J)23Xi1SHG_=7^r`B8gw>>kH0E}E#i>&ASeSq;24jC}Rlv-Q@*tT=Pj ze506Nid91ON70qXU8jqPX*aUC7M#-CEg!X~reSO0LZP*NbAuOMIBdS@DsTV$1$|Lh z{zx&;Fm}+3_)ow{wI|FJK2&%G8tbNW0Z=5f`Nk4@qc z@pD$@&v-v=``agVuTSvbnY?N_;{~nC%Wj)rB;R7<^_hIau>Fm*Ja4J+g(VZ`-#V*c z6P+U$%C-CL?(!|h3F%E6{8wLAI<{E(LBhHnyR!n9U+MXMxHy|#fv4c`My3;`8y7C$ zY5Slh%En9fq+Ro>^9nVqH`!M&_kS$B)oVdoa%{-Hmpkj%3GZP!dZzYpjh)?u_{7?u zy{)z@tE3p}94{^9wm7?+c~LyOdii_D+aJWgrud}JYIr@bPfEj!y|X;4)FQ4^HeklO zV^`mrt$WP!Lh*WKdcL@f(hAp*S03LuzrJ&tZx?sUI!F3Xg2(&dnG9llQZkFA8F;Th zPk(V+?hL!|A*aXtR|^|V6?E8i(52x?Ev?h`;!*tTb&7ipMNuaAw$Qqi^`ysCBVRhNM^)yKKy4k&}2CFH2GVj z`5uKAE{*;>pRI^1J#+Yd#oP}iwf7m!cFtjVlEmb;?1Rx;PWS&Q9!19Gs^O6DFn(I{oPyy$G`ThrZ;(FF@vaf&rfjx5he#@t;c30iq%d!9Q)K9@*{gv5f zHQZsiV3Rf@{%CX8P9J_PjsseZD)T-ck#}12#xro`uP2&cIRzLOaQ^tt@Wcp~XTYA> b#PEaF+4!+kM^B&(0}yz+`njxgN@xNAwhY^^ literal 0 HcmV?d00001 diff --git a/docs/img/twinBy_logo_h50.png b/docs/img/twinBy_logo_h50.png new file mode 100644 index 0000000000000000000000000000000000000000..12d3622f48ffb38ecd0050d757d68c614dabb5e3 GIT binary patch literal 7857 zcmV;i9!}wjP)wyte0 zC<01N&-6Z%4j~Dh5PFN$5PC~5gd)Wd(oqNr0n#Ru_kQPl-+Rf+FhLE;{@g$AXULoP z?mhQ>&-tG3xo=dVS1T2Em9HX%hP|Bw&+61Fg<7LgXgXu4)e04TT2%guXKpa zdV2;v`+9)J_(yFg0Y|`i7*s)u&-5`b4Ys8e_p@hSeaw=)J3wRjiT)tO3NB59Cev&Ty z0XP;8?)XeovGI^~-*K!rz@FZ8cgRuxO=E(uSrtH$t?}&OAW`U5!HTI`d*7b4UeD|7 zy|?U>g30-ib?@PKjPVl@Oq~%>47AU6bDke$OTFCBp1}=pKbmC2?L7oK_pLT;h+Z8G zBRd5&m0IKRfbBq`cStrr(3aM4PskDeHRB4snJAM$^XlkK(~-lcX>8v8?HP6b#r^jS z$>RIAG5UvOQZQxkeeBshYDX+eOpAGejH>TV&gkPZ`qCH>k|7vG zpD?bEoBI%HlXcSrI?djs~5 zalif0g$Hf>ONQF^m*P_z^moZ1ds;R8fcx&Xr8|V6TB$LS-4t*g$^;6k3x6bsKQu`f zF}E%cbI70f6t8*6*L3suFM@^) z|3W|KWeSp;gEYEsN{#MjVQ6m-ra^wZ>s`a*uZbe-Xf$CAvZq#&oquLD*|I+`X^+kO zYa?)EwtC6^#tN>HHg6;)CJm@E8!4hmy0FK46Ic{EjfkSJbhDntb$zRQgB4byC=1mV zs3#L$Ys&x>XyG0z)FNfbhx{J1I)FJ&*pRxJvY^z$R5RI{@;Rh+V3S##1OLXR@rik% zaJ94sY&NsMl_H(DcAP6{0|+$u;Va$jktW)wn$6RCNVZXSX?uno=I^zqIq=Mvy4lZy zC5Xa3aG$h)?9b2~bZWPX8Q%%E1~fm1IiyW{$Olj*;5@$8M~(CrGYtlOuAlP?t}DeT z0rE772Z@=NUpKDsdBeEOhqCh%DLW(suu!l@chlR(rBmK8E%$xTuz0+?Y^135L=k_J z=D~avBu^rnuns=I(M1lY>wYwc|2Sj9G*Wkez}#}h_pyH7n{ODG`;4XWkzwBZpr@~O zQBS>KULXCab?1Rcth+Lvux#5z_xSp1O!vSMDi`3~fd-}-uaADgD6|=#t^vsut~$tb zf-Y(VQ8+iimgeYbKg^L0|1vT)sq&biwe}p#Y+pKq_TfvJJ4#{;*Py|C`0h)6^ho&P zEn~t=8Z)MAZQa}AbWa#JK_B%TjJ=nEmdoftZZyC{oclr_JsS3@M5?+0 z&^!Uo*R;=GjGfXLJ5f9E2IhyD0;Tu2r`PnLnhg6MwCy{k7M1Ze7|@(rK{5Y;`iODA z?O+jI?{-6=savFRe~6iT?dgq(vM<=?0~R&+(R2{9AZ0kp6bLOP!F&kg5zyN`~(8jiOe5lOS|HuF?R-3~%@den5NjvT3yyd!T@6p!J);9xQ0cSIxqU{tbIbI}FD? zq?YU9Gs@7ZVageb8v;$DHAKpA>+Zu)mlVO=tEN>tIGH(tMT}DMck9kH+Biq`v4ITW zo;Gh@!yKh%McEUEKWF|vo;JjhlI5PXY~3h+Pr$3$hKXJ$B10ey$mz8{T1yXo3uqqT z|0gZm5?L>2%V>lIhy8!E?#U+Fo$;Yz{zpW;!K6I%0VY%)=7T(!JFYDu@^8a}4}3M| z-ss=xJ8x+aFnzw$hCV#nv@Qbop+!JufRcrIsg#I7Owxuw2p|YlCs^eb(`p0SmS$lj zFqkI-odCAr9?VChmYC%pBh7KcnWhpK7-L!+0f)or5ti+{bl_?NOh-{RLu=`dOr*#o z12T!CviSRK2g?K1`fgg09snLu!6^}Vo}4^cY@C^L`YoV|;;8`?N_4q{?C1)|pnf46 zh`#T9z_$N1Igg|Mw27krDuHpQPNejV zC6Xxb5$nzj1Tg$C%)0leaCo40?MuBLBKqt@Juv8&0xJ=|SJL$x&NPZ3PdJ0b$g7C( zezdv4_LPf$8q=S(Diw1S)uwk4F^DeOAZUvd=qBn3L?4_*6g80Qp|d~wK{V^SFzJLv z@moO?PfeV(VJ9Nn#K6~ff!!p}yMp3KFnxyFLbZpfJfiebMnRN#x`NhE>{IaxYIQe| z)nrpW+3uuFK1SKs&q4tr^{r|#gM@v=f6LZpHfD1~gTn+?QIoiX1_*+9`UeX>x(ECD zL_haUp}uRn+%RZNij&hRQtudOPp$4J^8a|<>}OyI=z(~CZuihUZm=z-@>%o7`M3wl zid2yb-@{o%Js&Y4Lk^$_I{`|O3UqriO_*ozDV16}22)GIh}Av{l0oEP&{PxXn(FCz zvBr9}1zLXwn)}g56gLb+ViTN?zGqnUCH9BfE-7lpJQ_=P0=WiR*^^P^DuZ+!rxJmE z(X=+ar*JgJ5i6AiiL8VKn)kOKBGw~=YGn)a!W);x#+A2O9dZyEL>lXT&aQ3g#TmMOzoE&;;MWJx`~-mFe# zB7^92buUmPu?hv(2{4vMq)+l$R~*>^FaSpYMwmr^uoIDv$TUg%Q<3+@B0^nD+HO_) zQG*^n3=xfJ{-0Oxn^)WFG3sdqBI>olWf(>EI9+S)Gsu=whQnj1 zQv@t!dl#u@NgCik`k0rnSI{3RZhnF;@-e7P08CW=F zDSwwF3N-D?v>c`yAGanSU@d{mdo5h^)tdh@(4KY)a|yO3_?g=PP0BQCbYFn9SBlx_ zGCWW(0UY{Pp$|-V;yFn7=9Z#$HWeY8km*p0tW?l=!L&XWZ3F5Zsq$QnNQ=#9j~xM; zq7rm3WfD14f#^UjoVl4NTO9564jtL;wSlX!JGHO5KX!#OK&5jx`mz%Yr{9h zG{;3SyHFEdCV`0nFp2d}-O->4y;cxn#fF(wP8aEuqG&G_>26~?;Bmj zqwH+~DQvtJBD(FV7u%-}&ot>&gBsWmq(v!W&XQxUAfui)C(f5%Q)q=|JO`i+qPlXQ z?NBkO5!s112%`K|{9ZE6g&v#FUR{Q#K#%^4amJ-nM0#w*b1gNg<+T-4lC%cI7yw2K z@UCIW1Pb&ZWElE5>diJt&3UU=GaUt*bfiU*(Ho64Kx6%jErazL08^0E+ODFc4TU(t zkrX5{C>0z}+1SPPEbjM^X$Y_hM0>7pIphQN3`c7egoO}a)OT`2Y$@jh*>Rkzm4cOe zHoVU1AyOnY-3KX{v!OoWGwN^OlB?*BuW7Q5|6%K{Ea~llnC1=Bw6@*=6`3Y)#?b_` z<0JwQ)M`=%USs6%A=7Z|MWX6UlKVr64e%%XX>FLa zCs$uVY|SLmg(E7~+l8?HjvX!xu^sv;P@}(9dKcGenI;ujY8K6)!~p~bHt;Y-k5+UZ zUcI+8<7w3}a)9{0PRPaXv>!M7u-s~4aQ;DE`t&4oFhb^1$XH9o@x8?Ak>!M#0&cD=d zGYv+7gNgg;xg5T)HLdY(TQ2vKX-$YlJQS5T0 z)3B6DeypVuL7S?vdH1np)Z?DM*BO1Je-o&^L-Y8aG#<4i@1O?0ds{#AQ#Xq@^ks8K zkzkRS$!%};t1`_%lT9>4JvTU#A|^b`IVduZA8(lRvcXNNYg|qn{MGtfhlQq;-xry~ z4~)n|hK^=YL!h=CG6yKenG$>kMjqjZMCS5O*mvyJs)Dbf0x8o>N`J-s=7fp&(*5^G zP}3To$udnRzE4A@>7icjNr|v|aKvH$>5v@<+|7w=$g~H;GcI8+%=w;KP_0s?=~#WX z_o43_aL)to2PcjD!!xf8HSf+DpxVt!8xpGH_|Z}kY8e0< zW=c*|t5j}%ab3^?0|FFLaSNWyt8nmHWwp+{iw=IyqJ&oi{qdT=?V6@kDisE!v0K{N z%F^7Q9sCh`E_Px3^8x<8^5?t){CpM5zu!LnXr+VCz2M+?<>v2F1_d_%9>isCuK-^k zMf`?slaE$8`0R7_d}i6zI*UD|r!qLG8MMH_07X*P$&Ii%kLKKQ_{^c;;A=rs(lxWq zen&>>)oRRzITOC$9tfK>B51)uK?-|#RNt&~^^WXw4Qx#}gOf&9c};ctsgjhP`wnUr z%#C{}i2R4OCBL-!t1k+Unfj1H14A-u@Qbgzt=atamFatJdh(@8?cwg(wtn&B89?B~ z&R_H#*~S-DJDoo@@ce@K<*x*eP&Q?YJK^0((3d7kd)3okk9 zZ6Tq(f`bBE)(-Gjq#euO1e?#*@qE^)qLiSZ*6o8v1jK3&x$|t5<1*&LoEx_74DzGE zz*@K`C@@eF7CEb5@fEJI;BUz`*GJ-@fFc5(zi}m(X7iy~tFLRi`5%Vuz zvF2TWKi_LI8IJU)dDm=C{^w1`3E*=eB30m(dF znkGF*PT}aY-WD3(1CC%>OxZeb$+DN=0Nj&b>2T17xgDvw3;lh6kDxX2MOQg~?Uo(B zvt#FvoVzG~R2)&hG-4Ml8AZN%ix|cJupzwhjdi8?}Xo^`s1|16X1fv1ga8T>Bn# zicZ%R5wv+vimj}H;{;$izKH1OXh~%O)^;`Y{~t6b%ckhL3!a)Wb&3M@3Vx6e1ftK3 z>5A}KbM8M~QFFfVa#K^`m8Pa2&RzLQZ!q4{dQWP0l!c!gj_Z}#|E@BvxQ65BE>3uv0Q1!8bY0*B*Fo320=NxHdxEJv z@MkI;oyfXbvGX30*C$XT`$3f2(x;a>t^OWUYSSIoTz-^pr6n~pcUDOqfmX|NyEBh2 zld|*|&mP+g8brv>wA_WIwH!yA=lT^L{U&Va~aWm%eztn$G;@@9#l$`7HJi+Ak#l7A#%yMu4Bcd{1@Fxyozpk%Je;FB=2EsWx&yUaY@tvDyDBsL&1u4NgJ&6ZLgD zT2gfuREMG+6&?HFp3Gyb%IY}|bU}YVG;{h?#nROqKE`~wzG?R%8)yK4mC#00j~DC& zuxi;M>HipLiaGNZKGh5w?Qvnk%5kFV_L6)>0o>(>(yDywPPmICT27Z-$WtqW6b6&| zPp2=`T>@z34xV3`xMhME#GW0UY0P1>V&)Db?u;V|h(KIlv~1Nlil#dXuW(J`bC=Cl`yEP|v;Rw=1-2J7X?~qf-_>{K48^LA zN#7z{2((57FM&8hMvsh#-c;f|MAmuhwTZZaXldSC)(4c3KkiG`fuQL_gD9DmBlMax%@D;2(DVkUBS z%mYDzEj6)Y=n>7b;IM5J;T!<^e#d@2K+_ux-Hw%BDuRKiZ&Z|rlSpa8yjl5WSt_MU z0cY(>&x;qbkK?xO&xnG;Y%gf6pCUT|TChuV%}#B|$&}r9{a8_dRhDVQU@dF96C$L5 zKQI_gJxC$pnhOdhwJPkWNVcWotKn;x8yb4{2Veu&W%k zG%xc5WmBq{P0Ti<$^6HYKi6D9K*6?+yABxTJ=+a~)~Z=PUt0zF&gAOigfYk#MAfd0 zBTLUUa!`|%$tk%pph2OY9kgIW;QQt4H+>08LAK?dJ%5ZM(?g2R_GDVo6$HtJldOg) zTfg4GDFp#C2u?#Z!CE|NbwBGXzm%K(iEDb*$0 zoj8Yt0ZZ2;ehedV@1wF+&S+oOOvDM4}~pR`d{1X?rrQv`(TO zXJdF&^k4*!R+Q;fcW(0anF%rUVYyIu9I$16{IXZ%J(0T;5d>QyfxY(J_C+(OZkm7X%0n%_%64V@)tl!KFq=NO)vlX|Iw$$=5G}BJ(Q+-;;mG zNMfc#Ktq&l*_#?di*UtPk?zIK2epW57)5oVIbsn#l>QZ<0nhGG| zwI|caf%W)2kaubWu466)2tGO5tbfPXLm#Mx>` z?e;@i(KHvb!$W>98@pif(}GW(PO;@V2>aBs|9BG2fU-jMu#D;*2k>@h9$PLRPIS2; z(4<9_!AeDTetCA0C^$CnNwJHKw1*U7IcLrtMx8-4LKz**JH5G;qLQg5^lbZbPOKNj zhzHIz+mUIFQbv=C+_hxox=-U4E_rF$x{VWZ&;FEyx+5N+@hQj7B#Un^JmiPUt!f&n z;uVQoCWb}K8cr(tk*GOw!=(`!9s3A@@zTDWA6AMP#QogF^PBgiTE*s=?GZj9+FOV< z^Dj0uU@x?%X~=weU#ih)8AT?iWXF{^2!TNLw;Ck~8F|B*hDj)s`heTdki;#iWzFQP za5#D`Nm;UEtNJDWMm^d{xKSF0mTX%_M!G+`=rvk zCMWDUT~SwKmA#tLh+^pAk<*FAHBC;`3v3qPAp1+jgI+iRe*>^WvG&Z4o%blRux-!; z^*Cq#!e@M@Ph;O<-|~UljBMVMb!-L16wzKIYM?D7tS3Z9OWm)zNOn03s+<&5jSZm@ zQT<&{fP}2{S5WzQwz!t#39x!3!}9f;$4~oi@{NHe(H8Y$Q!04s#To>vu;LX^aZz{LiG^a?k#JJUJz20f3Uk2`CQF!j8f#jkWQs)_*9eJGoeKe~fjV=31-s zf~}Ns&%%D;G=%Np4Fm*yuz`dL{Dk#kW9I47RCbV{YW)texdB(Jy^fb(E`v|tyS$=` zlXQRA8_hHiY!2s*Ne5EHw(d<0Te~^gM=kqBti;hIm2buChOPTj!`CP6R!UB4=5aC- z&FS~a`}AA(q=Y3MObsU|jmD-B9OzT1PkMSgU8njPv1!*q8`Z?yR6-^Sj;25%75c@t z{i$IXD>iJN2!~PM^Y($mC)OV+t~hzDtm6MUe$;BZ zcg2P+lkgk~ygw`OTAMY8E(1JEjqwv=QD^VFC|kxz&82W(kV2^pW(pD1fKSm0Zr*AO z{g`x*yEn4979idO>I|0NN{jcxPV{~_X~%l*=0LDX>qxYN_3&?UwueryCvl);Z3fFy zy5?>kcl1aO94)@xZY3Oqz*I52hz$bDWU6%T;)Kymy%Nv}JZb;<3~uuUY0I_dXV4nK zZ-kdZuQznF*+YARYGlKkqPX|MWvku=Eg;hYBAcpC1d{dMEVPQgz{aa;wvAa3&U0+i}d(t*rK`DsXp{m)obL#6gST3T5k6?qiq#O-_4 ze%Hw5jsuO9UEh2PX6mWngGPufNsYP=d`F6qgV2F()T{0zyP$qM+#iaC39H89Mcp}v zAcxyC5LMK>4C_?T)B{ z^l8DtL7lQD#1>9$Xn*6Eue+{qzQRaYoA^oWf<;f`eVC{gI|VQX8WhZoX;Yc Date: Fri, 28 Apr 2023 17:52:01 +0200 Subject: [PATCH 07/10] Fix ckan version --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f7ae0c9..375373f 100644 --- a/README.md +++ b/README.md @@ -115,8 +115,8 @@ All available tags are listed in the packages of each image: ### CKAN and CKAN extension versions -CKAN version: `2.9.7` -CKAN base image: `ghcr.io/keitaroinc/ckan:2.9.7-focal` +CKAN version: `2.9.8` +CKAN base image: `ghcr.io/keitaroinc/ckan:2.9.8-focal` The CKAN catalog platform uses several extensions to provide the functionality needed for the SDDI concept. The table below lists the included extensions with From d9706636fc10e855fa2688fbc37f3ef783022884 Mon Sep 17 00:00:00 2001 From: Bruno Willenborg Date: Fri, 28 Apr 2023 18:17:08 +0200 Subject: [PATCH 08/10] Version pinning for 1.0.0 --- README.md | 10 +++++----- sddi-base/Dockerfile | 12 ++++++------ sddi/Dockerfile | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 375373f..310b36d 100644 --- a/README.md +++ b/README.md @@ -132,13 +132,13 @@ are alway pinned to a stable release number or commit hash. | Extension | Version | `sddi-base` | `sddi` | `sddi-social` | Description | |---|---|:---:|:---:|:---:|---| -| [`scheming`](https://github.com/MarijaKnezevic/ckanext-scheming) | `0dda2be` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | Configure and share CKAN dataset metadata forms. | +| [`scheming`](https://github.com/MarijaKnezevic/ckanext-scheming) | `c4f65c6` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | Configure and share CKAN dataset metadata forms. | | [`hierarchy`](https://github.com/ckan/ckanext-hierarchy) | `v1.2.0` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | Allows to organize organizations and groups in a hierarchy tree (nested groups/orgs). | -| [`grouphierarchysddi`](https://github.com/tum-gis/ckanext-grouphierarchy-sddi) | `63289a8` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | Extends `hierarchy` with pre-defined groups and topics of the SDDI concept. | +| [`grouphierarchysddi`](https://github.com/tum-gis/ckanext-grouphierarchy-sddi) | `1.0.0` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | Extends `hierarchy` with pre-defined groups and topics of the SDDI concept. | | [`relation`](https://github.com/tum-gis/ckanext-relation-sddi) | `1.0.0` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | Enables to create and visualize different types of relations (*realated_to*, *depends_on*, *part_of*) between catalog entries. | -| [`spatial`](https://github.com/ckan/ckanext-spatial) | `v2.0.0` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | Provides the ability to search for datasets according to a given spatial extent. | -| [`datesearch`](https://github.com/MarijaKnezevic/ckanext-datesearch) | `a01061a` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | Provides the ability to search for datasets according to a given time frame. The search includes all datasets, in which the time of validity overlaps in at least one second with the search time frame. | -| [`repeating`](https://github.com/MarijaKnezevic/ckanext-repeating) | `f09ed71` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | This extension provides a way to store repeating fields in CKAN datasets, resources, organizations and groups. | +| [`spatial`](https://github.com/MarijaKnezevic/ckanext-spatial) | `d74cd14` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | Provides the ability to search for datasets according to a given spatial extent. | +| [`datesearch`](https://github.com/MarijaKnezevic/ckanext-datesearch) | `1.0.0` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | Provides the ability to search for datasets according to a given time frame. The search includes all datasets, in which the time of validity overlaps in at least one second with the search time frame. | +| [`repeating`](https://github.com/MarijaKnezevic/ckanext-repeating) | `1.0.0` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | This extension provides a way to store repeating fields in CKAN datasets, resources, organizations and groups. | | [`composite`](https://github.com/EnviDat/ckanext-composite) | `1e6d7bb` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | The extension allows to store structured dataset metadata, single or multiple fields. Only one level of subfields is possible. The subfields can be basic text, date type or dropboxes. | | [`restricted`](https://github.com/MarijaKnezevic/ckanext-restricted) | `02e7e14` | | :heavy_check_mark: | :heavy_check_mark: | CKAN extension to restrict the accessibility to the resources of a dataset. This way the package metadata is accesible but not the data itself (resource). The resource access restriction level can be individualy defined for every package. | | [`dcat`](https://github.com/ckan/ckanext-dcat) | `v1.4.0` | | :heavy_check_mark: | :heavy_check_mark: | Allow CKAN to expose and consume metadata from other catalogs using RDF documents serialized using DCAT. | diff --git a/sddi-base/Dockerfile b/sddi-base/Dockerfile index 602c692..6f9d440 100644 --- a/sddi-base/Dockerfile +++ b/sddi-base/Dockerfile @@ -24,7 +24,7 @@ RUN set -ex && \ ls -lah /wheels # ckanext-grouphierarchy ###################################################### -ARG CKANEXT_SDDI_VERSION="2.9-support" +ARG CKANEXT_SDDI_VERSION="1.0.0" ENV CKANEXT_SDDI_VERSION=${CKANEXT_SDDI_VERSION} RUN set -ex && \ @@ -50,7 +50,7 @@ RUN set -ex && \ ls -lah /wheels # ckanext-scheming ############################################################ -ARG CKANEXT_SCHEMING_VERSION="scheming_all_plugins" +ARG CKANEXT_SCHEMING_VERSION="c4f65c6" ENV CKANEXT_SCHEMING_VERSION=${CKANEXT_SCHEMING_VERSION} ENV CKANEXT_SCHEMING_GITHUB_URL="https://github.com/MarijaKnezevic/ckanext-scheming" @@ -59,7 +59,7 @@ RUN set -ex && \ git+${CKANEXT_SCHEMING_GITHUB_URL}.git@${CKANEXT_SCHEMING_VERSION}#egg=ckanext-scheming # ckanext datesearch ########################################################## -ARG CKANEXT_DATESEARCH_VERSION="datesearch_and_spatial" +ARG CKANEXT_DATESEARCH_VERSION="1.0.0" ENV CKANEXT_DATESEARCH_VERSION=${CKANEXT_DATESEARCH_VERSION} ENV CKANEXT_DATESEARCH_VERSION_GITHUB_URL="https://github.com/MarijaKnezevic/ckanext-datesearch" @@ -68,7 +68,7 @@ RUN set -ex && \ git+${CKANEXT_DATESEARCH_VERSION_GITHUB_URL}.git@${CKANEXT_DATESEARCH_VERSION}#egg=ckanext-datesearch # ckanext-composite ########################################################### -ARG CKANEXT_COMPOSITE_VERSION="master" +ARG CKANEXT_COMPOSITE_VERSION="1e6d7bb" ENV CKANEXT_COMPOSITE_VERSION=${CKANEXT_COMPOSITE_VERSION} ENV CKANEXT_COMPOSITE_GITHUB_URL="https://github.com/EnviDat/ckanext-composite" @@ -79,7 +79,7 @@ RUN set -ex && \ git+${CKANEXT_COMPOSITE_GITHUB_URL}.git@${CKANEXT_COMPOSITE_VERSION}#egg=ckanext-composite # ckanext-repeating ########################################################### -ARG CKANEXT_REPEATING_VERSION="master" +ARG CKANEXT_REPEATING_VERSION="1.0.0" ENV CKANEXT_REPEATING_VERSION=${CKANEXT_REPEATING_VERSION} ENV CKANEXT_REPEATING_GITHUB_URL="https://github.com/MarijaKnezevic/ckanext-repeating" @@ -90,7 +90,7 @@ RUN set -ex && \ # ckanext-spatial ############################################################# FROM ghcr.io/keitaroinc/ckan:${CKAN_VERSION_BUILD_SPATIAL} as extbuild-spatial -ARG CKANEXT_SPATIAL_VERSION="scheming-spatial" +ARG CKANEXT_SPATIAL_VERSION="d74cd14" ENV CKANEXT_SPATIAL_VERSION=${CKANEXT_SPATIAL_VERSION} USER root diff --git a/sddi/Dockerfile b/sddi/Dockerfile index 411fd5e..a867aa0 100644 --- a/sddi/Dockerfile +++ b/sddi/Dockerfile @@ -35,7 +35,7 @@ RUN set -ex && \ git+${CKANEXT_DCAT_GITHUB_URL}.git@${CKANEXT_DCAT_VERSION}#egg=ckanext-dcat # ckanext-restricted ########################################################## -ARG CKANEXT_RESTRICTED_VERSION="remove-user-create" +ARG CKANEXT_RESTRICTED_VERSION="1.0.0" ENV CKANEXT_RESTRICTED_VERSION=${CKANEXT_RESTRICTED_VERSION} ENV CKANEXT_RESTRICTED_GITHUB_URL="https://github.com/MarijaKnezevic/ckanext-restricted" From 0baabee0a4fc9298b95a9f85edcbce813945d51e Mon Sep 17 00:00:00 2001 From: Bruno Willenborg Date: Fri, 28 Apr 2023 18:17:23 +0200 Subject: [PATCH 09/10] Version pinning for 1.0.0 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 310b36d..22b7bb1 100644 --- a/README.md +++ b/README.md @@ -140,7 +140,7 @@ are alway pinned to a stable release number or commit hash. | [`datesearch`](https://github.com/MarijaKnezevic/ckanext-datesearch) | `1.0.0` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | Provides the ability to search for datasets according to a given time frame. The search includes all datasets, in which the time of validity overlaps in at least one second with the search time frame. | | [`repeating`](https://github.com/MarijaKnezevic/ckanext-repeating) | `1.0.0` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | This extension provides a way to store repeating fields in CKAN datasets, resources, organizations and groups. | | [`composite`](https://github.com/EnviDat/ckanext-composite) | `1e6d7bb` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | The extension allows to store structured dataset metadata, single or multiple fields. Only one level of subfields is possible. The subfields can be basic text, date type or dropboxes. | -| [`restricted`](https://github.com/MarijaKnezevic/ckanext-restricted) | `02e7e14` | | :heavy_check_mark: | :heavy_check_mark: | CKAN extension to restrict the accessibility to the resources of a dataset. This way the package metadata is accesible but not the data itself (resource). The resource access restriction level can be individualy defined for every package. | +| [`restricted`](https://github.com/MarijaKnezevic/ckanext-restricted) | `1.0.0` | | :heavy_check_mark: | :heavy_check_mark: | CKAN extension to restrict the accessibility to the resources of a dataset. This way the package metadata is accesible but not the data itself (resource). The resource access restriction level can be individualy defined for every package. | | [`dcat`](https://github.com/ckan/ckanext-dcat) | `v1.4.0` | | :heavy_check_mark: | :heavy_check_mark: | Allow CKAN to expose and consume metadata from other catalogs using RDF documents serialized using DCAT. | | [`geoview`](https://github.com/ckan/ckanext-geoview) | `v0.0.20` | | :heavy_check_mark: | :heavy_check_mark: | This extension contains view plugins to display geospatial files and services in CKAN. | | [`disqus`](https://github.com/ckan/ckanext-disqus) | | | | :heavy_check_mark: | The Disqus extension allows site visitors to comment on individual packages using an AJAX-based commenting system. The downsides of this plugin are that comments are not stored locally and user information is not shared between CKAN and the commenting system. | From f036b0eb0e20a9608b368aa0fc264b751f0d40dc Mon Sep 17 00:00:00 2001 From: Bruno Willenborg Date: Fri, 28 Apr 2023 19:23:42 +0200 Subject: [PATCH 10/10] Update changelog --- CHANGELOG.md | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 73058d7..5fd7134 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). For releases `< 1.0.0` minor version steps may indicate breaking changes too. -## [Unreleased] - YYYY-MM-DD +## [1.0.0] - 2023-04-28 ### Added @@ -14,16 +14,12 @@ For releases `< 1.0.0` minor version steps may indicate breaking changes too. [here](https://github.com/tum-gis/ckan-docker#1234-image-versioning) - Added *devel* images built form latest commit to `devel` branch. +- Various docs additions. +- Added Zenodo DOI. ### Changed -### Removed - -### Fixed - -### Security - -### Deprecated +- Various extension updates. ## [0.0.5] - 2023-03-30 @@ -101,7 +97,26 @@ for production environments.** ### Deprecated +### Known issues + +## [Unreleased] - YYYY-MM-DD + +### Added + +### Changed + +### Removed + +### Fixed + +### Security + +### Deprecated + +### Known issues + [Unreleased]: https://github.com/tum-gis/ckan-docker/compare/0.0.5...HEAD +[1.0.0]: https://github.com/tum-gis/ckan-docker/compare/0.0.5...1.0.0 [0.0.5]: https://github.com/tum-gis/ckan-docker/compare/0.0.4...0.0.5 [0.0.4]: https://github.com/tum-gis/ckan-docker/compare/0.0.3...0.0.4 [0.0.3]: https://github.com/tum-gis/ckan-docker/compare/0.0.2...0.0.3