diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000..dd84ea7
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,38 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+**Describe the bug**
+A clear and concise description of what the bug is.
+
+**To Reproduce**
+Steps to reproduce the behavior:
+1. Go to '...'
+2. Click on '....'
+3. Scroll down to '....'
+4. See error
+
+**Expected behavior**
+A clear and concise description of what you expected to happen.
+
+**Screenshots**
+If applicable, add screenshots to help explain your problem.
+
+**Desktop (please complete the following information):**
+ - OS: [e.g. iOS]
+ - Browser [e.g. chrome, safari]
+ - Version [e.g. 22]
+
+**Smartphone (please complete the following information):**
+ - Device: [e.g. iPhone6]
+ - OS: [e.g. iOS8.1]
+ - Browser [e.g. stock browser, safari]
+ - Version [e.g. 22]
+
+**Additional context**
+Add any other context about the problem here.
diff --git a/.github/ISSUE_TEMPLATE/custom.md b/.github/ISSUE_TEMPLATE/custom.md
new file mode 100644
index 0000000..48d5f81
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/custom.md
@@ -0,0 +1,10 @@
+---
+name: Custom issue template
+about: Describe this issue template's purpose here.
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000..bbcbbe7
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,20 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+**Is your feature request related to a problem? Please describe.**
+A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
+
+**Describe the solution you'd like**
+A clear and concise description of what you want to happen.
+
+**Describe alternatives you've considered**
+A clear and concise description of any alternative solutions or features you've considered.
+
+**Additional context**
+Add any other context or screenshots about the feature request here.
diff --git a/.github/workflows/build-and-publish-develop.yml b/.github/workflows/build-and-publish-develop.yml
new file mode 100644
index 0000000..a091a76
--- /dev/null
+++ b/.github/workflows/build-and-publish-develop.yml
@@ -0,0 +1,159 @@
+name: SNAPSHOT - Build and Publish Maven Artifact and Docker Image
+
+on:
+ workflow_dispatch:
+ push:
+ branches:
+ - develop
+
+env:
+ REGISTRY_IMAGE: edeedeeed/ec-config-server
+
+jobs:
+ build-java:
+ runs-on: ubuntu-latest
+ permissions:
+ id-token: write
+ contents: write
+ packages: write
+ name: Build Java Package and Publish
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - uses: actions/setup-java@v4.2.2
+ with:
+ distribution: zulu
+ java-version: 17
+ - name: Maven Publish
+ env:
+ NEXUS_USERNAME: 'edward'
+ NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
+ SNAPSHOT_DEPLOYMENT_REPOSITORY_URL: ${{ secrets.SNAPSHOT_DEPLOYMENT_REPOSITORY_URL }}
+ RELEASE_DEPLOYMENT_REPOSITORY_URL: ${{ secrets.RELEASE_DEPLOYMENT_REPOSITORY_URL }}
+ run: |
+ mvn -B deploy \
+ -P homelab \
+ --settings=${{ github.workspace }}/.mvn/settings.xml
+ build-docker:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ platform:
+ - linux/amd64
+ - linux/arm64
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - uses: actions/setup-java@v4.2.2
+ with:
+ distribution: zulu
+ java-version: 17
+ - name: Maven Package
+ env:
+ NEXUS_USERNAME: 'edward'
+ NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
+ SNAPSHOT_DEPLOYMENT_REPOSITORY_URL: ${{ secrets.SNAPSHOT_DEPLOYMENT_REPOSITORY_URL }}
+ RELEASE_DEPLOYMENT_REPOSITORY_URL: ${{ secrets.RELEASE_DEPLOYMENT_REPOSITORY_URL }}
+ run: |
+ mvn -B package \
+ -P homelab \
+ --settings=${{ github.workspace }}/.mvn/settings.xml
+ - name: Prepare
+ run: |
+ platform=${{ matrix.platform }}
+ echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
+ - name: Docker meta
+ id: meta
+ uses: docker/metadata-action@v5
+ with:
+ images: ${{ env.REGISTRY_IMAGE }}
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v3
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+ - name: Login to Docker Hub
+ uses: docker/login-action@v3
+ with:
+ username: ${{ vars.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
+ - name: Build and push by digest
+ id: build
+ uses: docker/build-push-action@v6
+ with:
+ context: .
+ platforms: ${{ matrix.platform }}
+ labels: ${{ steps.meta.outputs.labels }}
+ outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true
+ - name: Export digest
+ run: |
+ mkdir -p /tmp/digests
+ digest="${{ steps.build.outputs.digest }}"
+ touch "/tmp/digests/${digest#sha256:}"
+ - name: Upload digest
+ uses: actions/upload-artifact@v4
+ with:
+ name: digests-${{ env.PLATFORM_PAIR }}
+ path: /tmp/digests/*
+ if-no-files-found: error
+ retention-days: 1
+ merge-docker:
+ runs-on: ubuntu-latest
+ needs:
+ - build-docker
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - uses: actions/setup-java@v4.2.2
+ with:
+ distribution: zulu
+ java-version: 17
+ - name: Extract Maven project version
+ id: project-version
+ env:
+ NEXUS_USERNAME: 'edward'
+ NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
+ SNAPSHOT_DEPLOYMENT_REPOSITORY_URL: ${{ secrets.SNAPSHOT_DEPLOYMENT_REPOSITORY_URL }}
+ RELEASE_DEPLOYMENT_REPOSITORY_URL: ${{ secrets.RELEASE_DEPLOYMENT_REPOSITORY_URL }}
+ run: |
+ VERSION=$( mvn help:evaluate -Dexpression=project.version -q -DforceStdout -P homelab --settings=${{ github.workspace }}/.mvn/settings.xml)
+ echo "version=$VERSION" >> $GITHUB_OUTPUT
+ - name: Show extracted Maven project version
+ run: echo ${{ steps.project-version.outputs.version }}
+ - name: Download digests
+ uses: actions/download-artifact@v4
+ with:
+ path: /tmp/digests
+ pattern: digests-*
+ merge-multiple: true
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+ - name: Docker meta
+ id: meta
+ uses: docker/metadata-action@v5
+ with:
+ images: ${{ env.REGISTRY_IMAGE }}
+ # generate Docker tags based on the following events/attributes
+ tags: |
+ type=ref,event=branch
+ type=sha
+ type=sha,prefix={{branch}}-
+ type=raw,value={{branch}}-{{date 'YYYYMMDD'}}
+ type=raw,value={{branch}}-${{ steps.project-version.outputs.version }}
+ type=raw,value=${{ steps.project-version.outputs.version }}
+ - name: Login to Docker Hub
+ uses: docker/login-action@v3
+ with:
+ username: ${{ vars.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
+ - name: Create manifest list and push
+ working-directory: /tmp/digests
+ run: |
+ docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
+ $(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *)
+ - name: Inspect image
+ run: |
+ docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }}
\ No newline at end of file
diff --git a/.github/workflows/build-and-publish-release.yml b/.github/workflows/build-and-publish-release.yml
new file mode 100644
index 0000000..3cef448
--- /dev/null
+++ b/.github/workflows/build-and-publish-release.yml
@@ -0,0 +1,177 @@
+name: RELEASE - Build and Publish Maven Artifact and Docker Image
+
+on:
+ workflow_dispatch:
+ push:
+ branches:
+ - main
+
+env:
+ REGISTRY_IMAGE: edeedeeed/ec-config-server
+
+jobs:
+ build-java:
+ runs-on: ubuntu-latest
+ permissions:
+ id-token: write
+ contents: write
+ packages: write
+ name: Build Java Package and Publish
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - uses: actions/setup-java@v4.2.2
+ with:
+ distribution: zulu
+ java-version: 17
+ - name: Config Git
+ run: |
+ git config --global user.email "edward@cheng.sydney"
+ git config --global user.name "3dwardch3ng"
+ git config --global core.autocrlf input
+ - name: Start release
+ run: |
+ mvn gitflow:release-start -B -DpushRemote=true -DallowSnapshots=true \
+ -P homelab \
+ --settings=${{ github.workspace }}/.mvn/settings.xml
+ - name: Maven Publish
+ env:
+ NEXUS_USERNAME: 'edward'
+ NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
+ SNAPSHOT_DEPLOYMENT_REPOSITORY_URL: ${{ secrets.SNAPSHOT_DEPLOYMENT_REPOSITORY_URL }}
+ RELEASE_DEPLOYMENT_REPOSITORY_URL: ${{ secrets.RELEASE_DEPLOYMENT_REPOSITORY_URL }}
+ run: |
+ mvn -B deploy \
+ -P homelab \
+ --settings=${{ github.workspace }}/.mvn/settings.xml
+ - name: Finish release
+ run: |
+ mvn gitflow:release-finish -B -DpushRemote=true -DallowSnapshots=true \
+ -P homelab \
+ --settings=${{ github.workspace }}/.mvn/settings.xml
+ env:
+ GITHUB_ACTOR: 3dwardch3ng
+ GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
+ build-docker:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ platform:
+ - linux/amd64
+ - linux/arm64
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - uses: actions/setup-java@v4.2.2
+ with:
+ distribution: zulu
+ java-version: 17
+ - name: Maven Package
+ env:
+ NEXUS_USERNAME: 'edward'
+ NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
+ SNAPSHOT_DEPLOYMENT_REPOSITORY_URL: ${{ secrets.SNAPSHOT_DEPLOYMENT_REPOSITORY_URL }}
+ RELEASE_DEPLOYMENT_REPOSITORY_URL: ${{ secrets.RELEASE_DEPLOYMENT_REPOSITORY_URL }}
+ run: |
+ mvn -B package \
+ -P homelab \
+ --settings=${{ github.workspace }}/.mvn/settings.xml
+ - name: Prepare
+ run: |
+ platform=${{ matrix.platform }}
+ echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
+ - name: Docker meta
+ id: meta
+ uses: docker/metadata-action@v5
+ with:
+ images: ${{ env.REGISTRY_IMAGE }}
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v3
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+ - name: Login to Docker Hub
+ uses: docker/login-action@v3
+ with:
+ username: ${{ vars.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
+ - name: Build and push by digest
+ id: build
+ uses: docker/build-push-action@v6
+ with:
+ context: .
+ platforms: ${{ matrix.platform }}
+ labels: ${{ steps.meta.outputs.labels }}
+ outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true
+ - name: Export digest
+ run: |
+ mkdir -p /tmp/digests
+ digest="${{ steps.build.outputs.digest }}"
+ touch "/tmp/digests/${digest#sha256:}"
+ - name: Upload digest
+ uses: actions/upload-artifact@v4
+ with:
+ name: digests-${{ env.PLATFORM_PAIR }}
+ path: /tmp/digests/*
+ if-no-files-found: error
+ retention-days: 1
+ merge-docker:
+ runs-on: ubuntu-latest
+ needs:
+ - build-docker
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - uses: actions/setup-java@v4.2.2
+ with:
+ distribution: zulu
+ java-version: 17
+ - name: Extract Maven project version
+ id: project-version
+ env:
+ NEXUS_USERNAME: 'edward'
+ NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
+ SNAPSHOT_DEPLOYMENT_REPOSITORY_URL: ${{ secrets.SNAPSHOT_DEPLOYMENT_REPOSITORY_URL }}
+ RELEASE_DEPLOYMENT_REPOSITORY_URL: ${{ secrets.RELEASE_DEPLOYMENT_REPOSITORY_URL }}
+ run: |
+ VERSION=$( mvn help:evaluate -Dexpression=project.version -q -DforceStdout -P homelab --settings=${{ github.workspace }}/.mvn/settings.xml)
+ echo "version=$VERSION" >> $GITHUB_OUTPUT
+ - name: Show extracted Maven project version
+ run: echo ${{ steps.project-version.outputs.version }}
+ - name: Download digests
+ uses: actions/download-artifact@v4
+ with:
+ path: /tmp/digests
+ pattern: digests-*
+ merge-multiple: true
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+ - name: Docker meta
+ id: meta
+ uses: docker/metadata-action@v5
+ with:
+ images: ${{ env.REGISTRY_IMAGE }}
+ # generate Docker tags based on the following events/attributes
+ tags: |
+ type=ref,event=branch
+ type=sha
+ type=sha,prefix={{branch}}-
+ type=raw,value={{branch}}-{{date 'YYYYMMDD'}}
+ type=raw,value={{branch}}-${{ steps.project-version.outputs.version }}
+ type=raw,value=${{ steps.project-version.outputs.version }}
+ - name: Login to Docker Hub
+ uses: docker/login-action@v3
+ with:
+ username: ${{ vars.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
+ - name: Create manifest list and push
+ working-directory: /tmp/digests
+ run: |
+ docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
+ $(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *)
+ - name: Inspect image
+ run: |
+ docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 524f096..0fc479a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,5 @@
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
replay_pid*
+
+/.idea/
diff --git a/.mvn/settings.xml b/.mvn/settings.xml
new file mode 100644
index 0000000..03ef155
--- /dev/null
+++ b/.mvn/settings.xml
@@ -0,0 +1,53 @@
+
+
+
+ homelab
+
+ nexus-snapshot::${env.SNAPSHOT_DEPLOYMENT_REPOSITORY_URL}
+ nexus-release::${env.RELEASE_DEPLOYMENT_REPOSITORY_URL}
+
+
+
+ nexus-snapshot
+ Home Lab Nexus Snapshot
+
+ false
+
+
+ true
+ always
+ warn
+
+ ${env.SNAPSHOT_DEPLOYMENT_REPOSITORY_URL}
+ default
+
+
+ nexus-release
+ Home Lab Nexus Release
+
+ true
+ always
+ warn
+
+
+ false
+
+ ${env.RELEASE_DEPLOYMENT_REPOSITORY_URL}
+ default
+
+
+
+
+
+
+ nexus-snapshot
+ ${env.NEXUS_USERNAME}
+ ${env.NEXUS_PASSWORD}
+
+
+ nexus-release
+ ${env.NEXUS_USERNAME}
+ ${env.NEXUS_PASSWORD}
+
+
+
\ No newline at end of file
diff --git a/CODEOWNERS b/CODEOWNERS
new file mode 100644
index 0000000..4b66db0
--- /dev/null
+++ b/CODEOWNERS
@@ -0,0 +1,3 @@
+# Repository CODEOWNERS
+
+@3dwardCh3nG
\ No newline at end of file
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..e964f15
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,128 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+We as members, contributors, and leaders pledge to make participation in our
+community a harassment-free experience for everyone, regardless of age, body
+size, visible or invisible disability, ethnicity, sex characteristics, gender
+identity and expression, level of experience, education, socio-economic status,
+nationality, personal appearance, race, religion, or sexual identity
+and orientation.
+
+We pledge to act and interact in ways that contribute to an open, welcoming,
+diverse, inclusive, and healthy community.
+
+## Our Standards
+
+Examples of behavior that contributes to a positive environment for our
+community include:
+
+* Demonstrating empathy and kindness toward other people
+* Being respectful of differing opinions, viewpoints, and experiences
+* Giving and gracefully accepting constructive feedback
+* Accepting responsibility and apologizing to those affected by our mistakes,
+ and learning from the experience
+* Focusing on what is best not just for us as individuals, but for the
+ overall community
+
+Examples of unacceptable behavior include:
+
+* The use of sexualized language or imagery, and sexual attention or
+ advances of any kind
+* Trolling, insulting or derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or email
+ address, without their explicit permission
+* Other conduct which could reasonably be considered inappropriate in a
+ professional setting
+
+## Enforcement Responsibilities
+
+Community leaders are responsible for clarifying and enforcing our standards of
+acceptable behavior and will take appropriate and fair corrective action in
+response to any behavior that they deem inappropriate, threatening, offensive,
+or harmful.
+
+Community leaders have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions that are
+not aligned to this Code of Conduct, and will communicate reasons for moderation
+decisions when appropriate.
+
+## Scope
+
+This Code of Conduct applies within all community spaces, and also applies when
+an individual is officially representing the community in public spaces.
+Examples of representing our community include using an official e-mail address,
+posting via an official social media account, or acting as an appointed
+representative at an online or offline event.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported to the community leaders responsible for enforcement at
+edward@cheng.sydney.
+All complaints will be reviewed and investigated promptly and fairly.
+
+All community leaders are obligated to respect the privacy and security of the
+reporter of any incident.
+
+## Enforcement Guidelines
+
+Community leaders will follow these Community Impact Guidelines in determining
+the consequences for any action they deem in violation of this Code of Conduct:
+
+### 1. Correction
+
+**Community Impact**: Use of inappropriate language or other behavior deemed
+unprofessional or unwelcome in the community.
+
+**Consequence**: A private, written warning from community leaders, providing
+clarity around the nature of the violation and an explanation of why the
+behavior was inappropriate. A public apology may be requested.
+
+### 2. Warning
+
+**Community Impact**: A violation through a single incident or series
+of actions.
+
+**Consequence**: A warning with consequences for continued behavior. No
+interaction with the people involved, including unsolicited interaction with
+those enforcing the Code of Conduct, for a specified period of time. This
+includes avoiding interactions in community spaces as well as external channels
+like social media. Violating these terms may lead to a temporary or
+permanent ban.
+
+### 3. Temporary Ban
+
+**Community Impact**: A serious violation of community standards, including
+sustained inappropriate behavior.
+
+**Consequence**: A temporary ban from any sort of interaction or public
+communication with the community for a specified period of time. No public or
+private interaction with the people involved, including unsolicited interaction
+with those enforcing the Code of Conduct, is allowed during this period.
+Violating these terms may lead to a permanent ban.
+
+### 4. Permanent Ban
+
+**Community Impact**: Demonstrating a pattern of violation of community
+standards, including sustained inappropriate behavior, harassment of an
+individual, or aggression toward or disparagement of classes of individuals.
+
+**Consequence**: A permanent ban from any sort of public interaction within
+the community.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage],
+version 2.0, available at
+https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
+
+Community Impact Guidelines were inspired by [Mozilla's code of conduct
+enforcement ladder](https://github.com/mozilla/diversity).
+
+[homepage]: https://www.contributor-covenant.org
+
+For answers to common questions about this code of conduct, see the FAQ at
+https://www.contributor-covenant.org/faq. Translations are available at
+https://www.contributor-covenant.org/translations.
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..3c4bb40
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,25 @@
+FROM bitnami/java:17.0.12-10-debian-12-r4 AS builder
+
+WORKDIR /opt
+
+RUN apt update && apt upgrade -y
+
+FROM builder AS app
+
+WORKDIR /app
+
+RUN addgroup --gid 1001 app && adduser --uid 1001 --gid 1001 --home /app app
+RUN apt clean && chown app /app
+
+COPY --chown=1001 --from=builder /opt /opt
+
+USER 1001
+
+COPY --chown=1001 target/*.jar /app/app.jar
+
+COPY --chown=1001 script/entrypoint.sh /opt/scripts/entrypoint.sh
+RUN chmod 0740 /opt/scripts/entrypoint.sh
+
+CMD /opt/scripts/entrypoint.sh
+
+EXPOSE 8100
\ No newline at end of file
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 0000000..028608a
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,28 @@
+# Security Policy
+
+## Supported Versions
+
+Use this section to tell people about which versions of your project are
+currently being supported with security updates.
+
+| Version | Supported |
+|---------|--------------------|
+| v1.x.x | :white_check_mark: |
+
+## Reporting a Vulnerability
+
+If you find a security vulnerability affecting any of our supported projects, please
+email [edward@cheng.sydney](mailto:edward@cheng.sydney), rather than opening a public issue on GitHub. After receiving
+the initial report, we will endeavor to keep you informed of the progress towards a fix and full announcement. We may
+ask you for additional information. You are also welcome to propose a patch or solution.
+
+Report security bugs in third-party modules to the person or team maintaining the module.
+
+## Coordinated Disclosure
+
+We aim to patch confirmed vulnerabilities within 30 days or less, disclosing the details of those vulnerabilities when a
+patch is published. We ask that you refrain from sharing your report with others while we work on our patch.
+
+We may want to coordinate an advisory with you to be published simultaneously with the patch, but you are also welcome
+to self-disclose after 90 days if you prefer. We will never publish information about you or our communications with you
+without your permission.
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..94ad21d
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,68 @@
+
+
+ 4.0.0
+
+
+ sydney.cheng
+ ec-super-pom
+ 1.0.1
+
+
+ ec-config-server
+ 1.0.0-SNAPSHOT
+
+
+
+ MIT License
+ https://www.opensource.org/licenses/mit-license.php
+
+
+
+
+ Edward Cheng
+ edward@cheng.sydney
+ cheng.sydney
+ https://3dwardch3ng.github.io/
+
+
+
+ scm:git:git://github.com/3dwardch3ng/ec-config-server.git
+ scm:git:ssh://github.com:3dwardch3ng/ec-config-server.git
+ https://github.com/3dwardch3ng/ec-config-server/tree/main
+
+
+ GitHub
+ https://github.com/3dwardch3ng/ec-config-server/issues
+
+
+
+ 17
+ 17
+ UTF-8
+
+ jacoco
+ reuseReports
+ ${project.basedir}/../target/site/jacoco/jacoco.xml
+ java
+ **/config/*
+ 3dwardch3ng
+ https://sonarqube.cluster.edward.sydney
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-config-server
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
\ No newline at end of file
diff --git a/renovate.json b/renovate.json
new file mode 100644
index 0000000..20f725b
--- /dev/null
+++ b/renovate.json
@@ -0,0 +1,16 @@
+{
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
+ "extends": [
+ "local>3dwardch3ng/renovate-config"
+ ],
+ "packageRules": [
+ {
+ "matchDatasources": ["maven"],
+ "registryUrls": [
+ "https://nexus.cluster.edward.sydney/repository/maven-releases",
+ "https://nexus.cluster.edward.sydney/repository/maven-snapshots",
+ "https://repo.maven.apache.org/maven2"
+ ]
+ }
+ ]
+}
diff --git a/script/entrypoint.sh b/script/entrypoint.sh
new file mode 100644
index 0000000..af05428
--- /dev/null
+++ b/script/entrypoint.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+if test "${SPRING_PROFILES_ACTIVE}" != '';
+then
+ echo "spring active profile is "$SPRING_PROFILES_ACTIVE
+ JAVA_OPTIONS="$JAVA_OPTIONS -Dspring.profiles.active=cloud,native,$SPRING_PROFILES_ACTIVE"
+fi
+
+if test "${LOCAL_DOCKER_ENV}" = 'true';
+then
+ JAVA_OPTIONS="$JAVA_OPTIONS -Dspring.profiles.active=native"
+fi
+
+java $JAVA_OPTIONS -jar /app/app.jar
\ No newline at end of file
diff --git a/src/main/java/sydney/cheng/microservice/Application.java b/src/main/java/sydney/cheng/microservice/Application.java
new file mode 100644
index 0000000..71ff6be
--- /dev/null
+++ b/src/main/java/sydney/cheng/microservice/Application.java
@@ -0,0 +1,13 @@
+package sydney.cheng.microservice;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.config.server.EnableConfigServer;
+
+@SpringBootApplication
+@EnableConfigServer
+public class Application {
+ public static void main(String[] arguments) {
+ SpringApplication.run(Application.class, arguments);
+ }
+}
diff --git a/src/main/resources/application-k3s-cluster.yml b/src/main/resources/application-k3s-cluster.yml
new file mode 100644
index 0000000..9390a3c
--- /dev/null
+++ b/src/main/resources/application-k3s-cluster.yml
@@ -0,0 +1,10 @@
+spring:
+ cloud:
+ kubernetes:
+ discovery:
+ all-namespaces: false
+ service-labels:
+ spring-boot: true
+eureka:
+ client:
+ enabled: false
\ No newline at end of file
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
new file mode 100644
index 0000000..05ba5fc
--- /dev/null
+++ b/src/main/resources/application.yml
@@ -0,0 +1,38 @@
+server:
+ port: 8888
+
+management:
+ endpoints:
+ web:
+ exposure:
+ include: '*'
+ endpoint:
+ env:
+ post:
+ enabled: true
+ logfile:
+ external-file: '/app/log/${spring.application.name}.log'
+ web:
+ exposure:
+ include: '*'
+ health:
+ show-details: always
+
+logging:
+ file:
+ name: '/app/log/${spring.application.name}.log'
+
+spring:
+ profiles:
+ active: native
+ cloud:
+ config:
+ server:
+ native:
+ search-locations: ${CONFIG_NATIVE_SEARCH_LOCATION:/opt/config}
+ health:
+ enabled: false
+
+eureka:
+ client:
+ enabled: false
\ No newline at end of file
diff --git a/src/main/resources/bootstrap.yaml b/src/main/resources/bootstrap.yaml
new file mode 100644
index 0000000..69b7b18
--- /dev/null
+++ b/src/main/resources/bootstrap.yaml
@@ -0,0 +1,5 @@
+application:
+ name: ec-config-server
+spring:
+ application:
+ name: ${application.name}
\ No newline at end of file