Skip to content

Commit 159a20e

Browse files
kaklakariadaSebastian Bär
andauthored
#413: Load plugins from JAR files (#416)
Co-authored-by: Sebastian Bär <redcatbear@ursus-minor.de>
1 parent bf0b66d commit 159a20e

File tree

54 files changed

+1832
-257
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+1832
-257
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
name: Add a new third-party plugin
3+
about: Update OFT documentation to include a new third-party plugin
4+
5+
---
6+
7+
## Plugin Details
8+
9+
* Name:
10+
* Description:
11+
* Web page:
12+
* Source code repository:
13+
* Plugin type (importer, exporter or reporter):

.github/workflows/broken_links_checker.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: Broken Links Checker
22

33
on:
44
push:
5-
branches: [ main ]
5+
branches: [main]
66
pull_request:
77

88
jobs:
@@ -18,6 +18,6 @@ jobs:
1818
echo '{ "aliveStatusCodes": [429, 200] }' > ./target/broken_links_checker.json
1919
- uses: gaurav-nelson/github-action-markdown-link-check@v1
2020
with:
21-
use-quiet-mode: 'yes'
22-
use-verbose-mode: 'yes'
23-
config-file: ./target/broken_links_checker.json
21+
use-quiet-mode: "yes"
22+
use-verbose-mode: "yes"
23+
config-file: ./target/broken_links_checker.json

.github/workflows/build.yml

Lines changed: 77 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,16 @@ name: Build
22

33
on:
44
push:
5-
branches: [ main ]
5+
branches: [main]
66
pull_request:
77

88
jobs:
99
matrix-build:
10-
1110
permissions:
1211
contents: read
1312

1413
strategy:
15-
fail-fast: true
14+
fail-fast: false
1615
matrix:
1716
java: [17]
1817
os: [ubuntu-latest, macos-latest, windows-latest]
@@ -34,83 +33,81 @@ jobs:
3433
DEFAULT_OS: ubuntu-latest
3534

