diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index a85278c..3ec5c03 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -1,34 +1,55 @@
-name: Build and Check
-on:
- workflow_dispatch:
- pull_request:
- push:
- branches:
- - main
- - develop
-jobs:
- build:
- name: Build
- uses: Logius-standaarden/Automatisering/.github/workflows/build.yml@main
- check:
- needs: build
- name: Check
- uses: Logius-standaarden/Automatisering/.github/workflows/check.yml@main
- publish:
- needs: build
- name: Publish (Logius)
- uses: Logius-standaarden/Automatisering/.github/workflows/publish.yml@main
- secrets: inherit
- spectral_linter:
- needs: build
- name: Spectral linter test cases
- runs-on: ubuntu-22.04
- steps:
- - uses: actions/checkout@v4
- - uses: actions/setup-node@v4
- with:
- node-version: 20
- - name: Run test suite
- run: |
- npm install -g @stoplight/spectral-cli
- node linter/run-linter-tests.mjs
+name: Build and Check
+on:
+ workflow_dispatch:
+ pull_request:
+ push:
+ branches:
+ - main
+ - develop
+jobs:
+ build:
+ name: Build
+ uses: Logius-standaarden/Automatisering/.github/workflows/build.yml@main
+ check:
+ needs: build
+ name: Check
+ uses: Logius-standaarden/Automatisering/.github/workflows/check.yml@main
+ publish:
+ needs: build
+ name: Publish (Logius)
+ uses: Logius-standaarden/Automatisering/.github/workflows/publish.yml@main
+ secrets: inherit
+ spectral_linter:
+ needs: build
+ name: Spectral linter test cases
+ runs-on: ubuntu-22.04
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ - name: Run test suite
+ run: |
+ npm install -g @stoplight/spectral-cli
+ node linter/run-linter-tests.mjs
+ examples_linter:
+ needs: spectral_linter
+ name: Examples linter tests
+ runs-on: ubuntu-22.04
+ strategy:
+ matrix:
+ # Minimum supported and maximum available.
+ example: [ quarkus ]
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ - uses: actions/setup-java@v4
+ with:
+ distribution: 'zulu'
+ java-version: 21
+ - name: Install Spectral
+ run: npm install -g @stoplight/spectral-cli
+ - name: Run linter on ${{ matrix.example }} example
+ run: ./examples/${{ matrix.example }}/build-and-check-project.sh
diff --git a/examples/quarkus/.dockerignore b/examples/quarkus/.dockerignore
deleted file mode 100644
index 94810d0..0000000
--- a/examples/quarkus/.dockerignore
+++ /dev/null
@@ -1,5 +0,0 @@
-*
-!target/*-runner
-!target/*-runner.jar
-!target/lib/*
-!target/quarkus-app/*
\ No newline at end of file
diff --git a/examples/quarkus/README.md b/examples/quarkus/README.md
index f8d87c8..658c06e 100644
--- a/examples/quarkus/README.md
+++ b/examples/quarkus/README.md
@@ -1,62 +1,15 @@
-# code-with-quarkus
+# Quarkus example
-This project uses Quarkus, the Supersonic Subatomic Java Framework.
+Dit project gebruikt Quarkus: , een Java framework waarmee onder andere API's kunnen worden gebruikt.
-If you want to learn more about Quarkus, please visit its website: .
-
-## Running the application in dev mode
-
-You can run your application in dev mode that enables live coding using:
-
-```shell script
-./mvnw quarkus:dev
-```
-
-> **_NOTE:_** Quarkus now ships with a Dev UI, which is available in dev mode only at .
-
-## Packaging and running the application
-
-The application can be packaged using:
+Om het project te bouwen en een `openapi.json` te genereren, run het volgende:
```shell script
./mvnw package
```
-It produces the `quarkus-run.jar` file in the `target/quarkus-app/` directory.
-Be aware that it’s not an _über-jar_ as the dependencies are copied into the `target/quarkus-app/lib/` directory.
-
-The application is now runnable using `java -jar target/quarkus-app/quarkus-run.jar`.
-
-If you want to build an _über-jar_, execute the following command:
-
-```shell script
-./mvnw package -Dquarkus.package.jar.type=uber-jar
-```
-
-The application, packaged as an _über-jar_, is now runnable using `java -jar target/*-runner.jar`.
-
-## Creating a native executable
-
-You can create a native executable using:
-
-```shell script
-./mvnw package -Dnative
-```
-
-Or, if you don't have GraalVM installed, you can run the native executable build in a container using:
-
-```shell script
-./mvnw package -Dnative -Dquarkus.native.container-build=true
-```
-
-You can then execute your native executable with: `./target/code-with-quarkus-1.0.0-SNAPSHOT-runner`
-
-If you want to learn more about building native executables, please consult .
-
-## Provided Code
-
-### REST
-
-Easily start your REST Web Services
+Dit genereert `target/generated/openapi/openapi.json` op basis van de classes in [`src/main/java/org/acme/`](src/main/java/org/acme/).
+Daar kun je de verscheidene annotations bekijken die gebruikt worden om API's te documenteren.
+Tevens is er enkele configuratie vereist in [`src/main/resources/application.properties`](src/main/resources/application.properties) om Quarkus goed in te stellen.
-[Related guide section...](https://quarkus.io/guides/getting-started-reactive#reactive-jax-rs-resources)
+Met deze annotations en configuratie voldoet het example aan alle regels van de API Design Rules.
diff --git a/examples/quarkus/build-and-check-project.sh b/examples/quarkus/build-and-check-project.sh
new file mode 100755
index 0000000..47fb6d5
--- /dev/null
+++ b/examples/quarkus/build-and-check-project.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+CURRENT_DIRECTORY=$(dirname "$0")
+
+cd $CURRENT_DIRECTORY
+
+./mvnw --no-transfer-progress package
+
+../run-spectral-linter.sh $(realpath target/generated/openapi/openapi.json)
diff --git a/examples/quarkus/run-spectral-linter.sh b/examples/quarkus/run-spectral-linter.sh
deleted file mode 100755
index 37c0e52..0000000
--- a/examples/quarkus/run-spectral-linter.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-./mvnw package
-
-spectral lint -r ../../linter/spectral.yml target/generated/openapi/openapi.json
diff --git a/examples/quarkus/src/main/docker/Dockerfile.jvm b/examples/quarkus/src/main/docker/Dockerfile.jvm
deleted file mode 100644
index ff46a4f..0000000
--- a/examples/quarkus/src/main/docker/Dockerfile.jvm
+++ /dev/null
@@ -1,98 +0,0 @@
-####
-# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode
-#
-# Before building the container image run:
-#
-# ./mvnw package
-#
-# Then, build the image with:
-#
-# docker build -f src/main/docker/Dockerfile.jvm -t quarkus/code-with-quarkus-jvm .
-#
-# Then run the container using:
-#
-# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus-jvm
-#
-# If you want to include the debug port into your docker image
-# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005.
-# Additionally you will have to set -e JAVA_DEBUG=true and -e JAVA_DEBUG_PORT=*:5005
-# when running the container
-#
-# Then run the container using :
-#
-# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus-jvm
-#
-# This image uses the `run-java.sh` script to run the application.
-# This scripts computes the command line to execute your Java application, and
-# includes memory/GC tuning.
-# You can configure the behavior using the following environment properties:
-# - JAVA_OPTS: JVM options passed to the `java` command (example: "-verbose:class") - Be aware that this will override
-# the default JVM options, use `JAVA_OPTS_APPEND` to append options
-# - JAVA_OPTS_APPEND: User specified Java options to be appended to generated options
-# in JAVA_OPTS (example: "-Dsome.property=foo")
-# - JAVA_MAX_MEM_RATIO: Is used when no `-Xmx` option is given in JAVA_OPTS. This is
-# used to calculate a default maximal heap memory based on a containers restriction.
-# If used in a container without any memory constraints for the container then this
-# option has no effect. If there is a memory constraint then `-Xmx` is set to a ratio
-# of the container available memory as set here. The default is `50` which means 50%
-# of the available memory is used as an upper boundary. You can skip this mechanism by
-# setting this value to `0` in which case no `-Xmx` option is added.
-# - JAVA_INITIAL_MEM_RATIO: Is used when no `-Xms` option is given in JAVA_OPTS. This
-# is used to calculate a default initial heap memory based on the maximum heap memory.
-# If used in a container without any memory constraints for the container then this
-# option has no effect. If there is a memory constraint then `-Xms` is set to a ratio
-# of the `-Xmx` memory as set here. The default is `25` which means 25% of the `-Xmx`
-# is used as the initial heap size. You can skip this mechanism by setting this value
-# to `0` in which case no `-Xms` option is added (example: "25")
-# - JAVA_MAX_INITIAL_MEM: Is used when no `-Xms` option is given in JAVA_OPTS.
-# This is used to calculate the maximum value of the initial heap memory. If used in
-# a container without any memory constraints for the container then this option has
-# no effect. If there is a memory constraint then `-Xms` is limited to the value set
-# here. The default is 4096MB which means the calculated value of `-Xms` never will
-# be greater than 4096MB. The value of this variable is expressed in MB (example: "4096")
-# - JAVA_DIAGNOSTICS: Set this to get some diagnostics information to standard output
-# when things are happening. This option, if set to true, will set
-# `-XX:+UnlockDiagnosticVMOptions`. Disabled by default (example: "true").
-# - JAVA_DEBUG: If set remote debugging will be switched on. Disabled by default (example:
-# true").
-# - JAVA_DEBUG_PORT: Port used for remote debugging. Defaults to 5005 (example: "8787").
-# - CONTAINER_CORE_LIMIT: A calculated core limit as described in
-# https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt. (example: "2")
-# - CONTAINER_MAX_MEMORY: Memory limit given to the container (example: "1024").
-# - GC_MIN_HEAP_FREE_RATIO: Minimum percentage of heap free after GC to avoid expansion.
-# (example: "20")
-# - GC_MAX_HEAP_FREE_RATIO: Maximum percentage of heap free after GC to avoid shrinking.
-# (example: "40")
-# - GC_TIME_RATIO: Specifies the ratio of the time spent outside the garbage collection.
-# (example: "4")
-# - GC_ADAPTIVE_SIZE_POLICY_WEIGHT: The weighting given to the current GC time versus
-# previous GC times. (example: "90")
-# - GC_METASPACE_SIZE: The initial metaspace size. (example: "20")
-# - GC_MAX_METASPACE_SIZE: The maximum metaspace size. (example: "100")
-# - GC_CONTAINER_OPTIONS: Specify Java GC to use. The value of this variable should
-# contain the necessary JRE command-line options to specify the required GC, which
-# will override the default of `-XX:+UseParallelGC` (example: -XX:+UseG1GC).
-# - HTTPS_PROXY: The location of the https proxy. (example: "myuser@127.0.0.1:8080")
-# - HTTP_PROXY: The location of the http proxy. (example: "myuser@127.0.0.1:8080")
-# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be
-# accessed directly. (example: "foo.example.com,bar.example.com")
-#
-###
-FROM registry.access.redhat.com/ubi9/openjdk-21:1.21
-
-ENV LANGUAGE='en_US:en'
-
-
-# We make four distinct layers so if there are application changes the library layers can be re-used
-COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/
-COPY --chown=185 target/quarkus-app/*.jar /deployments/
-COPY --chown=185 target/quarkus-app/app/ /deployments/app/
-COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/
-
-EXPOSE 8080
-USER 185
-ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
-ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
-
-ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ]
-
diff --git a/examples/quarkus/src/main/docker/Dockerfile.legacy-jar b/examples/quarkus/src/main/docker/Dockerfile.legacy-jar
deleted file mode 100644
index 7054d37..0000000
--- a/examples/quarkus/src/main/docker/Dockerfile.legacy-jar
+++ /dev/null
@@ -1,94 +0,0 @@
-####
-# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode
-#
-# Before building the container image run:
-#
-# ./mvnw package -Dquarkus.package.jar.type=legacy-jar
-#
-# Then, build the image with:
-#
-# docker build -f src/main/docker/Dockerfile.legacy-jar -t quarkus/code-with-quarkus-legacy-jar .
-#
-# Then run the container using:
-#
-# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus-legacy-jar
-#
-# If you want to include the debug port into your docker image
-# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005.
-# Additionally you will have to set -e JAVA_DEBUG=true and -e JAVA_DEBUG_PORT=*:5005
-# when running the container
-#
-# Then run the container using :
-#
-# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus-legacy-jar
-#
-# This image uses the `run-java.sh` script to run the application.
-# This scripts computes the command line to execute your Java application, and
-# includes memory/GC tuning.
-# You can configure the behavior using the following environment properties:
-# - JAVA_OPTS: JVM options passed to the `java` command (example: "-verbose:class") - Be aware that this will override
-# the default JVM options, use `JAVA_OPTS_APPEND` to append options
-# - JAVA_OPTS_APPEND: User specified Java options to be appended to generated options
-# in JAVA_OPTS (example: "-Dsome.property=foo")
-# - JAVA_MAX_MEM_RATIO: Is used when no `-Xmx` option is given in JAVA_OPTS. This is
-# used to calculate a default maximal heap memory based on a containers restriction.
-# If used in a container without any memory constraints for the container then this
-# option has no effect. If there is a memory constraint then `-Xmx` is set to a ratio
-# of the container available memory as set here. The default is `50` which means 50%
-# of the available memory is used as an upper boundary. You can skip this mechanism by
-# setting this value to `0` in which case no `-Xmx` option is added.
-# - JAVA_INITIAL_MEM_RATIO: Is used when no `-Xms` option is given in JAVA_OPTS. This
-# is used to calculate a default initial heap memory based on the maximum heap memory.
-# If used in a container without any memory constraints for the container then this
-# option has no effect. If there is a memory constraint then `-Xms` is set to a ratio
-# of the `-Xmx` memory as set here. The default is `25` which means 25% of the `-Xmx`
-# is used as the initial heap size. You can skip this mechanism by setting this value
-# to `0` in which case no `-Xms` option is added (example: "25")
-# - JAVA_MAX_INITIAL_MEM: Is used when no `-Xms` option is given in JAVA_OPTS.
-# This is used to calculate the maximum value of the initial heap memory. If used in
-# a container without any memory constraints for the container then this option has
-# no effect. If there is a memory constraint then `-Xms` is limited to the value set
-# here. The default is 4096MB which means the calculated value of `-Xms` never will
-# be greater than 4096MB. The value of this variable is expressed in MB (example: "4096")
-# - JAVA_DIAGNOSTICS: Set this to get some diagnostics information to standard output
-# when things are happening. This option, if set to true, will set
-# `-XX:+UnlockDiagnosticVMOptions`. Disabled by default (example: "true").
-# - JAVA_DEBUG: If set remote debugging will be switched on. Disabled by default (example:
-# true").
-# - JAVA_DEBUG_PORT: Port used for remote debugging. Defaults to 5005 (example: "8787").
-# - CONTAINER_CORE_LIMIT: A calculated core limit as described in
-# https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt. (example: "2")
-# - CONTAINER_MAX_MEMORY: Memory limit given to the container (example: "1024").
-# - GC_MIN_HEAP_FREE_RATIO: Minimum percentage of heap free after GC to avoid expansion.
-# (example: "20")
-# - GC_MAX_HEAP_FREE_RATIO: Maximum percentage of heap free after GC to avoid shrinking.
-# (example: "40")
-# - GC_TIME_RATIO: Specifies the ratio of the time spent outside the garbage collection.
-# (example: "4")
-# - GC_ADAPTIVE_SIZE_POLICY_WEIGHT: The weighting given to the current GC time versus
-# previous GC times. (example: "90")
-# - GC_METASPACE_SIZE: The initial metaspace size. (example: "20")
-# - GC_MAX_METASPACE_SIZE: The maximum metaspace size. (example: "100")
-# - GC_CONTAINER_OPTIONS: Specify Java GC to use. The value of this variable should
-# contain the necessary JRE command-line options to specify the required GC, which
-# will override the default of `-XX:+UseParallelGC` (example: -XX:+UseG1GC).
-# - HTTPS_PROXY: The location of the https proxy. (example: "myuser@127.0.0.1:8080")
-# - HTTP_PROXY: The location of the http proxy. (example: "myuser@127.0.0.1:8080")
-# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be
-# accessed directly. (example: "foo.example.com,bar.example.com")
-#
-###
-FROM registry.access.redhat.com/ubi9/openjdk-21:1.21
-
-ENV LANGUAGE='en_US:en'
-
-
-COPY target/lib/* /deployments/lib/
-COPY target/*-runner.jar /deployments/quarkus-run.jar
-
-EXPOSE 8080
-USER 185
-ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
-ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
-
-ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ]
diff --git a/examples/quarkus/src/main/docker/Dockerfile.native b/examples/quarkus/src/main/docker/Dockerfile.native
deleted file mode 100644
index 0e3fa1d..0000000
--- a/examples/quarkus/src/main/docker/Dockerfile.native
+++ /dev/null
@@ -1,29 +0,0 @@
-####
-# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode.
-#
-# Before building the container image run:
-#
-# ./mvnw package -Dnative
-#
-# Then, build the image with:
-#
-# docker build -f src/main/docker/Dockerfile.native -t quarkus/code-with-quarkus .
-#
-# Then run the container using:
-#
-# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus
-#
-# The ` registry.access.redhat.com/ubi8/ubi-minimal:8.10` base image is based on UBI 9.
-# To use UBI 8, switch to `quay.io/ubi8/ubi-minimal:8.10`.
-###
-FROM registry.access.redhat.com/ubi8/ubi-minimal:8.10
-WORKDIR /work/
-RUN chown 1001 /work \
- && chmod "g+rwX" /work \
- && chown 1001:root /work
-COPY --chown=1001:root --chmod=0755 target/*-runner /work/application
-
-EXPOSE 8080
-USER 1001
-
-ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"]
diff --git a/examples/quarkus/src/main/docker/Dockerfile.native-micro b/examples/quarkus/src/main/docker/Dockerfile.native-micro
deleted file mode 100644
index d7f3271..0000000
--- a/examples/quarkus/src/main/docker/Dockerfile.native-micro
+++ /dev/null
@@ -1,32 +0,0 @@
-####
-# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode.
-# It uses a micro base image, tuned for Quarkus native executables.
-# It reduces the size of the resulting container image.
-# Check https://quarkus.io/guides/quarkus-runtime-base-image for further information about this image.
-#
-# Before building the container image run:
-#
-# ./mvnw package -Dnative
-#
-# Then, build the image with:
-#
-# docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/code-with-quarkus .
-#
-# Then run the container using:
-#
-# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus
-#
-# The `quay.io/quarkus/quarkus-micro-image:2.0` base image is based on UBI 9.
-# To use UBI 8, switch to `quay.io/quarkus/quarkus-micro-image:2.0`.
-###
-FROM quay.io/quarkus/quarkus-micro-image:2.0
-WORKDIR /work/
-RUN chown 1001 /work \
- && chmod "g+rwX" /work \
- && chown 1001:root /work
-COPY --chown=1001:root --chmod=0755 target/*-runner /work/application
-
-EXPOSE 8080
-USER 1001
-
-ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"]
diff --git a/examples/quarkus/src/main/java/org/acme/OpenAPIJsonFilter.java b/examples/quarkus/src/main/java/org/acme/OpenAPIJsonFilter.java
index b07f7d7..a8f11f8 100644
--- a/examples/quarkus/src/main/java/org/acme/OpenAPIJsonFilter.java
+++ b/examples/quarkus/src/main/java/org/acme/OpenAPIJsonFilter.java
@@ -39,9 +39,12 @@ private static APIResponses createOpenApiResponse() {
Content jsonContent =
OASFactory.createContent()
.addMediaType(MediaType.APPLICATION_JSON, OASFactory.createMediaType());
- Header apiVersionsHeader =
+ Schema stringSchema = OASFactory.createSchema().addType(Schema.SchemaType.STRING);
+ Header apiVersionsHeader = OASFactory.createHeader().schema(stringSchema);
+ Header corsHeader =
OASFactory.createHeader()
- .schema(OASFactory.createSchema().addType(Schema.SchemaType.STRING));
+ .description("Available to all origins")
+ .schema(stringSchema);
return OASFactory.createAPIResponses()
.addAPIResponse(
"200",
@@ -49,6 +52,7 @@ private static APIResponses createOpenApiResponse() {
.description("Open API specification")
.addHeader(
OpenApiConstants.API_VERSION_HEADER_NAME, apiVersionsHeader)
+ .addHeader("access-control-allow-origin", corsHeader)
.content(jsonContent));
}
}
diff --git a/examples/run-spectral-linter.sh b/examples/run-spectral-linter.sh
new file mode 100755
index 0000000..567c336
--- /dev/null
+++ b/examples/run-spectral-linter.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+CURRENT_DIRECTORY=$(dirname "$0")
+
+# Nodig vanwege https://github.com/stoplightio/spectral/issues/2675
+if ! [ -f "$1" ]; then
+ echo "Generated $1 does not exist"
+ exit 1
+fi
+
+spectral lint -r $CURRENT_DIRECTORY/../linter/spectral.yml $1