refactor: move modules under app/ directory and update file paths (#3938)

# Description of Changes

- **What was changed:**  
- Renamed top-level directories: `stirling-pdf` → `app/core`, `common` →
`app/common`, `proprietary` → `app/proprietary`.
- Updated all path references in `.gitattributes`, GitHub workflows
(`.github/workflows/*`), scripts (`.github/scripts/*`), `.gitignore`,
Dockerfiles, license files, and template settings to reflect the new
structure.
- Added a new CI job `check-generateOpenApiDocs` to generate and upload
OpenAPI documentation.
- Removed redundant `@Autowired` annotations from `TempFileShutdownHook`
and `UnlockPDFFormsController`.
- Minor formatting and comment adjustments in YAML templates and
resource files.

- **Why the change was made:**  
- To introduce a clear `app/` directory hierarchy for core, common, and
proprietary modules, improving organization and maintainability.
- To ensure continuous integration and Docker builds continue to work
seamlessly with the reorganized structure.
- To automate OpenAPI documentation generation as part of the CI
pipeline.

---

## Checklist

### General

- [x] I have read the [Contribution
Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md)
- [x] I have read the [Stirling-PDF Developer
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md)
(if applicable)
- [ ] I have read the [How to add new languages to
Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md)
(if applicable)
- [x] I have performed a self-review of my own code
- [x] My changes generate no new warnings

### Documentation

- [ ] I have updated relevant docs on [Stirling-PDF's doc
repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/)
(if functionality has heavily changed)
- [ ] I have read the section [Add New Translation
Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags)
(for new translation tags only)

### UI Changes (if applicable)

- [ ] Screenshots or videos demonstrating the UI changes are attached
(e.g., as comments or direct attachments in the PR)

### Testing (if applicable)

- [ ] I have tested my changes locally. Refer to the [Testing
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md#6-testing)
for more details.
This commit is contained in:
Ludy 2025-07-14 21:53:11 +02:00 committed by GitHub
parent 38b53d7cc1
commit 299d52c517
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1155 changed files with 219 additions and 276 deletions

View File

@ -1,5 +1,9 @@
# Formatting # Formatting
5f771b785130154ed47952635b7acef371ffe0ec 5f771b785130154ed47952635b7acef371ffe0ec
7fa5e130d99227c2202ebddfdd91348176ec0c7b
14d4fbb2a36195eedb034785e5a5ff6a47f268c6
ee8030c1c4148062cde15c49c67d04ef03930c55
fcd41924f5f261febfa9d9a92994671f3ebc97d6
# Normalize files # Normalize files
55d4fda01b2f39f5b7d7b4fda5214bd7ff0fd5dd 55d4fda01b2f39f5b7d7b4fda5214bd7ff0fd5dd

14
.gitattributes vendored
View File

@ -1,10 +1,10 @@
* text=auto eol=lf * text=auto eol=lf
# Ignore all JavaScript files in a directory # Ignore all JavaScript files in a directory
stirling-pdf/src/main/resources/static/pdfjs/* linguist-vendored app/core/src/main/resources/static/pdfjs/* linguist-vendored
stirling-pdf/src/main/resources/static/pdfjs/** linguist-vendored app/core/src/main/resources/static/pdfjs/** linguist-vendored
stirling-pdf/src/main/resources/static/pdfjs-legacy/* linguist-vendored app/core/src/main/resources/static/pdfjs-legacy/* linguist-vendored
stirling-pdf/src/main/resources/static/pdfjs-legacy/** linguist-vendored app/core/src/main/resources/static/pdfjs-legacy/** linguist-vendored
stirling-pdf/src/main/resources/static/css/bootstrap-icons.css linguist-vendored app/core/src/main/resources/static/css/bootstrap-icons.css linguist-vendored
stirling-pdf/src/main/resources/static/css/bootstrap.min.css linguist-vendored app/core/src/main/resources/static/css/bootstrap.min.css linguist-vendored
stirling-pdf/src/main/resources/static/css/fonts/* linguist-vendored app/core/src/main/resources/static/css/fonts/* linguist-vendored

View File

@ -34,6 +34,9 @@ labels:
- label: "Documentation" - label: "Documentation"
title: '^docs(\([^)]*\))?:|^docs:.*' title: '^docs(\([^)]*\))?:|^docs:.*'
- label: "Documentation"
title: '^.*\(docs\):.*'
- label: "dependencies" - label: "dependencies"
title: '^deps(\([^)]*\))?:|^deps:.*' title: '^deps(\([^)]*\))?:|^deps:.*'
@ -45,53 +48,53 @@ labels:
- label: 'Translation' - label: 'Translation'
files: files:
- 'stirling-pdf/src/main/resources/messages_[a-zA-Z_]{2}_[a-zA-Z_]{2,7}.properties' - 'app/core/src/main/resources/messages_[a-zA-Z_]{2}_[a-zA-Z_]{2,7}.properties'
- 'scripts/ignore_translation.toml' - 'scripts/ignore_translation.toml'
- 'stirling-pdf/src/main/resources/templates/fragments/languages.html' - 'app/core/src/main/resources/templates/fragments/languages.html'
- '.github/scripts/check_language_properties.py' - '.github/scripts/check_language_properties.py'
- label: 'Front End' - label: 'Front End'
files: files:
- 'stirling-pdf/src/main/resources/templates/.*' - 'app/core/src/main/resources/templates/.*'
- 'proprietary/src/main/resources/templates/.*' - 'app/proprietary/src/main/resources/templates/.*'
- 'stirling-pdf/src/main/resources/static/.*' - 'app/core/src/main/resources/static/.*'
- 'proprietary/src/main/resources/static/.*' - 'app/proprietary/src/main/resources/static/.*'
- 'stirling-pdf/src/main/java/stirling/software/SPDF/controller/web/.*' - 'app/core/src/main/java/stirling/software/SPDF/controller/web/.*'
- 'stirling-pdf/src/main/java/stirling/software/SPDF/UI/.*' - 'app/core/src/main/java/stirling/software/SPDF/UI/.*'
- 'proprietary/src/main/java/stirling/software/proprietary/security/controller/web/.*' - 'app/proprietary/src/main/java/stirling/software/proprietary/security/controller/web/.*'
- label: 'Java' - label: 'Java'
files: files:
- 'common/src/main/java/.*.java' - 'app/common/src/main/java/.*.java'
- 'proprietary/src/main/java/.*.java' - 'app/proprietary/src/main/java/.*.java'
- 'stirling-pdf/src/main/java/.*.java' - 'app/core/src/main/java/.*.java'
- label: 'Back End' - label: 'Back End'
files: files:
- 'stirling-pdf/src/main/java/stirling/software/SPDF/config/.*' - 'app/core/src/main/java/stirling/software/SPDF/config/.*'
- 'stirling-pdf/src/main/java/stirling/software/SPDF/controller/.*' - 'app/core/src/main/java/stirling/software/SPDF/controller/.*'
- 'stirling-pdf/src/main/resources/settings.yml.template' - 'app/core/src/main/resources/settings.yml.template'
- 'stirling-pdf/src/main/resources/application.properties' - 'app/core/src/main/resources/application.properties'
- 'stirling-pdf/src/main/resources/banner.txt' - 'app/core/src/main/resources/banner.txt'
- 'scripts/png_to_webp.py' - 'scripts/png_to_webp.py'
- 'split_photos.py' - 'split_photos.py'
- 'application.properties' - 'application.properties'
- label: 'Security' - label: 'Security'
files: files:
- 'proprietary/src/main/java/stirling/software/proprietary/security/.*' - 'app/proprietary/src/main/java/stirling/software/proprietary/security/.*'
- 'scripts/download-security-jar.sh' - 'scripts/download-security-jar.sh'
- '.github/workflows/dependency-review.yml' - '.github/workflows/dependency-review.yml'
- '.github/workflows/scorecards.yml' - '.github/workflows/scorecards.yml'
- label: 'API' - label: 'API'
files: files:
- 'stirling-pdf/src/main/java/stirling/software/SPDF/config/OpenApiConfig.java' - 'app/core/src/main/java/stirling/software/SPDF/config/OpenApiConfig.java'
- 'stirling-pdf/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java' - 'app/core/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java'
- 'stirling-pdf/src/main/java/stirling/software/SPDF/controller/api/.*' - 'app/core/src/main/java/stirling/software/SPDF/controller/api/.*'
- 'stirling-pdf/src/main/java/stirling/software/SPDF/model/api/.*' - 'app/core/src/main/java/stirling/software/SPDF/model/api/.*'
- 'stirling-pdf/src/main/java/stirling/software/SPDF/service/ApiDocService.java' - 'app/core/src/main/java/stirling/software/SPDF/service/ApiDocService.java'
- 'proprietary/src/main/java/stirling/software/proprietary/security/controller/api/.*' - 'app/proprietary/src/main/java/stirling/software/proprietary/security/controller/api/.*'
- 'scripts/png_to_webp.py' - 'scripts/png_to_webp.py'
- 'split_photos.py' - 'split_photos.py'
- '.github/workflows/swagger.yml' - '.github/workflows/swagger.yml'
@ -127,12 +130,13 @@ labels:
- '.github/workflows/pre_commit.yml' - '.github/workflows/pre_commit.yml'
- 'devGuide/.*' - 'devGuide/.*'
- 'devTools/.*' - 'devTools/.*'
- 'devTools/.*'
- label: 'Test' - label: 'Test'
files: files:
- 'common/src/test/.*' - 'app/common/src/test/.*'
- 'proprietary/src/test/.*' - 'app/proprietary/src/test/.*'
- 'stirling-pdf/src/test/.*' - 'app/core/src/test/.*'
- 'testing/.*' - 'testing/.*'
- '.github/workflows/scorecards.yml' - '.github/workflows/scorecards.yml'
- 'exampleYmlFiles/test_cicd.yml' - 'exampleYmlFiles/test_cicd.yml'
@ -148,6 +152,6 @@ labels:
- 'gradlew.bat' - 'gradlew.bat'
- 'settings.gradle' - 'settings.gradle'
- 'build.gradle' - 'build.gradle'
- 'common/build.gradle' - 'app/common/build.gradle'
- 'proprietary/build.gradle' - 'app/proprietary/build.gradle'
- 'stirling-pdf/build.gradle' - 'app/core/build.gradle'

View File

@ -1,86 +0,0 @@
Translation:
- changed-files:
- any-glob-to-any-file: 'stirling-pdf/src/main/resources/messages_*_*.properties'
- any-glob-to-any-file: 'scripts/ignore_translation.toml'
- any-glob-to-any-file: 'stirling-pdf/src/main/resources/templates/fragments/languages.html'
Front End:
- changed-files:
- any-glob-to-any-file: 'stirling-pdf/src/main/resources/templates/**/*'
- any-glob-to-any-file: 'stirling-pdf/src/main/resources/static/**/*'
- any-glob-to-any-file: 'stirling-pdf/src/main/java/stirling/software/SPDF/controller/web/**'
- any-glob-to-any-file: 'stirling-pdf/src/main/java/stirling/software/SPDF/UI/**/*'
Java:
- changed-files:
- any-glob-to-any-file: 'common/src/main/java/**/*.java'
- any-glob-to-any-file: 'proprietary/src/main/java/**/*.java'
- any-glob-to-any-file: 'stirling-pdf/src/main/java/**/*.java'
Back End:
- changed-files:
- any-glob-to-any-file: 'stirling-pdf/src/main/java/stirling/software/SPDF/config/**/*'
- any-glob-to-any-file: 'stirling-pdf/src/main/java/stirling/software/SPDF/controller/**/*'
- any-glob-to-any-file: 'stirling-pdf/src/main/resources/settings.yml.template'
- any-glob-to-any-file: 'stirling-pdf/src/main/resources/application.properties'
- any-glob-to-any-file: 'stirling-pdf/src/main/resources/banner.txt'
- any-glob-to-any-file: 'scripts/png_to_webp.py'
- any-glob-to-any-file: 'split_photos.py'
Security:
- changed-files:
- any-glob-to-any-file: 'proprietary/src/main/java/stirling/software/proprietary/security/**/*'
- any-glob-to-any-file: 'scripts/download-security-jar.sh'
- any-glob-to-any-file: '.github/workflows/dependency-review.yml'
- any-glob-to-any-file: '.github/workflows/scorecards.yml'
API:
- changed-files:
- any-glob-to-any-file: 'stirling-pdf/src/main/java/stirling/software/SPDF/config/OpenApiConfig.java'
- any-glob-to-any-file: 'stirling-pdf/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java'
- any-glob-to-any-file: 'stirling-pdf/src/main/java/stirling/software/SPDF/controller/api/**/*'
- any-glob-to-any-file: 'stirling-pdf/src/main/java/stirling/software/SPDF/model/api/**/*'
- any-glob-to-any-file: 'scripts/png_to_webp.py'
- any-glob-to-any-file: 'split_photos.py'
- any-glob-to-any-file: '.github/workflows/swagger.yml'
Documentation:
- changed-files:
- any-glob-to-any-file: '**/*.md'
- any-glob-to-any-file: 'scripts/counter_translation.py'
- any-glob-to-any-file: 'scripts/ignore_translation.toml'
Docker:
- changed-files:
- any-glob-to-any-file: '.github/workflows/build.yml'
- any-glob-to-any-file: '.github/workflows/push-docker.yml'
- any-glob-to-any-file: 'Dockerfile'
- any-glob-to-any-file: 'Dockerfile.fat'
- any-glob-to-any-file: 'Dockerfile.ultra-lite'
- any-glob-to-any-file: 'exampleYmlFiles/*.yml'
- any-glob-to-any-file: 'scripts/download-security-jar.sh'
- any-glob-to-any-file: 'scripts/init.sh'
- any-glob-to-any-file: 'scripts/init-without-ocr.sh'
- any-glob-to-any-file: 'scripts/installFonts.sh'
- any-glob-to-any-file: 'test.sh'
- any-glob-to-any-file: 'test2.sh'
Devtools:
- changed-files:
- any-glob-to-any-file: '.devcontainer/**/*'
- any-glob-to-any-file: 'Dockerfile.dev'
Test:
- changed-files:
- any-glob-to-any-file: 'cucumber/**/*'
- any-glob-to-any-file: 'common/src/test/**/*'
- any-glob-to-any-file: 'proprietary/src/test/**/*'
- any-glob-to-any-file: 'stirling-pdf/src/test/**/*'
- any-glob-to-any-file: 'src/testing/**/*'
- any-glob-to-any-file: '.pre-commit-config'
- any-glob-to-any-file: '.github/workflows/pre_commit.yml'
- any-glob-to-any-file: '.github/workflows/scorecards.yml'
Github:
- changed-files:
- any-glob-to-any-file: '.github/**/*'

View File

@ -197,7 +197,7 @@ def check_for_differences(reference_file, file_list, branch, actor):
if len(file_list) == 1: if len(file_list) == 1:
file_arr = file_list[0].split() file_arr = file_list[0].split()
base_dir = os.path.abspath( base_dir = os.path.abspath(
os.path.join(os.getcwd(), "stirling-pdf", "src", "main", "resources") os.path.join(os.getcwd(), "app", "core", "src", "main", "resources")
) )
for file_path in file_arr: for file_path in file_arr:
@ -219,13 +219,14 @@ def check_for_differences(reference_file, file_list, branch, actor):
# only local windows command # only local windows command
not file_normpath.startswith( not file_normpath.startswith(
os.path.join( os.path.join(
"", "stirling-pdf", "src", "main", "resources", "messages_" "", "app", "core", "src", "main", "resources", "messages_"
) )
) )
and not file_normpath.startswith( and not file_normpath.startswith(
os.path.join( os.path.join(
os.getcwd(), os.getcwd(),
"stirling-pdf", "app",
"core",
"src", "src",
"main", "main",
"resources", "resources",
@ -328,7 +329,7 @@ def check_for_differences(reference_file, file_list, branch, actor):
report.append("## ❌ Overall Check Status: **_Failed_**") report.append("## ❌ Overall Check Status: **_Failed_**")
report.append("") report.append("")
report.append( report.append(
f"@{actor} please check your translation if it conforms to the standard. Follow the format of [messages_en_GB.properties](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/stirling-pdf/src/main/resources/messages_en_GB.properties)" f"@{actor} please check your translation if it conforms to the standard. Follow the format of [messages_en_GB.properties](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/app/core/src/main/resources/messages_en_GB.properties)"
) )
else: else:
report.append("## ✅ Overall Check Status: **_Success_**") report.append("## ✅ Overall Check Status: **_Success_**")
@ -389,7 +390,8 @@ if __name__ == "__main__":
file_list = glob.glob( file_list = glob.glob(
os.path.join( os.path.join(
os.getcwd(), os.getcwd(),
"stirling-pdf", "app",
"core",
"src", "src",
"main", "main",
"resources", "resources",

View File

@ -1,27 +0,0 @@
name: "Pull Request Labeler"
on:
pull_request_target:
types: [opened, synchronize]
permissions:
contents: read
jobs:
labeler:
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: Harden Runner
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Apply Labels
uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5.0.0
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
configuration-path: .github/labeler-config.yml
sync-labels: true

View File

@ -48,12 +48,12 @@ jobs:
if: always() if: always()
run: | run: |
declare -a dirs=( declare -a dirs=(
"stirling-pdf/build/reports/tests/" "app/core/build/reports/tests/"
"stirling-pdf/build/test-results/" "app/core/build/test-results/"
"common/build/reports/tests/" "app/common/build/reports/tests/"
"common/build/test-results/" "app/common/build/test-results/"
"proprietary/build/reports/tests/" "app/proprietary/build/reports/tests/"
"proprietary/build/test-results/" "app/proprietary/build/test-results/"
) )
missing_reports=() missing_reports=()
for dir in "${dirs[@]}"; do for dir in "${dirs[@]}"; do
@ -74,19 +74,46 @@ jobs:
with: with:
name: test-reports-jdk-${{ matrix.jdk-version }}-spring-security-${{ matrix.spring-security }} name: test-reports-jdk-${{ matrix.jdk-version }}-spring-security-${{ matrix.spring-security }}
path: | path: |
stirling-pdf/build/reports/tests/ app/core/build/reports/tests/
stirling-pdf/build/test-results/ app/core/build/test-results/
stirling-pdf/build/reports/problems/ app/core/build/reports/problems/
common/build/reports/tests/ app/common/build/reports/tests/
common/build/test-results/ app/common/build/test-results/
common/build/reports/problems/ app/common/build/reports/problems/
proprietary/build/reports/tests/ app/proprietary/build/reports/tests/
proprietary/build/test-results/ app/proprietary/build/test-results/
proprietary/build/reports/problems/ app/proprietary/build/reports/problems/
build/reports/problems/ build/reports/problems/
retention-days: 3 retention-days: 3
if-no-files-found: warn if-no-files-found: warn
check-generateOpenApiDocs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
with:
egress-policy: audit
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Set up JDK 17
uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
with:
java-version: "17"
distribution: "temurin"
- uses: gradle/actions/setup-gradle@ac638b010cf58a27ee6c972d7336334ccaf61c96 # v4.4.1
- name: Generate OpenAPI documentation
run: ./gradlew :stirling-pdf:generateOpenApiDocs
- name: Upload OpenAPI Documentation
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: openapi-docs
path: ./SwaggerDoc.json
check-licence: check-licence:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:

View File

@ -4,7 +4,7 @@ on:
pull_request_target: pull_request_target:
types: [opened, synchronize, reopened] types: [opened, synchronize, reopened]
paths: paths:
- "stirling-pdf/src/main/resources/messages_*.properties" - "app/core/src/main/resources/messages_*.properties"
permissions: permissions:
contents: read # Allow read access to repository content contents: read # Allow read access to repository content
@ -67,7 +67,7 @@ jobs:
exit 1 exit 1
fi fi
# Get changed files and filter for properties files, handle case where no matches are found # Get changed files and filter for properties files, handle case where no matches are found
gh pr view ${{ steps.get-pr-data.outputs.pr_number }} --json files -q ".files[].path" | grep -E '^stirling-pdf/src/main/resources/messages_[a-zA-Z_]{2}_[a-zA-Z_]{2,7}\.properties$' > changed_files.txt || echo "No matching properties files found in PR" gh pr view ${{ steps.get-pr-data.outputs.pr_number }} --json files -q ".files[].path" | grep -E '^app/core/src/main/resources/messages_[a-zA-Z_]{2}_[a-zA-Z_]{2,7}\.properties$' > changed_files.txt || echo "No matching properties files found in PR"
# Check if any files were found # Check if any files were found
if [ ! -s changed_files.txt ]; then if [ ! -s changed_files.txt ]; then
echo "No properties files changed in this PR" echo "No properties files changed in this PR"
@ -117,7 +117,7 @@ jobs:
const changedFiles = files const changedFiles = files
.filter(file => .filter(file =>
file.status !== "removed" && file.status !== "removed" &&
/^stirling-pdf\/src\/main\/resources\/messages_[a-zA-Z_]{2}_[a-zA-Z_]{2,7}\.properties$/.test(file.filename) /^app\/core\/src\/main\/resources\/messages_[a-zA-Z_]{2}_[a-zA-Z_]{2,7}\.properties$/.test(file.filename)
) )
.map(file => file.filename); .map(file => file.filename);
@ -157,12 +157,12 @@ jobs:
// Determine reference file // Determine reference file
let referenceFilePath; let referenceFilePath;
if (changedFiles.includes("stirling-pdf/src/main/resources/messages_en_GB.properties")) { if (changedFiles.includes("app/core/src/main/resources/messages_en_GB.properties")) {
console.log("Using PR branch reference file."); console.log("Using PR branch reference file.");
const { data: fileContent } = await github.rest.repos.getContent({ const { data: fileContent } = await github.rest.repos.getContent({
owner: prRepoOwner, owner: prRepoOwner,
repo: prRepoName, repo: prRepoName,
path: "stirling-pdf/src/main/resources/messages_en_GB.properties", path: "app/core/src/main/resources/messages_en_GB.properties",
ref: branch, ref: branch,
}); });
@ -174,7 +174,7 @@ jobs:
const { data: fileContent } = await github.rest.repos.getContent({ const { data: fileContent } = await github.rest.repos.getContent({
owner: repoOwner, owner: repoOwner,
repo: repoName, repo: repoName,
path: "stirling-pdf/src/main/resources/messages_en_GB.properties", path: "app/core/src/main/resources/messages_en_GB.properties",
ref: "main", ref: "main",
}); });

View File

@ -57,11 +57,11 @@ jobs:
- name: Move and rename license file - name: Move and rename license file
run: | run: |
mv build/reports/dependency-license/index.json stirling-pdf/src/main/resources/static/3rdPartyLicenses.json mv build/reports/dependency-license/index.json app/core/src/main/resources/static/3rdPartyLicenses.json
- name: Commit changes - name: Commit changes
run: | run: |
git add stirling-pdf/src/main/resources/static/3rdPartyLicenses.json git add app/core/src/main/resources/static/3rdPartyLicenses.json
git diff --staged --quiet || echo "CHANGES_DETECTED=true" >> $GITHUB_ENV git diff --staged --quiet || echo "CHANGES_DETECTED=true" >> $GITHUB_ENV
- name: Create Pull Request - name: Create Pull Request

View File

@ -86,7 +86,7 @@ jobs:
run: | run: |
mkdir ./binaries mkdir ./binaries
mv ./build/launch4j/Stirling-PDF.exe ./binaries/win-Stirling-PDF-portable-Server${{ matrix.file_suffix }}.exe mv ./build/launch4j/Stirling-PDF.exe ./binaries/win-Stirling-PDF-portable-Server${{ matrix.file_suffix }}.exe
mv ./stirling-pdf/build/libs/stirling-pdf-${{ needs.read_versions.outputs.version }}.jar ./binaries/Stirling-PDF${{ matrix.file_suffix }}.jar mv ./app/core/build/libs/stirling-pdf-${{ needs.read_versions.outputs.version }}.jar ./binaries/Stirling-PDF${{ matrix.file_suffix }}.jar
- name: Upload build artifacts - name: Upload build artifacts
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2

View File

@ -8,8 +8,8 @@ on:
paths: paths:
- "build.gradle" - "build.gradle"
- "README.md" - "README.md"
- "stirling-pdf/src/main/resources/messages_*.properties" - "app/core/src/main/resources/messages_*.properties"
- "stirling-pdf/src/main/resources/static/3rdPartyLicenses.json" - "app/core/src/main/resources/static/3rdPartyLicenses.json"
- "scripts/ignore_translation.toml" - "scripts/ignore_translation.toml"
permissions: permissions:
@ -41,11 +41,11 @@ jobs:
- name: Sync translation property files - name: Sync translation property files
run: | run: |
python .github/scripts/check_language_properties.py --reference-file "stirling-pdf/src/main/resources/messages_en_GB.properties" --branch main python .github/scripts/check_language_properties.py --reference-file "app/core/src/main/resources/messages_en_GB.properties" --branch main
- name: Commit translation files - name: Commit translation files
run: | run: |
git add stirling-pdf/src/main/resources/messages_*.properties git add app/core/src/main/resources/messages_*.properties
git diff --staged --quiet || git commit -m ":memo: Sync translation files" || echo "No changes detected" git diff --staged --quiet || git commit -m ":memo: Sync translation files" || echo "No changes detected"
- name: Install dependencies - name: Install dependencies
@ -101,4 +101,4 @@ jobs:
sign-commits: true sign-commits: true
add-paths: | add-paths: |
README.md README.md
stirling-pdf/src/main/resources/messages_*.properties app/core/src/main/resources/messages_*.properties

6
.gitignore vendored
View File

@ -125,9 +125,9 @@ SwaggerDoc.json
*.rar *.rar
*.db *.db
/build /build
/stirling-pdf/build /app/core/build
/common/build /app/common/build
/proprietary/build /app/proprietary/build
# Byte-compiled / optimized / DLL files # Byte-compiled / optimized / DLL files
__pycache__/ __pycache__/

View File

@ -20,7 +20,7 @@ repos:
- --skip="./.*,*.csv,*.json,*.ambr" - --skip="./.*,*.csv,*.json,*.ambr"
- --quiet-level=2 - --quiet-level=2
files: \.(html|css|js|py|md)$ files: \.(html|css|js|py|md)$
exclude: (.vscode|.devcontainer|stirling-pdf/src/main/resources|Dockerfile|.*/pdfjs.*|.*/thirdParty.*|bootstrap.*|.*\.min\..*|.*diff\.js) exclude: (.vscode|.devcontainer|app/core/src/main/resources|app/proprietary/src/main/resources|Dockerfile|.*/pdfjs.*|.*/thirdParty.*|bootstrap.*|.*\.min\..*|.*diff\.js)
- repo: https://github.com/gitleaks/gitleaks - repo: https://github.com/gitleaks/gitleaks
rev: v8.27.2 rev: v8.27.2
hooks: hooks:
@ -34,3 +34,13 @@ repos:
- id: trailing-whitespace - id: trailing-whitespace
files: ^.*(\.js|\.java|\.py|\.yml)$ files: ^.*(\.js|\.java|\.py|\.yml)$
exclude: ^(.*/pdfjs.*|.*/thirdParty.*|bootstrap.*|.*\.min\..*|.*diff\.js|\.github/workflows/.*$) exclude: ^(.*/pdfjs.*|.*/thirdParty.*|bootstrap.*|.*\.min\..*|.*diff\.js|\.github/workflows/.*$)
# - repo: https://github.com/thibaudcolas/pre-commit-stylelint
# rev: v16.21.1
# hooks:
# - id: stylelint
# additional_dependencies:
# - stylelint@16.21.1
# - stylelint-config-standard@38.0.0
# - "@stylistic/stylelint-plugin@3.1.3"
# files: \.(css)$
# args: [--fix]

26
.vscode/settings.json vendored
View File

@ -3,6 +3,9 @@
"editor.guides.bracketPairs": "active", "editor.guides.bracketPairs": "active",
"editor.guides.bracketPairsHorizontal": "active", "editor.guides.bracketPairsHorizontal": "active",
"cSpell.enabled": false, "cSpell.enabled": false,
"[feature]": {
"editor.defaultFormatter": "alexkrechik.cucumberautocomplete"
},
"[java]": { "[java]": {
"editor.defaultFormatter": "josevseb.google-java-format-for-vs-code" "editor.defaultFormatter": "josevseb.google-java-format-for-vs-code"
}, },
@ -76,13 +79,17 @@
".venv*/", ".venv*/",
".vscode/", ".vscode/",
"bin/", "bin/",
"common/bin/", "app/core/bin/",
"proprietary/bin/", "app/common/bin/",
"app/proprietary/bin/",
"build/", "build/",
"common/build/", "app/core/build/",
"proprietary/build/", "app/common/build/",
"app/proprietary/build/",
"configs/", "configs/",
"app/core/configs/",
"customFiles/", "customFiles/",
"app/core/customFiles/",
"docs/", "docs/",
"exampleYmlFiles", "exampleYmlFiles",
"gradle/", "gradle/",
@ -94,8 +101,9 @@
".git-blame-ignore-revs", ".git-blame-ignore-revs",
".gitattributes", ".gitattributes",
".gitignore", ".gitignore",
"common/.gitignore", "app/core/.gitignore",
"proprietary/.gitignore", "app/common/.gitignore",
"app/proprietary/.gitignore",
".pre-commit-config.yaml", ".pre-commit-config.yaml",
], ],
// Enables signature help in Java. // Enables signature help in Java.
@ -127,8 +135,8 @@
"html.format.maxPreserveNewLines": 2, "html.format.maxPreserveNewLines": 2,
"stylelint.configFile": "devTools/.stylelintrc.json", "stylelint.configFile": "devTools/.stylelintrc.json",
"java.project.sourcePaths": [ "java.project.sourcePaths": [
"stirling-pdf/src/main/java", "app/core/src/main/java",
"common/src/main/java", "app/common/src/main/java",
"proprietary/src/main/java" "app/proprietary/src/main/java"
] ]
} }

View File

@ -4,8 +4,8 @@ FROM alpine:3.22.0@sha256:8a1f59ffb675680d47db6337b49d22281a139e9d709335b492be02
# Copy necessary files # Copy necessary files
COPY scripts /scripts COPY scripts /scripts
COPY pipeline /pipeline COPY pipeline /pipeline
COPY stirling-pdf/src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto/ COPY app/core/src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto/
COPY stirling-pdf/build/libs/*.jar app.jar COPY app/core/build/libs/*.jar app.jar
ARG VERSION_TAG ARG VERSION_TAG

View File

@ -5,9 +5,9 @@ COPY build.gradle .
COPY settings.gradle . COPY settings.gradle .
COPY gradlew . COPY gradlew .
COPY gradle gradle/ COPY gradle gradle/
COPY stirling-pdf/build.gradle stirling-pdf/. COPY app/core/build.gradle core/.
COPY common/build.gradle common/. COPY app/common/build.gradle common/.
COPY proprietary/build.gradle proprietary/. COPY app/proprietary/build.gradle proprietary/.
RUN ./gradlew build -x spotlessApply -x spotlessCheck -x test -x sonarqube || return 0 RUN ./gradlew build -x spotlessApply -x spotlessCheck -x test -x sonarqube || return 0
# Set the working directory # Set the working directory
@ -27,8 +27,8 @@ FROM alpine:3.22.0@sha256:8a1f59ffb675680d47db6337b49d22281a139e9d709335b492be02
# Copy necessary files # Copy necessary files
COPY scripts /scripts COPY scripts /scripts
COPY pipeline /pipeline COPY pipeline /pipeline
COPY stirling-pdf/src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto/ COPY app/core/src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto/
COPY --from=build /app/stirling-pdf/build/libs/*.jar app.jar COPY --from=build /app/core/build/libs/*.jar app.jar
ARG VERSION_TAG ARG VERSION_TAG

View File

@ -22,7 +22,7 @@ COPY scripts/download-security-jar.sh /scripts/download-security-jar.sh
COPY scripts/init-without-ocr.sh /scripts/init-without-ocr.sh COPY scripts/init-without-ocr.sh /scripts/init-without-ocr.sh
COPY scripts/installFonts.sh /scripts/installFonts.sh COPY scripts/installFonts.sh /scripts/installFonts.sh
COPY pipeline /pipeline COPY pipeline /pipeline
COPY stirling-pdf/build/libs/*.jar app.jar COPY app/core/build/libs/*.jar app.jar
# Set up necessary directories and permissions # Set up necessary directories and permissions
RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /etc/apk/repositories && \ RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /etc/apk/repositories && \
@ -52,4 +52,4 @@ EXPOSE 8080/tcp
# Run the application # Run the application
ENTRYPOINT ["tini", "--", "/scripts/init-without-ocr.sh"] ENTRYPOINT ["tini", "--", "/scripts/init-without-ocr.sh"]
CMD ["java", "-Dfile.encoding=UTF-8", "-Djava.io.tmpdir=/tmp/stirling-pdf", "-jar", "/app.jar"] CMD ["java", "-Dfile.encoding=UTF-8", "-Djava.io.tmpdir=/tmp/stirling-pdf", "-jar", "/app.jar"]

View File

@ -4,8 +4,8 @@ Copyright (c) 2025 Stirling PDF Inc.
Portions of this software are licensed as follows: Portions of this software are licensed as follows:
* All content that resides under the "proprietary/" directory of this repository, * All content that resides under the "app/proprietary/" directory of this repository,
if that directory exists, is licensed under the license defined in "proprietary/LICENSE". if that directory exists, is licensed under the license defined in "app/proprietary/LICENSE".
* Content outside of the above mentioned directories or restrictions above is * Content outside of the above mentioned directories or restrictions above is
available under the MIT License as defined below. available under the MIT License as defined below.

View File

@ -124,7 +124,7 @@ SwaggerDoc.json
*.rar *.rar
*.db *.db
/build /build
/common/build/ /app/common/build/
# Byte-compiled / optimized / DLL files # Byte-compiled / optimized / DLL files
__pycache__/ __pycache__/

View File

@ -6,7 +6,6 @@ import java.nio.file.Path;
import java.util.Set; import java.util.Set;
import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -24,7 +23,6 @@ public class TempFileShutdownHook implements DisposableBean {
private final TempFileRegistry registry; private final TempFileRegistry registry;
@Autowired
public TempFileShutdownHook(TempFileRegistry registry) { public TempFileShutdownHook(TempFileRegistry registry) {
this.registry = registry; this.registry = registry;

Some files were not shown because too many files have changed in this diff Show More