3635
steps:
37-
38-
- uses: actions/checkout@v4
39-
with:
40-
fetch-depth: 0
41-
42-
- uses: actions/setup-java@v4
43-
with:
44-
distribution: 'temurin'
45-
java-version: |
46-
17
47-
21
48-
cache: 'maven'
49-
50-
- name: Cache SonarQube packages
51-
if: ${{ env.DEFAULT_OS == matrix.os && env.DEFAULT_JAVA == matrix.java }}
52-
uses: actions/cache@v4
53-
with:
54-
path: ~/.sonar/cache
55-
key: ${{ runner.os }}-sonar
56-
restore-keys: ${{ runner.os }}-sonar
57-
58-
- name: Build with Java ${{ matrix.java }}
59-
run: |
60-
mvn --batch-mode -T 1C clean org.jacoco:jacoco-maven-plugin:prepare-agent install \
61-
-Djava.version=${{ matrix.java }}
62-
63-
- name: Sonar analysis
64-
if: ${{ env.DEFAULT_OS == matrix.os && env.DEFAULT_JAVA == matrix.java && env.SONAR_TOKEN != null }}
65-
run: |
66-
mvn --batch-mode org.sonarsource.scanner.maven:sonar-maven-plugin:sonar \
67-
-Dsonar.token=$SONAR_TOKEN
68-
env:
69-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
70-
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
71-
72-
- name: Verify reproducible build
73-
# Build fails on Windows with error "Failed to execute goal org.apache.maven.plugins:maven-artifact-plugin:3.5.0:compare (default-cli) on project openfasttrace-reporter-plaintext: Could not copy D:\a\openfasttrace\openfasttrace\reporter\plaintext\target\openfasttrace-reporter-plaintext-3.8.0.buildcompareto D:\a\openfasttrace\openfasttrace\target\openfasttrace-root-0.0.0.buildcompare"
74-
if: ${{ matrix.os != 'windows-latest' }}
75-
run: |
76-
mvn --batch-mode -T 1C clean verify artifact:compare -DskipTests \
77-
-Djava.version=${{ matrix.java }}
78-
79-
- name: Archive aggregated reproducible build report
80-
uses: actions/upload-artifact@v4
81-
if: ${{ matrix.os != 'windows-latest' }}
82-
with:
83-
name: reproducible-build-report-${{ matrix.os }}-java-${{ matrix.java }}
84-
path: |
85-
target/openfasttrace-root-0.0.0.buildcompare
86-
target/openfasttrace-root-0.0.0.buildinfo
87-
if-no-files-found: error
88-
89-
- name: Archive oft binary
90-
uses: actions/upload-artifact@v4
91-
if: ${{ env.DEFAULT_OS == matrix.os && env.DEFAULT_JAVA == matrix.java }}
92-
with:
93-
name: openfasttrace-binaries
94-
path: |
95-
product/target/openfasttrace-*.jar
96-
!product/target/openfasttrace-*-javadoc.jar
97-
!product/target/openfasttrace-*-sources.jar
98-
if-no-files-found: error
99-
100-
- name: Run self-trace
101-
run: ./oft-self-trace.sh
102-
103-
- name: Upload self-tracing report
104-
uses: actions/upload-artifact@v4
105-
if: ${{ env.DEFAULT_OS == matrix.os && env.DEFAULT_JAVA == matrix.java }}
106-
with:
107-
name: self-tracing-report
108-
path: target/self-trace-report.html
109-
if-no-files-found: error
110-
111-
- name: Check shell scripts
112-
if: ${{ env.DEFAULT_OS == matrix.os && env.DEFAULT_JAVA == matrix.java }}
113-
run: .github/workflows/run_shellcheck.sh
36+
- uses: actions/checkout@v4
37+
with:
38+
fetch-depth: 0
39+
40+
- uses: actions/setup-java@v4
41+
name: Set up Java ${{ matrix.java }}
42+
with:
43+
distribution: "temurin"
44+
java-version: ${{ matrix.java }}
45+
cache: "maven"
46+
47+
- name: Cache SonarQube packages
48+
if: ${{ env.DEFAULT_OS == matrix.os && env.DEFAULT_JAVA == matrix.java }}
49+
uses: actions/cache@v4
50+
with:
51+
path: ~/.sonar/cache
52+
key: ${{ runner.os }}-sonar
53+
restore-keys: ${{ runner.os }}-sonar
54+
55+
- name: Build with Java ${{ matrix.java }}
56+
run: |
57+
mvn --batch-mode -T 1C clean org.jacoco:jacoco-maven-plugin:prepare-agent install \
58+
-Djava.version=${{ matrix.java }}
59+
60+
- name: Sonar analysis
61+
if: ${{ env.DEFAULT_OS == matrix.os && env.DEFAULT_JAVA == matrix.java && env.SONAR_TOKEN != null }}
62+
run: |
63+
mvn --batch-mode org.sonarsource.scanner.maven:sonar-maven-plugin:sonar \
64+
-Dsonar.token=$SONAR_TOKEN
65+
env:
66+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
67+
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
68+
69+
- name: Verify reproducible build
70+
# Build fails on Windows with error "Failed to execute goal org.apache.maven.plugins:maven-artifact-plugin:3.5.0:compare (default-cli) on project openfasttrace-reporter-plaintext: Could not copy D:\a\openfasttrace\openfasttrace\reporter\plaintext\target\openfasttrace-reporter-plaintext-3.8.0.buildcompareto D:\a\openfasttrace\openfasttrace\target\openfasttrace-root-0.0.0.buildcompare"
71+
if: ${{ matrix.os != 'windows-latest' }}
72+
run: |
73+
mvn --batch-mode -T 1C clean verify artifact:compare -DskipTests \
74+
-Djava.version=${{ matrix.java }}
75+
76+
- name: Archive aggregated reproducible build report
77+
uses: actions/upload-artifact@v4
78+
if: ${{ matrix.os != 'windows-latest' }}
79+
with:
80+
name: reproducible-build-report-${{ matrix.os }}-java-${{ matrix.java }}
81+
path: |
82+
target/openfasttrace-root-0.0.0.buildcompare
83+
target/openfasttrace-root-0.0.0.buildinfo
84+
if-no-files-found: error
85+
86+
- name: Archive oft binary
87+
uses: actions/upload-artifact@v4
88+
if: ${{ env.DEFAULT_OS == matrix.os && env.DEFAULT_JAVA == matrix.java }}
89+
with:
90+
name: openfasttrace-binaries
91+
path: |
92+
product/target/openfasttrace-*.jar
93+
!product/target/openfasttrace-*-javadoc.jar
94+
!product/target/openfasttrace-*-sources.jar
95+
if-no-files-found: error
96+
97+
- name: Run self-trace
98+
run: ./oft-self-trace.sh
99+
100+
- name: Upload self-tracing report
101+
uses: actions/upload-artifact@v4
102+
if: ${{ env.DEFAULT_OS == matrix.os && env.DEFAULT_JAVA == matrix.java }}
103+
with:
104+
name: self-tracing-report
105+
path: target/self-trace-report.html
106+
if-no-files-found: error
107+
108+
- name: Check shell scripts
109+
if: ${{ env.DEFAULT_OS == matrix.os && env.DEFAULT_JAVA == matrix.java }}
110+
run: .github/workflows/run_shellcheck.sh
114111

