Merge branch 'master' into devcontainers
diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
new file mode 100644
index 0000000..5e69f83
--- /dev/null
+++ b/.devcontainer/Dockerfile
@@ -0,0 +1,56 @@
+FROM mcr.microsoft.com/devcontainers/java:17-jdk-bookworm
+
+################### Docker-from-Docker installation ###################
+
+# Install required packages
+RUN apt-get update \
+ && apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
+
+# Import the Docker repository GPG key
+RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
+
+# Set permissions on GPG key
+RUN chmod a+r /usr/share/keyrings/docker-archive-keyring.gpg
+
+# Add the Docker repository to the APT sources
+RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu jammy stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
+
+# Update package lists and install Docker
+RUN apt-get update \
+ && apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin \
+ && rm -rf /var/lib/apt/lists/*
+
+# https://github.com/microsoft/vscode-dev-containers/tree/main/containers/docker-from-docker
+ARG NONROOT_USER=vscode
+
+RUN echo -e "#!/bin/sh\n\
+ sudoIf() { if [ \"\$(id -u)\" -ne 0 ]; then sudo \"\$@\"; else \"\$@\"; fi }\n\
+ SOCKET_GID=\$(stat -c '%g' /var/run/docker.sock) \n\
+ if [ \"${SOCKET_GID}\" != '0' ]; then\n\
+ if [ \"\$(cat /etc/group | grep :\${SOCKET_GID}:)\" = '' ]; then sudoIf groupadd --gid \${SOCKET_GID} docker-host; fi \n\
+ if [ \"\$(id ${NONROOT_USER} | grep -E \"groups=.*(=|,)\${SOCKET_GID}\(\")\" = '' ]; then sudoIf usermod -aG \${SOCKET_GID} ${NONROOT_USER}; fi\n\
+ fi\n\
+ exec \"\$@\"" > /usr/local/share/docker-init.sh \
+ && chmod +x /usr/local/share/docker-init.sh
+
+############## End Docker-from-Docker section #############
+
+################### Maven configuration ##################
+
+# Establish .m2 folder and set ownership
+RUN mkdir -p /home/vscode/.m2/repository
+RUN chown -R vscode:vscode /home/vscode/.m2
+
+################### End Maven section ####################
+
+######### More Docker-from-Docker recommendations ########
+
+# https://github.com/microsoft/vscode-dev-containers/tree/main/containers/docker-from-docker
+# VS Code overrides ENTRYPOINT and CMD when executing `docker run` by default.
+# Setting the ENTRYPOINT to docker-init.sh will configure non-root access to
+# the Docker socket if "overrideCommand": false is set in devcontainer.json.
+# The script will also execute CMD if you need to alter startup behaviors.
+ENTRYPOINT [ "/usr/local/share/docker-init.sh" ]
+CMD [ "sleep", "infinity" ]
+
+######### End Docker-from-Docker recommendations #########
\ No newline at end of file
diff --git a/.devcontainer/jdk17/devcontainer.json b/.devcontainer/jdk17/devcontainer.json
new file mode 100644
index 0000000..b5af16b
--- /dev/null
+++ b/.devcontainer/jdk17/devcontainer.json
@@ -0,0 +1,36 @@
+// For format details, see https://aka.ms/devcontainer.json. For config options, see the
+// README at: https://github.com/devcontainers/templates/tree/main/src/java
+{
+ "name": "jdk17",
+ // Explicitly declaring which source-code folder to mount and where to mount it in the container
+ "workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,consistency=cached",
+ "workspaceFolder": "/workspace",
+ "build": {
+ // https://containers.dev/guide/dockerfile
+ "dockerfile": "../Dockerfile"
+ },
+ "features": {
+ },
+ "mounts": [
+ "source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind", // Binding the host docker socket to the container
+ "source=m2volume,target=/home/vscode/.m2/repository,type=volume" // Establishing a persistent volume for maven local repository downloads
+ ],
+ // Docker-from-Docker recommendations
+ // Per https://github.com/microsoft/vscode-dev-containers/tree/main/containers/docker-from-docker
+ "overrideCommand": false,
+ "remoteUser": "vscode",
+ "runArgs": ["--init"],
+ // End of Docker-from-Docker recommendations
+ "containerEnv": {
+ // You can specify environment variables here, which will be available to the application via System.getenv()
+ "CUSTOM_PROP": "Team"
+ },
+ "postStartCommand": "./mvnw clean package",
+ "customizations": {
+ "vscode": {
+ "extensions": [
+ "vscjava.vscode-java-pack"
+ ]
+ }
+ }
+}
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index a49da10..0e4958d 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -5,6 +5,11 @@
<title>YAML 1.1 parser and emitter</title>
</properties>
<body>
+ <release version="2.5" date="in GIT" description="Maintenance">
+ <action dev="asomov" type="update" issue="1105">
+ Introduce devcontainer
+ </action>
+ </release>
<release version="2.4" date="2025-02-15" description="Maintenance">
<action dev="maslovalex" type="fix" issue="1101">
Add option to log duplicate keys (thanks to Matteo Franci)