-
Notifications
You must be signed in to change notification settings - Fork 0
feat(spring-oracle-example): initialize Spring Boot project with Orac… #67
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,68 @@ | ||||||||||||||||||||||||||||||||
| name: spring-oracle-example CI Build | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| on: | ||||||||||||||||||||||||||||||||
| pull_request: | ||||||||||||||||||||||||||||||||
| branches: [master] | ||||||||||||||||||||||||||||||||
| paths: | ||||||||||||||||||||||||||||||||
| - "spring-oracle-example/**" | ||||||||||||||||||||||||||||||||
| types: | ||||||||||||||||||||||||||||||||
| - opened | ||||||||||||||||||||||||||||||||
| - synchronize | ||||||||||||||||||||||||||||||||
| - reopened | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| jobs: | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| integration-tests: | ||||||||||||||||||||||||||||||||
| name: Run Unit & Integration Tests | ||||||||||||||||||||||||||||||||
| runs-on: ubuntu-latest | ||||||||||||||||||||||||||||||||
| defaults: | ||||||||||||||||||||||||||||||||
| run: | ||||||||||||||||||||||||||||||||
| working-directory: spring-oracle-example | ||||||||||||||||||||||||||||||||
| strategy: | ||||||||||||||||||||||||||||||||
| matrix: | ||||||||||||||||||||||||||||||||
| distribution: [ 'temurin' ] | ||||||||||||||||||||||||||||||||
| java: [ '21' ] | ||||||||||||||||||||||||||||||||
|
Comment on lines
+23
to
+24
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧹 Nitpick (assertive) Fix bracket spacing in matrices (YAMLlint) Compact arrays silence lint errors. Apply: - distribution: [ 'temurin' ]
- java: [ '21' ]
+ distribution: ["temurin"]
+ java: ["21"]📝 Committable suggestion
Suggested change
🧰 Tools🪛 YAMLlint (1.37.1)[error] 23-23: too many spaces inside brackets (brackets) [error] 23-23: too many spaces inside brackets (brackets) [error] 24-24: too many spaces inside brackets (brackets) [error] 24-24: too many spaces inside brackets (brackets) 🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||
| steps: | ||||||||||||||||||||||||||||||||
| - uses: actions/checkout@v5 | ||||||||||||||||||||||||||||||||
| with: | ||||||||||||||||||||||||||||||||
| fetch-depth: 0 | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| - name: Set up JDK ${{ matrix.java }} | ||||||||||||||||||||||||||||||||
| uses: actions/setup-java@v5.0.0 | ||||||||||||||||||||||||||||||||
| with: | ||||||||||||||||||||||||||||||||
| java-version: ${{ matrix.java }} | ||||||||||||||||||||||||||||||||
| distribution: ${{ matrix.distribution }} | ||||||||||||||||||||||||||||||||
| cache: 'maven' | ||||||||||||||||||||||||||||||||
| - name: Build and analyze | ||||||||||||||||||||||||||||||||
| run: ./mvnw clean verify | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| health-check: | ||||||||||||||||||||||||||||||||
| name: Health Check on Services | ||||||||||||||||||||||||||||||||
| runs-on: ubuntu-latest | ||||||||||||||||||||||||||||||||
| steps: | ||||||||||||||||||||||||||||||||
| - name: Checkout repository and submodules | ||||||||||||||||||||||||||||||||
| uses: actions/checkout@v5 | ||||||||||||||||||||||||||||||||
| with: | ||||||||||||||||||||||||||||||||
| submodules: true | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| - name: Extract service names from docker compose | ||||||||||||||||||||||||||||||||
| id: services | ||||||||||||||||||||||||||||||||
| run: | | ||||||||||||||||||||||||||||||||
| echo "services<<EOF" >> $GITHUB_OUTPUT | ||||||||||||||||||||||||||||||||
| docker compose -f ./spring-oracle-example/compose.yaml config --services >> $GITHUB_OUTPUT | ||||||||||||||||||||||||||||||||
| echo "EOF" >> $GITHUB_OUTPUT | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
|
Comment on lines
+48
to
+54
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Harden GITHUB_OUTPUT handling and normalize services list Fail fast on errors and emit a space-delimited list to avoid quoting/newline pitfalls downstream. - - name: Extract service names from docker compose
+ - name: Extract service names from docker compose
id: services
run: |
- echo "services<<EOF" >> $GITHUB_OUTPUT
- docker compose -f ./spring-oracle-example/compose.yaml config --services >> $GITHUB_OUTPUT
- echo "EOF" >> $GITHUB_OUTPUT
+ set -euo pipefail
+ services="$(docker compose -f ./spring-oracle-example/compose.yaml config --services | tr '\n' ' ' | sed -e 's/[[:space:]]\+/ /g' -e 's/[[:space:]]$//')"
+ echo "services=${services}" >> "$GITHUB_OUTPUT"📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||
| - name: Start containers with Compose Action | ||||||||||||||||||||||||||||||||
| uses: hoverkraft-tech/compose-action@v2.3.0 | ||||||||||||||||||||||||||||||||
| with: | ||||||||||||||||||||||||||||||||
| compose-file: './spring-oracle-example/compose.yaml' | ||||||||||||||||||||||||||||||||
| services: ${{ steps.services.outputs.services }} | ||||||||||||||||||||||||||||||||
| up-flags: '--build' | ||||||||||||||||||||||||||||||||
| down-flags: '--volumes' | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
|
Comment on lines
+55
to
+62
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Pin third-party action and clean up orphans on down Pin by commit SHA for security; remove orphaned containers on teardown to reduce cross-run interference. - - name: Start containers with Compose Action
- uses: hoverkraft-tech/compose-action@v2.3.0
+ - name: Start containers with Compose Action
+ uses: hoverkraft-tech/compose-action@v2.3.0
+ # TODO: consider pinning to the action's commit SHA for supply-chain hardening
with:
compose-file: './spring-oracle-example/compose.yaml'
services: ${{ steps.services.outputs.services }}
up-flags: '--build'
- down-flags: '--volumes'
+ down-flags: '--volumes --remove-orphans'📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||
| - name: Wait for containers to initialize | ||||||||||||||||||||||||||||||||
| run: sleep 30 | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| - name: Check container health | ||||||||||||||||||||||||||||||||
| run: | | ||||||||||||||||||||||||||||||||
| ./.github/scripts/check-container-health.sh "${{ steps.services.outputs.services }}" | ||||||||||||||||||||||||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,62 @@ | ||
| # Include any files or directories that you don't want to be copied to your | ||
| # container here (e.g., local build artifacts, temporary files, etc.). | ||
| # | ||
| # For more help, visit the .dockerignore file reference guide at | ||
| # https://docs.docker.com/go/build-context-dockerignore/ | ||
|
|
||
| **/.DS_Store | ||
| **/.classpath | ||
| **/.dockerignore | ||
| **/.env | ||
| **/.factorypath | ||
| **/.git | ||
| **/.gitignore | ||
| **/.idea | ||
| **/.project | ||
| **/.sts4-cache | ||
| **/.settings | ||
| **/.toolstarget | ||
| **/.vs | ||
| **/.vscode | ||
| **/.next | ||
| **/.cache | ||
| **/*.dbmdl | ||
| **/*.jfm | ||
| **/charts | ||
| **/docker-compose* | ||
| **/compose.y*ml | ||
| **/Dockerfile* | ||
| **/secrets.dev.yaml | ||
| **/values.dev.yaml | ||
| **/vendor | ||
| LICENSE | ||
| README.md | ||
| **/*.class | ||
| **/*.iml | ||
| **/*.ipr | ||
| **/*.iws | ||
| **/*.log | ||
| **/.apt_generated | ||
| **/.gradle | ||
| **/.gradletasknamecache | ||
| **/.nb-gradle | ||
| **/.springBeans | ||
| **/build | ||
| **/dist | ||
| **/gradle-app.setting | ||
| **/nbbuild | ||
| **/nbdist | ||
| **/nbproject/private | ||
| **/target | ||
| *.ctxt | ||
| .mtj.tmp | ||
| .mvn/timing.properties | ||
| buildNumber.properties | ||
| dependency-reduced-pom.xml | ||
| hs_err_pid* | ||
| pom.xml.next | ||
| pom.xml.releaseBackup | ||
| pom.xml.tag | ||
| pom.xml.versionsBackup | ||
| release.properties | ||
| replay_pid* |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| /mvnw text eol=lf | ||
| *.cmd text eol=crlf |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,30 @@ | ||
| name: CI Build | ||
|
|
||
| on: | ||
| push: | ||
| branches: | ||
| - "**" | ||
|
|
||
| jobs: | ||
| build: | ||
| name: Build | ||
| runs-on: ubuntu-latest | ||
| strategy: | ||
| matrix: | ||
| distribution: [ 'temurin' ] | ||
| java: [ '21' ] | ||
| steps: | ||
| - uses: actions/checkout@v5 | ||
|
|
||
| - name: Setup Java 21 | ||
| uses: actions/setup-java@v5 | ||
| with: | ||
| java-version: ${{ matrix.java }} | ||
| distribution: ${{ matrix.distribution }} | ||
| cache: 'maven' | ||
|
|
||
| - name: Grant execute permission for mvnw | ||
| run: chmod +x mvnw | ||
|
|
||
| - name: Build with Maven | ||
| run: ./mvnw clean verify |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,32 @@ | ||
| target/ | ||
| .mvn/wrapper/maven-wrapper.jar | ||
| !**/src/main/**/target/ | ||
| !**/src/test/**/target/ | ||
|
|
||
| ### STS ### | ||
| .apt_generated | ||
| .classpath | ||
| .factorypath | ||
| .project | ||
| .settings | ||
| .springBeans | ||
| .sts4-cache | ||
|
|
||
| ### IntelliJ IDEA ### | ||
| .idea | ||
| *.iws | ||
| *.iml | ||
| *.ipr | ||
|
|
||
| ### NetBeans ### | ||
| /nbproject/private/ | ||
| /nbbuild/ | ||
| /dist/ | ||
| /nbdist/ | ||
| /.nb-gradle/ | ||
| build/ | ||
| !**/src/main/**/build/ | ||
| !**/src/test/**/build/ | ||
|
|
||
| ### VS Code ### | ||
| .vscode/ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| distributionType=only-script | ||
| distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.11/apache-maven-3.9.11-bin.zip |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,47 @@ | ||
| FROM eclipse-temurin:21-jdk-jammy as deps | ||
|
|
||
| WORKDIR /build | ||
|
|
||
| COPY --chmod=0755 mvnw mvnw | ||
| COPY .mvn/ .mvn/ | ||
|
|
||
| RUN --mount=type=bind,source=pom.xml,target=pom.xml \ | ||
| --mount=type=cache,target=/root/.m2 ./mvnw dependency:go-offline -DskipTests | ||
|
|
||
| FROM deps as package | ||
|
|
||
| WORKDIR /build | ||
|
|
||
| COPY ./src src/ | ||
| RUN --mount=type=bind,source=pom.xml,target=pom.xml \ | ||
| --mount=type=cache,target=/root/.m2 \ | ||
| ./mvnw package -DskipTests && \ | ||
| mv target/$(./mvnw help:evaluate -Dexpression=project.artifactId -q -DforceStdout)-$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout).jar target/app.jar | ||
|
|
||
| FROM package as extract | ||
|
|
||
| WORKDIR /build | ||
|
|
||
| RUN java -Djarmode=layertools -jar target/app.jar extract --destination target/extracted | ||
|
|
||
| FROM eclipse-temurin:21-jre-jammy AS final | ||
|
|
||
| ARG UID=10001 | ||
| RUN adduser \ | ||
| --disabled-password \ | ||
| --gecos "" \ | ||
| --home "/nonexistent" \ | ||
| --shell "/sbin/nologin" \ | ||
| --no-create-home \ | ||
| --uid "${UID}" \ | ||
| appuser | ||
| USER appuser | ||
|
|
||
| COPY --from=extract build/target/extracted/dependencies/ ./ | ||
| COPY --from=extract build/target/extracted/spring-boot-loader/ ./ | ||
| COPY --from=extract build/target/extracted/snapshot-dependencies/ ./ | ||
| COPY --from=extract build/target/extracted/application/ ./ | ||
|
|
||
| EXPOSE 8080 | ||
|
|
||
| ENTRYPOINT [ "java", "org.springframework.boot.loader.launch.JarLauncher" ] |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,32 @@ | ||
| services: | ||
|
|
||
| app: | ||
| build: | ||
| context: . | ||
| restart: unless-stopped | ||
| depends_on: | ||
| - oracle-db | ||
| environment: | ||
| SPRING_PROFILES_ACTIVE: default | ||
| SERVER_PORT: 8080 | ||
| SPRING_DATASOURCE_URL: jdbc:oracle:thin:@oracle-db:1521/XEPDB1 | ||
| SPRING_DATASOURCE_USERNAME: TEST_SCHEMA | ||
| SPRING_DATASOURCE_PASSWORD: Ag101Pwd123 | ||
| SPRING_DATASOURCE_DRIVER: oracle.jdbc.OracleDriver | ||
| SPRING_JPA_HIBERNATE_DDL_AUTO: update | ||
| SPRING_JPA_SHOW_SQL: true | ||
| SPRING_HIBERNATE_DIALECT: org.hibernate.dialect.OracleDialect | ||
| ports: | ||
| - "8080:8080" | ||
|
|
||
| oracle-db: | ||
| image: gvenzl/oracle-xe:21-slim | ||
| container_name: oracle-xe | ||
| restart: unless-stopped | ||
| ports: | ||
| - "1521:1521" | ||
| environment: | ||
| ORACLE_PASSWORD: "Admin123" | ||
| shm_size: 1g | ||
| volumes: | ||
| - ./docker/oracle:/docker-entrypoint-initdb.d |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| ALTER SESSION SET CONTAINER = XEPDB1; | ||
| CREATE USER TEST_SCHEMA IDENTIFIED BY Ag101Pwd123; | ||
| GRANT CREATE SESSION TO TEST_SCHEMA; | ||
| GRANT CONNECT, RESOURCE TO TEST_SCHEMA; | ||
| ALTER USER TEST_SCHEMA QUOTA UNLIMITED ON USERS; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Quote the “on” key to satisfy YAML linters
Prevents YAML 1.1 truthy parsing complaints.
Apply:
📝 Committable suggestion
🧰 Tools
🪛 YAMLlint (1.37.1)
[warning] 3-3: truthy value should be one of [false, true]
(truthy)
🤖 Prompt for AI Agents