115112
build:
116113
needs: matrix-build

.github/workflows/codeql-analysis.yml

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ name: "CodeQL"
22

33
on:
44
push:
5-
branches: [ main ]
5+
branches: [main]
66
pull_request:
7-
branches: [ main ]
7+
branches: [main]
88
schedule:
9-
- cron: '0 4 * * 3'
9+
- cron: "0 4 * * 3"
1010

1111
jobs:
1212
analyze:
@@ -21,22 +21,22 @@ jobs:
2121
cancel-in-progress: true
2222

2323
steps:
24-
- name: Checkout repository
25-
uses: actions/checkout@v4
24+
- name: Checkout repository
25+
uses: actions/checkout@v4
2626

27-
- uses: actions/setup-java@v4
28-
with:
29-
distribution: 'temurin'
30-
java-version: 17
31-
cache: 'maven'
27+
- uses: actions/setup-java@v4
28+
with:
29+
distribution: "temurin"
30+
java-version: 17
31+
cache: "maven"
3232

33-
- name: Initialize CodeQL
34-
uses: github/codeql-action/init@v3
35-
with:
36-
languages: java
33+
- name: Initialize CodeQL
34+
uses: github/codeql-action/init@v3
35+
with:
36+
languages: java
3737

38-
- name: Autobuild
39-
uses: github/codeql-action/autobuild@v3
38+
- name: Autobuild
39+
uses: github/codeql-action/autobuild@v3
4040

41-
- name: Perform CodeQL Analysis
42-
uses: github/codeql-action/analyze@v3
41+
- name: Perform CodeQL Analysis
42+
uses: github/codeql-action/analyze@v3

.github/workflows/gh-pages.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@ on:
44
push:
55
branches: ["main"]
66
workflow_dispatch:
7-
# Temporarily also run on pull requests
8-
pull_request:
9-
branches: ["main"]
107

118
permissions:
129
contents: read

.vscode/launch.json

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
{
2+
"version": "0.2.0",
3+
"configurations": [
4+
{
5+
"type": "java",
6+
"name": "Run Self-Trace",
7+
"request": "launch",
8+
"mainClass": "org.itsallcode.openfasttrace.core.cli.CliStarter",
9+
"projectName": "openfasttrace",
10+
"args": [
11+
"trace",
12+
"--log-level",
13+
"INFO",
14+
"${workspaceFolder}/doc/spec",
15+
"${workspaceFolder}/importer/lightweightmarkup/src",
16+
"${workspaceFolder}/importer/markdown/src",
17+
"${workspaceFolder}/importer/restructuredtext/src",
18+
"${workspaceFolder}/importer/specobject/src",
19+
"${workspaceFolder}/importer/zip/src",
20+
"${workspaceFolder}/importer/tag/src",
21+
"${workspaceFolder}/core/src/main",
22+
"${workspaceFolder}/core/src/test/java",
23+
"${workspaceFolder}/reporter/plaintext/src",
24+
"${workspaceFolder}/reporter/html/src",
25+
"${workspaceFolder}/reporter/aspec/src",
26+
"${workspaceFolder}/product/src/test/java",
27+
"${workspaceFolder}/api/src",
28+
"${workspaceFolder}/exporter/specobject/src",
29+
"${workspaceFolder}/exporter/common/src",
30+
"${workspaceFolder}/testutil/src"
31+
]
32+
}
33+
]
34+
}

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ Sonarcloud status:
3232
**User Guides**
3333

3434
* [📖 User Guide](doc/user_guide.md)
35+
* [🔌 Extending OpenFastTrace With Plugins](doc/plugins.md)
3536
* [💲 Command Line Usage](core/src/main/resources/usage.txt)
3637

3738
**News and Discussions**
@@ -47,6 +48,7 @@ Sonarcloud status:
4748

4849
* [🎟️ Project Board](https://github.com/orgs/itsallcode/projects/3/views/1)
4950
* [🦮 Developer Guide](doc/developer_guide.md)
51+
* [🔌 Plugin Developer Guide](doc/plugin_developer_guide.md)
5052
* [🎁 Contributing Guide](CONTRIBUTING.md)
5153
* [💡 System Requirements](doc/spec/system_requirements.md)
5254
* [👜 Design](doc/spec/design.md)

api/src/main/java/org/itsallcode/openfasttrace/api/importer/MultiFileImporter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ public interface MultiFileImporter
2626
MultiFileImporter importFile(InputFile file);
2727

2828
/**
29-
* Import from the path, independently of whether it is represents a
30-
* directory or a file.
29+
* Import from the path, independently of whether it represents a directory
30+
* or a file.
3131
*
3232
* @param paths
3333
* lists of paths to files or directories

core/src/main/java/module-info.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@
1010
exports org.itsallcode.openfasttrace.core;
1111
exports org.itsallcode.openfasttrace.core.cli;
1212
exports org.itsallcode.openfasttrace.core.cli.commands;
13+
exports org.itsallcode.openfasttrace.core.cli.logging;
1314
exports org.itsallcode.openfasttrace.core.report;
1415
exports org.itsallcode.openfasttrace.core.exporter;
1516
exports org.itsallcode.openfasttrace.core.importer;
1617
exports org.itsallcode.openfasttrace.core.serviceloader;
1718

18-
requires java.logging;
19+
requires transitive java.logging;
1920
requires transitive org.itsallcode.openfasttrace.api;
2021

2122
uses org.itsallcode.openfasttrace.api.exporter.ExporterFactory;

core/src/main/java/org/itsallcode/openfasttrace/core/ServiceFactory.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import org.itsallcode.openfasttrace.core.importer.ImporterServiceImpl;
1414
import org.itsallcode.openfasttrace.core.report.ReportService;
1515
import org.itsallcode.openfasttrace.core.report.ReporterFactoryLoader;
16-
import org.itsallcode.openfasttrace.core.serviceloader.InitializingServiceLoader;
1716

1817
class ServiceFactory
1918
{
@@ -25,15 +24,12 @@ ExporterService createExporterService()
2524
ImporterService createImporterService(final ImportSettings settings)
2625
{
2726
final ImporterContext context = new ImporterContext(settings);
28-
final InitializingServiceLoader<ImporterFactory, ImporterContext> serviceLoader = InitializingServiceLoader
29-
.load(ImporterFactory.class, context);
30-
final ImporterService service = new ImporterServiceImpl(
31-
new ImporterFactoryLoader(serviceLoader), settings);
27+
final ImporterService service = new ImporterServiceImpl(new ImporterFactoryLoader(context), settings);
3228
context.setImporterService(service);
3329
return service;
3430
}
3531

36-
Linker createLinker(List<SpecificationItem> items)
32+
Linker createLinker(final List<SpecificationItem> items)
3733
{
3834
return new Linker(items);
3935
}

0 commit comments

Comments
 (0)