mirror of
https://github.com/actions/setup-java.git
synced 2026-08-18 18:52:57 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| cb0d854574 |
@@ -24,7 +24,6 @@ jobs:
|
|||||||
warm-caches:
|
warm-caches:
|
||||||
name: Warm ${{ matrix.tool }} ${{ matrix.profile }} caches (${{ matrix.os }})
|
name: Warm ${{ matrix.tool }} ${{ matrix.profile }} caches (${{ matrix.os }})
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
cache-mode: write-only
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -66,7 +65,6 @@ jobs:
|
|||||||
name: Benchmark ${{ matrix.tool }} ${{ matrix.profile }} (${{ matrix.os }})
|
name: Benchmark ${{ matrix.tool }} ${{ matrix.profile }} (${{ matrix.os }})
|
||||||
needs: warm-caches
|
needs: warm-caches
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
cache-mode: read
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ defaults:
|
|||||||
jobs:
|
jobs:
|
||||||
gradle-save:
|
gradle-save:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
cache-mode: write-only
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -49,7 +48,6 @@ jobs:
|
|||||||
bash __tests__/check-dir.sh "$HOME/.gradle/wrapper/dists"
|
bash __tests__/check-dir.sh "$HOME/.gradle/wrapper/dists"
|
||||||
gradle-restore:
|
gradle-restore:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
cache-mode: read
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -74,7 +72,6 @@ jobs:
|
|||||||
run: bash __tests__/check-dir.sh "$HOME/.gradle/wrapper/dists"
|
run: bash __tests__/check-dir.sh "$HOME/.gradle/wrapper/dists"
|
||||||
maven-save:
|
maven-save:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
cache-mode: write-only
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -100,7 +97,6 @@ jobs:
|
|||||||
bash __tests__/check-dir.sh "$HOME/.m2/wrapper/dists"
|
bash __tests__/check-dir.sh "$HOME/.m2/wrapper/dists"
|
||||||
maven-restore:
|
maven-restore:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
cache-mode: read
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -125,7 +121,6 @@ jobs:
|
|||||||
run: bash __tests__/check-dir.sh "$HOME/.m2/wrapper/dists"
|
run: bash __tests__/check-dir.sh "$HOME/.m2/wrapper/dists"
|
||||||
sbt-save:
|
sbt-save:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
cache-mode: write-only
|
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -165,7 +160,6 @@ jobs:
|
|||||||
run: bash "$GITHUB_WORKSPACE/__tests__/check-dir.sh" "$HOME/.cache/coursier"
|
run: bash "$GITHUB_WORKSPACE/__tests__/check-dir.sh" "$HOME/.cache/coursier"
|
||||||
sbt-restore:
|
sbt-restore:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
cache-mode: read
|
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -200,7 +194,6 @@ jobs:
|
|||||||
run: bash "$GITHUB_WORKSPACE/__tests__/check-dir.sh" "$HOME/.cache/coursier"
|
run: bash "$GITHUB_WORKSPACE/__tests__/check-dir.sh" "$HOME/.cache/coursier"
|
||||||
gradle1-save:
|
gradle1-save:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
cache-mode: write-only
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -229,7 +222,6 @@ jobs:
|
|||||||
bash __tests__/check-dir.sh "$HOME/.gradle/wrapper/dists"
|
bash __tests__/check-dir.sh "$HOME/.gradle/wrapper/dists"
|
||||||
gradle1-restore:
|
gradle1-restore:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
cache-mode: read
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -254,7 +246,6 @@ jobs:
|
|||||||
run: bash __tests__/check-dir.sh "$HOME/.gradle/wrapper/dists"
|
run: bash __tests__/check-dir.sh "$HOME/.gradle/wrapper/dists"
|
||||||
gradle2-restore:
|
gradle2-restore:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
cache-mode: read
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -277,7 +268,6 @@ jobs:
|
|||||||
run: bash __tests__/check-dir.sh "$HOME/.gradle/caches" absent
|
run: bash __tests__/check-dir.sh "$HOME/.gradle/caches" absent
|
||||||
maven1-save:
|
maven1-save:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
cache-mode: write-only
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -304,7 +294,6 @@ jobs:
|
|||||||
bash __tests__/check-dir.sh "$HOME/.m2/wrapper/dists"
|
bash __tests__/check-dir.sh "$HOME/.m2/wrapper/dists"
|
||||||
maven1-restore:
|
maven1-restore:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
cache-mode: read
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -329,7 +318,6 @@ jobs:
|
|||||||
run: bash __tests__/check-dir.sh "$HOME/.m2/wrapper/dists"
|
run: bash __tests__/check-dir.sh "$HOME/.m2/wrapper/dists"
|
||||||
maven2-restore:
|
maven2-restore:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
cache-mode: read
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -354,7 +342,6 @@ jobs:
|
|||||||
run: bash __tests__/check-dir.sh "$HOME/.m2/repository" absent
|
run: bash __tests__/check-dir.sh "$HOME/.m2/repository" absent
|
||||||
sbt1-save:
|
sbt1-save:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
cache-mode: write-only
|
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -395,7 +382,6 @@ jobs:
|
|||||||
run: bash "$GITHUB_WORKSPACE/__tests__/check-dir.sh" "$HOME/.cache/coursier"
|
run: bash "$GITHUB_WORKSPACE/__tests__/check-dir.sh" "$HOME/.cache/coursier"
|
||||||
sbt1-restore:
|
sbt1-restore:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
cache-mode: read
|
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -430,7 +416,6 @@ jobs:
|
|||||||
run: bash "$GITHUB_WORKSPACE/__tests__/check-dir.sh" "$HOME/.cache/coursier"
|
run: bash "$GITHUB_WORKSPACE/__tests__/check-dir.sh" "$HOME/.cache/coursier"
|
||||||
sbt2-restore:
|
sbt2-restore:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
cache-mode: read
|
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -465,7 +450,6 @@ jobs:
|
|||||||
run: bash "$GITHUB_WORKSPACE/__tests__/check-dir.sh" "$HOME/.cache/coursier" absent
|
run: bash "$GITHUB_WORKSPACE/__tests__/check-dir.sh" "$HOME/.cache/coursier" absent
|
||||||
custom-maven-path-save:
|
custom-maven-path-save:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
cache-mode: write-only
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v7
|
uses: actions/checkout@v7
|
||||||
@@ -490,7 +474,6 @@ jobs:
|
|||||||
bash __tests__/check-dir.sh "$RUNNER_TEMP/setup-java-custom-maven-repository"
|
bash __tests__/check-dir.sh "$RUNNER_TEMP/setup-java-custom-maven-repository"
|
||||||
custom-maven-path-restore:
|
custom-maven-path-restore:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
cache-mode: read
|
|
||||||
needs: custom-maven-path-save
|
needs: custom-maven-path-save
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ jobs:
|
|||||||
version: 25
|
version: 25
|
||||||
- distribution: oracle
|
- distribution: oracle
|
||||||
os: macos-15-intel
|
os: macos-15-intel
|
||||||
version: 21
|
version: 17
|
||||||
- distribution: oracle
|
- distribution: oracle
|
||||||
os: windows-latest
|
os: windows-latest
|
||||||
version: 21
|
version: 21
|
||||||
@@ -636,26 +636,6 @@ jobs:
|
|||||||
run: bash __tests__/verify-java.sh "17.0.10" "$JAVA_PATH"
|
run: bash __tests__/verify-java.sh "17.0.10" "$JAVA_PATH"
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
setup-java-version-from-sdkman-major:
|
|
||||||
name: temurin 26 from .sdkmanrc - ubuntu-latest
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- *checkout_step
|
|
||||||
- name: Create SDKMAN and Gradle files
|
|
||||||
run: |
|
|
||||||
echo "java=26-tem" > .sdkmanrc
|
|
||||||
touch build.gradle
|
|
||||||
- name: setup-java
|
|
||||||
uses: ./
|
|
||||||
id: setup-java
|
|
||||||
with:
|
|
||||||
java-version-file: .sdkmanrc
|
|
||||||
cache: gradle
|
|
||||||
- name: Verify Java
|
|
||||||
env:
|
|
||||||
JAVA_PATH: ${{ steps.setup-java.outputs.path }}
|
|
||||||
run: bash __tests__/verify-java.sh "26" "$JAVA_PATH"
|
|
||||||
|
|
||||||
setup-java-set-default:
|
setup-java-set-default:
|
||||||
name: set-default option - ${{ matrix.os }}
|
name: set-default option - ${{ matrix.os }}
|
||||||
needs: setup-java-major-versions
|
needs: setup-java-major-versions
|
||||||
|
|||||||
@@ -170,10 +170,6 @@ steps:
|
|||||||
| `server-id` | Maven repository ID used in generated `settings.xml`. | `github` |
|
| `server-id` | Maven repository ID used in generated `settings.xml`. | `github` |
|
||||||
| `server-username-env-var` | Environment variable name for Maven repository username. | `GITHUB_ACTOR` |
|
| `server-username-env-var` | Environment variable name for Maven repository username. | `GITHUB_ACTOR` |
|
||||||
| `server-password-env-var` | Environment variable name for Maven repository password or token. | `GITHUB_TOKEN` |
|
| `server-password-env-var` | Environment variable name for Maven repository password or token. | `GITHUB_TOKEN` |
|
||||||
| `mvn-server-credentials` | Multiline Maven server credentials in the format `server-id:USERNAME_ENV:PASSWORD_ENV`. Replaces the single server configured by the three inputs above when set. | |
|
|
||||||
| `mvn-repositories` | Multiline Maven dependency repositories in the format `repository-id:repository-url:snapshots-enabled`. | |
|
|
||||||
| `mvn-repositories-include-central` | Include Maven Central in the generated dependency repositories profile. When `false`, Central is disabled unless an explicit `central` repository is declared. | `true` |
|
|
||||||
| `mvn-repositories-prioritize-central` | Place Maven Central before custom dependency repositories. Has no effect when Maven Central is excluded. | `true` |
|
|
||||||
| `settings-path` | Directory where `settings.xml` is written. | `~/.m2` |
|
| `settings-path` | Directory where `settings.xml` is written. | `~/.m2` |
|
||||||
| `overwrite-settings` | Overwrite an existing `settings.xml`. | `true` |
|
| `overwrite-settings` | Overwrite an existing `settings.xml`. | `true` |
|
||||||
| `gpg-private-key` | GPG private key to import into an isolated temporary keyring. | |
|
| `gpg-private-key` | GPG private key to import into an isolated temporary keyring. | |
|
||||||
@@ -211,7 +207,6 @@ Deprecated aliases `jdkFile`, `server-username`, `server-password`, and `gpg-pas
|
|||||||
| `microsoft` | [Microsoft Build of OpenJDK](https://www.microsoft.com/openjdk) | [License](https://docs.microsoft.com/java/openjdk/faq) |
|
| `microsoft` | [Microsoft Build of OpenJDK](https://www.microsoft.com/openjdk) | [License](https://docs.microsoft.com/java/openjdk/faq) |
|
||||||
| `oracle` | [Oracle JDK](https://www.oracle.com/java/technologies/downloads/) | [License](https://java.com/freeuselicense) |
|
| `oracle` | [Oracle JDK](https://www.oracle.com/java/technologies/downloads/) | [License](https://java.com/freeuselicense) |
|
||||||
| `oracle-openjdk` | [Oracle OpenJDK](https://jdk.java.net/) | [License](https://openjdk.org/legal/gplv2+ce.html) |
|
| `oracle-openjdk` | [Oracle OpenJDK](https://jdk.java.net/) | [License](https://openjdk.org/legal/gplv2+ce.html) |
|
||||||
| `redhat` | [Red Hat Build of OpenJDK](https://developers.redhat.com/products/openjdk/overview) | [License](https://openjdk.org/legal/gplv2+ce.html) |
|
|
||||||
| `sapmachine` | [SAP SapMachine JDK/JRE](https://sapmachine.io/) | [License](https://github.com/SAP/SapMachine/blob/sapmachine/LICENSE) |
|
| `sapmachine` | [SAP SapMachine JDK/JRE](https://sapmachine.io/) | [License](https://github.com/SAP/SapMachine/blob/sapmachine/LICENSE) |
|
||||||
| `semeru` | [IBM Semeru Runtime Open Edition](https://developer.ibm.com/languages/java/semeru-runtimes/downloads/) | [License](https://openjdk.java.net/legal/gplv2+ce.html) |
|
| `semeru` | [IBM Semeru Runtime Open Edition](https://developer.ibm.com/languages/java/semeru-runtimes/downloads/) | [License](https://openjdk.java.net/legal/gplv2+ce.html) |
|
||||||
| `temurin` | [Eclipse Temurin](https://adoptium.net/) | [License](https://adoptium.net/about.html) |
|
| `temurin` | [Eclipse Temurin](https://adoptium.net/) | [License](https://adoptium.net/about.html) |
|
||||||
@@ -457,11 +452,6 @@ steps:
|
|||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
```
|
```
|
||||||
|
|
||||||
For dependencies hosted outside Maven Central, use `mvn-repositories` to add
|
|
||||||
resolution repositories to an active profile in the generated `settings.xml`.
|
|
||||||
Repository IDs can match `mvn-server-credentials` IDs when authentication is
|
|
||||||
required. See [Resolving Maven dependencies from custom repositories](docs/advanced-usage.md#resolving-maven-dependencies-from-custom-repositories).
|
|
||||||
|
|
||||||
### GPG signing
|
### GPG signing
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
@@ -522,7 +512,7 @@ The scripts and documentation in this project are released under the [MIT Licens
|
|||||||
|
|
||||||
## Contributions
|
## Contributions
|
||||||
|
|
||||||
Contributions are welcome. See our [Contributor's Guide](docs/CONTRIBUTING.md).
|
Contributions are welcome. See our [Contributor's Guide](docs/contributors.md).
|
||||||
|
|
||||||
## Code of Conduct
|
## Code of Conduct
|
||||||
|
|
||||||
|
|||||||
+28
-479
@@ -26,7 +26,7 @@ jest.unstable_mockModule('@actions/core', () => ({
|
|||||||
setOutput: jest.fn(),
|
setOutput: jest.fn(),
|
||||||
getInput: jest.fn(),
|
getInput: jest.fn(),
|
||||||
getBooleanInput: jest.fn(),
|
getBooleanInput: jest.fn(),
|
||||||
getMultilineInput: jest.fn(() => []),
|
getMultilineInput: jest.fn(),
|
||||||
addPath: jest.fn(),
|
addPath: jest.fn(),
|
||||||
exportVariable: jest.fn(),
|
exportVariable: jest.fn(),
|
||||||
saveState: jest.fn(),
|
saveState: jest.fn(),
|
||||||
@@ -57,18 +57,6 @@ const {M2_DIR, MVN_SETTINGS_FILE, STATE_GPG_HOME} =
|
|||||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||||
const m2Dir = path.join(__dirname, M2_DIR);
|
const m2Dir = path.join(__dirname, M2_DIR);
|
||||||
const settingsFile = path.join(m2Dir, MVN_SETTINGS_FILE);
|
const settingsFile = path.join(m2Dir, MVN_SETTINGS_FILE);
|
||||||
const credentials = (id: string, username: string, password: string) => [
|
|
||||||
{id, usernameEnvVar: username, passwordEnvVar: password}
|
|
||||||
];
|
|
||||||
const repositorySettings = (
|
|
||||||
repositories: auth.MavenRepository[],
|
|
||||||
includeCentral = true,
|
|
||||||
prioritizeCentral = true
|
|
||||||
): auth.MavenRepositorySettings => ({
|
|
||||||
repositories,
|
|
||||||
includeCentral,
|
|
||||||
prioritizeCentral
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('auth tests', () => {
|
describe('auth tests', () => {
|
||||||
let spyOSHomedir: any;
|
let spyOSHomedir: any;
|
||||||
@@ -85,9 +73,6 @@ describe('auth tests', () => {
|
|||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
(core.getInput as jest.Mock).mockReset();
|
(core.getInput as jest.Mock).mockReset();
|
||||||
(core.getMultilineInput as jest.Mock).mockReset();
|
|
||||||
(core.getMultilineInput as jest.Mock).mockReturnValue([]);
|
|
||||||
(core.warning as jest.Mock).mockReset();
|
|
||||||
(core.exportVariable as jest.Mock).mockReset();
|
(core.exportVariable as jest.Mock).mockReset();
|
||||||
(gpg.importKey as jest.Mock).mockReset();
|
(gpg.importKey as jest.Mock).mockReset();
|
||||||
(gpg.removeGpgHome as jest.Mock).mockReset();
|
(gpg.removeGpgHome as jest.Mock).mockReset();
|
||||||
@@ -115,7 +100,9 @@ describe('auth tests', () => {
|
|||||||
await io.rmRF(altHome); // ensure it doesn't already exist
|
await io.rmRF(altHome); // ensure it doesn't already exist
|
||||||
|
|
||||||
await auth.createAuthenticationSettings(
|
await auth.createAuthenticationSettings(
|
||||||
credentials(id, username, password),
|
id,
|
||||||
|
username,
|
||||||
|
password,
|
||||||
altHome,
|
altHome,
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
@@ -126,7 +113,7 @@ describe('auth tests', () => {
|
|||||||
expect(fs.existsSync(altHome)).toBe(true);
|
expect(fs.existsSync(altHome)).toBe(true);
|
||||||
expect(fs.existsSync(altSettingsFile)).toBe(true);
|
expect(fs.existsSync(altSettingsFile)).toBe(true);
|
||||||
expect(fs.readFileSync(altSettingsFile, 'utf-8')).toEqual(
|
expect(fs.readFileSync(altSettingsFile, 'utf-8')).toEqual(
|
||||||
auth.generate(credentials(id, username, password))
|
auth.generate(id, username, password)
|
||||||
);
|
);
|
||||||
|
|
||||||
await io.rmRF(altHome);
|
await io.rmRF(altHome);
|
||||||
@@ -138,7 +125,9 @@ describe('auth tests', () => {
|
|||||||
const password = 'TOKEN';
|
const password = 'TOKEN';
|
||||||
|
|
||||||
await auth.createAuthenticationSettings(
|
await auth.createAuthenticationSettings(
|
||||||
credentials(id, username, password),
|
id,
|
||||||
|
username,
|
||||||
|
password,
|
||||||
m2Dir,
|
m2Dir,
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
@@ -146,7 +135,7 @@ describe('auth tests', () => {
|
|||||||
expect(fs.existsSync(m2Dir)).toBe(true);
|
expect(fs.existsSync(m2Dir)).toBe(true);
|
||||||
expect(fs.existsSync(settingsFile)).toBe(true);
|
expect(fs.existsSync(settingsFile)).toBe(true);
|
||||||
expect(fs.readFileSync(settingsFile, 'utf-8')).toEqual(
|
expect(fs.readFileSync(settingsFile, 'utf-8')).toEqual(
|
||||||
auth.generate(credentials(id, username, password))
|
auth.generate(id, username, password)
|
||||||
);
|
);
|
||||||
}, 100000);
|
}, 100000);
|
||||||
|
|
||||||
@@ -157,7 +146,9 @@ describe('auth tests', () => {
|
|||||||
const gpgPassphrase = 'GPG';
|
const gpgPassphrase = 'GPG';
|
||||||
|
|
||||||
await auth.createAuthenticationSettings(
|
await auth.createAuthenticationSettings(
|
||||||
credentials(id, username, password),
|
id,
|
||||||
|
username,
|
||||||
|
password,
|
||||||
m2Dir,
|
m2Dir,
|
||||||
true,
|
true,
|
||||||
gpgPassphrase
|
gpgPassphrase
|
||||||
@@ -166,7 +157,7 @@ describe('auth tests', () => {
|
|||||||
expect(fs.existsSync(m2Dir)).toBe(true);
|
expect(fs.existsSync(m2Dir)).toBe(true);
|
||||||
expect(fs.existsSync(settingsFile)).toBe(true);
|
expect(fs.existsSync(settingsFile)).toBe(true);
|
||||||
expect(fs.readFileSync(settingsFile, 'utf-8')).toEqual(
|
expect(fs.readFileSync(settingsFile, 'utf-8')).toEqual(
|
||||||
auth.generate(credentials(id, username, password), gpgPassphrase)
|
auth.generate(id, username, password, gpgPassphrase)
|
||||||
);
|
);
|
||||||
}, 100000);
|
}, 100000);
|
||||||
|
|
||||||
@@ -227,7 +218,9 @@ describe('auth tests', () => {
|
|||||||
expect(fs.existsSync(settingsFile)).toBe(true);
|
expect(fs.existsSync(settingsFile)).toBe(true);
|
||||||
|
|
||||||
await auth.createAuthenticationSettings(
|
await auth.createAuthenticationSettings(
|
||||||
credentials(id, username, password),
|
id,
|
||||||
|
username,
|
||||||
|
password,
|
||||||
m2Dir,
|
m2Dir,
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
@@ -235,7 +228,7 @@ describe('auth tests', () => {
|
|||||||
expect(fs.existsSync(m2Dir)).toBe(true);
|
expect(fs.existsSync(m2Dir)).toBe(true);
|
||||||
expect(fs.existsSync(settingsFile)).toBe(true);
|
expect(fs.existsSync(settingsFile)).toBe(true);
|
||||||
expect(fs.readFileSync(settingsFile, 'utf-8')).toEqual(
|
expect(fs.readFileSync(settingsFile, 'utf-8')).toEqual(
|
||||||
auth.generate(credentials(id, username, password))
|
auth.generate(id, username, password)
|
||||||
);
|
);
|
||||||
}, 100000);
|
}, 100000);
|
||||||
|
|
||||||
@@ -250,7 +243,9 @@ describe('auth tests', () => {
|
|||||||
expect(fs.existsSync(settingsFile)).toBe(true);
|
expect(fs.existsSync(settingsFile)).toBe(true);
|
||||||
|
|
||||||
await auth.createAuthenticationSettings(
|
await auth.createAuthenticationSettings(
|
||||||
credentials(id, username, password),
|
id,
|
||||||
|
username,
|
||||||
|
password,
|
||||||
m2Dir,
|
m2Dir,
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
@@ -278,9 +273,7 @@ describe('auth tests', () => {
|
|||||||
</servers>
|
</servers>
|
||||||
</settings>`;
|
</settings>`;
|
||||||
|
|
||||||
expect(auth.generate(credentials(id, username, password))).toEqual(
|
expect(auth.generate(id, username, password)).toEqual(expectedSettings);
|
||||||
expectedSettings
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('generates valid settings.xml with additional configuration', () => {
|
it('generates valid settings.xml with additional configuration', () => {
|
||||||
@@ -313,9 +306,9 @@ describe('auth tests', () => {
|
|||||||
</activeProfiles>
|
</activeProfiles>
|
||||||
</settings>`;
|
</settings>`;
|
||||||
|
|
||||||
expect(
|
expect(auth.generate(id, username, password, gpgPassphrase)).toEqual(
|
||||||
auth.generate(credentials(id, username, password), gpgPassphrase)
|
expectedSettings
|
||||||
).toEqual(expectedSettings);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('does not add a gpg profile when the passphrase env var is the maven-gpg-plugin default', () => {
|
it('does not add a gpg profile when the passphrase env var is the maven-gpg-plugin default', () => {
|
||||||
@@ -337,9 +330,9 @@ describe('auth tests', () => {
|
|||||||
</servers>
|
</servers>
|
||||||
</settings>`;
|
</settings>`;
|
||||||
|
|
||||||
expect(
|
expect(auth.generate(id, username, password, gpgPassphrase)).toEqual(
|
||||||
auth.generate(credentials(id, username, password), gpgPassphrase)
|
expectedSettings
|
||||||
).toEqual(expectedSettings);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('escapes settings.xml values while preserving parsed semantics', () => {
|
it('escapes settings.xml values while preserving parsed semantics', () => {
|
||||||
@@ -348,10 +341,7 @@ describe('auth tests', () => {
|
|||||||
const password = `TOKEN&<>"'é`;
|
const password = `TOKEN&<>"'é`;
|
||||||
const gpgPassphrase = `GPG&<>"'é`;
|
const gpgPassphrase = `GPG&<>"'é`;
|
||||||
|
|
||||||
const xml = auth.generate(
|
const xml = auth.generate(id, username, password, gpgPassphrase);
|
||||||
credentials(id, username, password),
|
|
||||||
gpgPassphrase
|
|
||||||
);
|
|
||||||
const parsed = parseXmlObject(xml) as any;
|
const parsed = parseXmlObject(xml) as any;
|
||||||
|
|
||||||
expect(parsed.settings.interactiveMode).toBe('false');
|
expect(parsed.settings.interactiveMode).toBe('false');
|
||||||
@@ -362,447 +352,6 @@ describe('auth tests', () => {
|
|||||||
expect(parsed.settings.activeProfiles.activeProfile).toBe('setup-java-gpg');
|
expect(parsed.settings.activeProfiles.activeProfile).toBe('setup-java-gpg');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('generates ordered settings.xml entries for multiple servers', () => {
|
|
||||||
const servers = [
|
|
||||||
{
|
|
||||||
id: 'releases',
|
|
||||||
usernameEnvVar: 'RELEASES_USERNAME',
|
|
||||||
passwordEnvVar: 'RELEASES_PASSWORD'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'snapshots',
|
|
||||||
usernameEnvVar: 'SNAPSHOTS_USERNAME',
|
|
||||||
passwordEnvVar: 'SNAPSHOTS_PASSWORD'
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
const parsed = parseXmlObject(auth.generate(servers)) as any;
|
|
||||||
|
|
||||||
expect(parsed.settings.servers.server).toEqual([
|
|
||||||
{
|
|
||||||
id: 'releases',
|
|
||||||
username: '${env.RELEASES_USERNAME}',
|
|
||||||
password: '${env.RELEASES_PASSWORD}'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'snapshots',
|
|
||||||
username: '${env.SNAPSHOTS_USERNAME}',
|
|
||||||
password: '${env.SNAPSHOTS_PASSWORD}'
|
|
||||||
}
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('generates an active profile with Central before custom repositories by default', () => {
|
|
||||||
const parsed = parseXmlObject(
|
|
||||||
auth.generate(
|
|
||||||
credentials('packages', 'USERNAME', 'PASSWORD'),
|
|
||||||
undefined,
|
|
||||||
repositorySettings([
|
|
||||||
{
|
|
||||||
id: 'private',
|
|
||||||
url: 'https://repo.example.com/maven',
|
|
||||||
snapshotsEnabled: true
|
|
||||||
}
|
|
||||||
])
|
|
||||||
)
|
|
||||||
) as any;
|
|
||||||
|
|
||||||
expect(parsed.settings.profiles.profile).toEqual({
|
|
||||||
id: 'setup-java-repositories',
|
|
||||||
repositories: {
|
|
||||||
repository: [
|
|
||||||
{
|
|
||||||
id: 'central',
|
|
||||||
url: 'https://repo.maven.apache.org/maven2',
|
|
||||||
snapshots: {enabled: 'false'}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'private',
|
|
||||||
url: 'https://repo.example.com/maven',
|
|
||||||
snapshots: {enabled: 'true'}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
expect(parsed.settings.activeProfiles.activeProfile).toBe(
|
|
||||||
'setup-java-repositories'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('places custom repositories before Central when configured', () => {
|
|
||||||
const parsed = parseXmlObject(
|
|
||||||
auth.generate(
|
|
||||||
credentials('packages', 'USERNAME', 'PASSWORD'),
|
|
||||||
undefined,
|
|
||||||
repositorySettings(
|
|
||||||
[
|
|
||||||
{
|
|
||||||
id: 'first',
|
|
||||||
url: 'https://first.example.com',
|
|
||||||
snapshotsEnabled: false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'second',
|
|
||||||
url: 'https://second.example.com',
|
|
||||||
snapshotsEnabled: true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
true,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
)
|
|
||||||
) as any;
|
|
||||||
|
|
||||||
expect(
|
|
||||||
parsed.settings.profiles.profile.repositories.repository.map(
|
|
||||||
(repository: {id: string}) => repository.id
|
|
||||||
)
|
|
||||||
).toEqual(['first', 'second', 'central']);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('excludes Central from the generated repository profile when configured', () => {
|
|
||||||
const parsed = parseXmlObject(
|
|
||||||
auth.generate(
|
|
||||||
credentials('packages', 'USERNAME', 'PASSWORD'),
|
|
||||||
undefined,
|
|
||||||
repositorySettings(
|
|
||||||
[
|
|
||||||
{
|
|
||||||
id: 'private',
|
|
||||||
url: 'https://repo.example.com',
|
|
||||||
snapshotsEnabled: false
|
|
||||||
}
|
|
||||||
],
|
|
||||||
false
|
|
||||||
)
|
|
||||||
)
|
|
||||||
) as any;
|
|
||||||
|
|
||||||
expect(parsed.settings.profiles.profile.repositories.repository).toEqual([
|
|
||||||
{
|
|
||||||
id: 'private',
|
|
||||||
url: 'https://repo.example.com',
|
|
||||||
snapshots: {enabled: 'false'}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'central',
|
|
||||||
url: 'https://repo.maven.apache.org/maven2',
|
|
||||||
releases: {enabled: 'false'},
|
|
||||||
snapshots: {enabled: 'false'}
|
|
||||||
}
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('combines repository and GPG configuration in shared profile blocks', () => {
|
|
||||||
const parsed = parseXmlObject(
|
|
||||||
auth.generate(
|
|
||||||
credentials('packages', 'USERNAME', 'PASSWORD'),
|
|
||||||
'GPG_PASSPHRASE',
|
|
||||||
repositorySettings(
|
|
||||||
[
|
|
||||||
{
|
|
||||||
id: 'private',
|
|
||||||
url: 'https://repo.example.com',
|
|
||||||
snapshotsEnabled: false
|
|
||||||
}
|
|
||||||
],
|
|
||||||
false
|
|
||||||
)
|
|
||||||
)
|
|
||||||
) as any;
|
|
||||||
|
|
||||||
expect(parsed.settings.profiles.profile).toEqual([
|
|
||||||
{
|
|
||||||
id: 'setup-java-repositories',
|
|
||||||
repositories: {
|
|
||||||
repository: [
|
|
||||||
{
|
|
||||||
id: 'private',
|
|
||||||
url: 'https://repo.example.com',
|
|
||||||
snapshots: {enabled: 'false'}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'central',
|
|
||||||
url: 'https://repo.maven.apache.org/maven2',
|
|
||||||
releases: {enabled: 'false'},
|
|
||||||
snapshots: {enabled: 'false'}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'setup-java-gpg',
|
|
||||||
properties: {['gpg.passphraseEnvName']: 'GPG_PASSPHRASE'}
|
|
||||||
}
|
|
||||||
]);
|
|
||||||
expect(parsed.settings.activeProfiles.activeProfile).toEqual([
|
|
||||||
'setup-java-repositories',
|
|
||||||
'setup-java-gpg'
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('escapes repository values while preserving parsed semantics', () => {
|
|
||||||
const repository = {
|
|
||||||
id: `private&<>"'é`,
|
|
||||||
url: `https://repo.example.com/a?x=1&y=<value>"'é`,
|
|
||||||
snapshotsEnabled: true
|
|
||||||
};
|
|
||||||
const xml = auth.generate(
|
|
||||||
credentials('packages', 'USERNAME', 'PASSWORD'),
|
|
||||||
undefined,
|
|
||||||
repositorySettings([repository], false)
|
|
||||||
);
|
|
||||||
const parsed = parseXmlObject(xml) as any;
|
|
||||||
|
|
||||||
expect(
|
|
||||||
parsed.settings.profiles.profile.repositories.repository.find(
|
|
||||||
(entry: {id: string}) => entry.id === repository.id
|
|
||||||
)
|
|
||||||
).toEqual({
|
|
||||||
id: repository.id,
|
|
||||||
url: repository.url,
|
|
||||||
snapshots: {enabled: 'true'}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('parses and trims multiline Maven server credentials', () => {
|
|
||||||
expect(
|
|
||||||
auth.parseMavenServerCredentials([
|
|
||||||
'',
|
|
||||||
' releases : RELEASES_USERNAME : RELEASES_PASSWORD ',
|
|
||||||
'snapshots:SNAPSHOTS_USERNAME:SNAPSHOTS_PASSWORD'
|
|
||||||
])
|
|
||||||
).toEqual([
|
|
||||||
{
|
|
||||||
id: 'releases',
|
|
||||||
usernameEnvVar: 'RELEASES_USERNAME',
|
|
||||||
passwordEnvVar: 'RELEASES_PASSWORD'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'snapshots',
|
|
||||||
usernameEnvVar: 'SNAPSHOTS_USERNAME',
|
|
||||||
passwordEnvVar: 'SNAPSHOTS_PASSWORD'
|
|
||||||
}
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('parses Maven repositories while preserving colons in URLs', () => {
|
|
||||||
expect(
|
|
||||||
auth.parseMavenRepositories(
|
|
||||||
[
|
|
||||||
'',
|
|
||||||
' private : https://repo.example.com:8443/maven : true ',
|
|
||||||
'releases:https://repo.example.com/releases:false'
|
|
||||||
],
|
|
||||||
true
|
|
||||||
)
|
|
||||||
).toEqual([
|
|
||||||
{
|
|
||||||
id: 'private',
|
|
||||||
url: 'https://repo.example.com:8443/maven',
|
|
||||||
snapshotsEnabled: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'releases',
|
|
||||||
url: 'https://repo.example.com/releases',
|
|
||||||
snapshotsEnabled: false
|
|
||||||
}
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it.each([
|
|
||||||
{
|
|
||||||
entries: ['private'],
|
|
||||||
error:
|
|
||||||
'Invalid mvn-repositories entry at line 1. Expected format: repository-id:repository-url:snapshots-enabled'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
entries: ['private:https://repo.example.com'],
|
|
||||||
error:
|
|
||||||
"Invalid snapshots-enabled value '//repo.example.com' in mvn-repositories entry at line 1. Expected true or false"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
entries: ['private::true'],
|
|
||||||
error:
|
|
||||||
'Invalid mvn-repositories entry at line 1. repository-id, repository URL, and snapshots-enabled are required'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
entries: ['private:https://repo.example.com:sometimes'],
|
|
||||||
error:
|
|
||||||
"Invalid snapshots-enabled value 'sometimes' in mvn-repositories entry at line 1. Expected true or false"
|
|
||||||
}
|
|
||||||
])('rejects malformed Maven repositories: $entries', ({entries, error}) => {
|
|
||||||
expect(() => auth.parseMavenRepositories(entries, true)).toThrow(error);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('rejects duplicate Maven repository ids', () => {
|
|
||||||
expect(() =>
|
|
||||||
auth.parseMavenRepositories(
|
|
||||||
[
|
|
||||||
'private:https://first.example.com:false',
|
|
||||||
'private:https://second.example.com:true'
|
|
||||||
],
|
|
||||||
true
|
|
||||||
)
|
|
||||||
).toThrow("Duplicate repository-id 'private' in mvn-repositories input");
|
|
||||||
});
|
|
||||||
|
|
||||||
it('reserves the Central repository id only when automatic Central inclusion is enabled', () => {
|
|
||||||
const central = 'central:https://custom.example.com/maven:false';
|
|
||||||
|
|
||||||
expect(() => auth.parseMavenRepositories([central], true)).toThrow(
|
|
||||||
"Repository-id 'central' is reserved when mvn-repositories-include-central is enabled"
|
|
||||||
);
|
|
||||||
expect(auth.parseMavenRepositories([central], false)).toEqual([
|
|
||||||
{
|
|
||||||
id: 'central',
|
|
||||||
url: 'https://custom.example.com/maven',
|
|
||||||
snapshotsEnabled: false
|
|
||||||
}
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('uses an explicit Central repository instead of adding a disabled override', () => {
|
|
||||||
const parsed = parseXmlObject(
|
|
||||||
auth.generate(
|
|
||||||
credentials('packages', 'USERNAME', 'PASSWORD'),
|
|
||||||
undefined,
|
|
||||||
repositorySettings(
|
|
||||||
auth.parseMavenRepositories(
|
|
||||||
['central:https://mirror.example.com/maven:true'],
|
|
||||||
false
|
|
||||||
),
|
|
||||||
false
|
|
||||||
)
|
|
||||||
)
|
|
||||||
) as any;
|
|
||||||
|
|
||||||
expect(parsed.settings.profiles.profile.repositories.repository).toEqual({
|
|
||||||
id: 'central',
|
|
||||||
url: 'https://mirror.example.com/maven',
|
|
||||||
snapshots: {enabled: 'true'}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('reads Maven repository settings and Central controls', () => {
|
|
||||||
(core.getMultilineInput as jest.Mock).mockImplementation((name: string) =>
|
|
||||||
name === 'mvn-repositories'
|
|
||||||
? ['private:https://repo.example.com:true']
|
|
||||||
: []
|
|
||||||
);
|
|
||||||
(core.getInput as jest.Mock).mockImplementation((name: string) => {
|
|
||||||
const inputs: Record<string, string> = {
|
|
||||||
'mvn-repositories-include-central': 'false',
|
|
||||||
'mvn-repositories-prioritize-central': 'false'
|
|
||||||
};
|
|
||||||
return inputs[name] ?? '';
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(auth.getMavenRepositorySettings()).toEqual({
|
|
||||||
repositories: [
|
|
||||||
{
|
|
||||||
id: 'private',
|
|
||||||
url: 'https://repo.example.com',
|
|
||||||
snapshotsEnabled: true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
includeCentral: false,
|
|
||||||
prioritizeCentral: false
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('does not read repository controls when no repositories are configured', () => {
|
|
||||||
expect(auth.getMavenRepositorySettings()).toBeUndefined();
|
|
||||||
expect(core.getInput).not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it.each([
|
|
||||||
{
|
|
||||||
entries: ['releases:RELEASES_USERNAME'],
|
|
||||||
error:
|
|
||||||
'Invalid mvn-server-credentials entry at line 1. Expected format: server-id:USERNAME_ENV:PASSWORD_ENV'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
entries: ['', 'releases:RELEASES_USERNAME:RELEASES_PASSWORD:EXTRA'],
|
|
||||||
error:
|
|
||||||
'Invalid mvn-server-credentials entry at line 2. Expected format: server-id:USERNAME_ENV:PASSWORD_ENV'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
entries: ['releases::RELEASES_PASSWORD'],
|
|
||||||
error:
|
|
||||||
'Invalid mvn-server-credentials entry at line 1. server-id, username environment variable, and password environment variable are required'
|
|
||||||
}
|
|
||||||
])(
|
|
||||||
'rejects malformed Maven server credentials: $entries',
|
|
||||||
({entries, error}) => {
|
|
||||||
expect(() => auth.parseMavenServerCredentials(entries)).toThrow(error);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
it('rejects duplicate Maven server ids', () => {
|
|
||||||
expect(() =>
|
|
||||||
auth.parseMavenServerCredentials([
|
|
||||||
'releases:RELEASES_USERNAME:RELEASES_PASSWORD',
|
|
||||||
'releases:OTHER_USERNAME:OTHER_PASSWORD'
|
|
||||||
])
|
|
||||||
).toThrow("Duplicate server-id 'releases' in mvn-server-credentials input");
|
|
||||||
});
|
|
||||||
|
|
||||||
it('uses multiline Maven server credentials instead of single-server inputs', () => {
|
|
||||||
(core.getMultilineInput as jest.Mock).mockReturnValue([
|
|
||||||
'releases:RELEASES_USERNAME:RELEASES_PASSWORD',
|
|
||||||
'snapshots:SNAPSHOTS_USERNAME:SNAPSHOTS_PASSWORD'
|
|
||||||
]);
|
|
||||||
|
|
||||||
expect(auth.getMavenServerSettings()).toEqual([
|
|
||||||
{
|
|
||||||
id: 'releases',
|
|
||||||
usernameEnvVar: 'RELEASES_USERNAME',
|
|
||||||
passwordEnvVar: 'RELEASES_PASSWORD'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'snapshots',
|
|
||||||
usernameEnvVar: 'SNAPSHOTS_USERNAME',
|
|
||||||
passwordEnvVar: 'SNAPSHOTS_PASSWORD'
|
|
||||||
}
|
|
||||||
]);
|
|
||||||
expect(core.getInput).not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('uses the existing single-server inputs when multiline credentials are absent', () => {
|
|
||||||
(core.getInput as jest.Mock).mockImplementation((name: string) =>
|
|
||||||
name === 'server-id' ? 'github' : ''
|
|
||||||
);
|
|
||||||
|
|
||||||
expect(auth.getMavenServerSettings()).toEqual([
|
|
||||||
{
|
|
||||||
id: 'github',
|
|
||||||
usernameEnvVar: 'GITHUB_ACTOR',
|
|
||||||
passwordEnvVar: 'GITHUB_TOKEN'
|
|
||||||
}
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('preserves deprecated single-server aliases as fallback inputs', () => {
|
|
||||||
(core.getInput as jest.Mock).mockImplementation((name: string) => {
|
|
||||||
const inputs: Record<string, string> = {
|
|
||||||
'server-id': 'legacy',
|
|
||||||
'server-username': 'LEGACY_USERNAME',
|
|
||||||
'server-password': 'LEGACY_PASSWORD'
|
|
||||||
};
|
|
||||||
return inputs[name] ?? '';
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(auth.getMavenServerSettings()).toEqual([
|
|
||||||
{
|
|
||||||
id: 'legacy',
|
|
||||||
usernameEnvVar: 'LEGACY_USERNAME',
|
|
||||||
passwordEnvVar: 'LEGACY_PASSWORD'
|
|
||||||
}
|
|
||||||
]);
|
|
||||||
expect(core.warning).toHaveBeenCalledTimes(2);
|
|
||||||
});
|
|
||||||
|
|
||||||
function xmlElementText(xml: string, tagName: string): string {
|
function xmlElementText(xml: string, tagName: string): string {
|
||||||
const match = new RegExp(`<${tagName}>([\\s\\S]*?)</${tagName}>`).exec(xml);
|
const match = new RegExp(`<${tagName}>([\\s\\S]*?)</${tagName}>`).exec(xml);
|
||||||
expect(match).not.toBeNull();
|
expect(match).not.toBeNull();
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"result": [
|
|
||||||
{
|
|
||||||
"filename": "java-21-openjdk-21.0.8.0.9-1.portable.jdk.x86_64.tar.xz",
|
|
||||||
"direct_download_uri": "https://developers.redhat.com/content-gateway/file/pub/openjdk/java-21-openjdk-21.0.8.0.9-1.portable.jdk.x86_64.tar.xz",
|
|
||||||
"checksum": "91a6f3284cbded9de17f65985a4fca48dd4fd0aa295162178631c23ade335aad",
|
|
||||||
"checksum_type": "sha256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"message": ""
|
|
||||||
}
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
{
|
|
||||||
"result": [
|
|
||||||
{
|
|
||||||
"id": "redhat-21.0.8-jdk-linux-x64",
|
|
||||||
"archive_type": "tar.xz",
|
|
||||||
"distribution": "redhat",
|
|
||||||
"java_version": "21.0.8+9",
|
|
||||||
"release_status": "ga",
|
|
||||||
"operating_system": "linux",
|
|
||||||
"architecture": "x64",
|
|
||||||
"package_type": "jdk",
|
|
||||||
"directly_downloadable": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "redhat-21.0.7-jdk-linux-x64",
|
|
||||||
"archive_type": "tar.xz",
|
|
||||||
"distribution": "redhat",
|
|
||||||
"java_version": "21.0.7+6",
|
|
||||||
"release_status": "ga",
|
|
||||||
"operating_system": "linux",
|
|
||||||
"architecture": "x64",
|
|
||||||
"package_type": "jdk",
|
|
||||||
"directly_downloadable": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "redhat-17.0.16-jdk-linux-x64",
|
|
||||||
"archive_type": "tar.xz",
|
|
||||||
"distribution": "redhat",
|
|
||||||
"java_version": "17.0.16+8",
|
|
||||||
"release_status": "ga",
|
|
||||||
"operating_system": "linux",
|
|
||||||
"architecture": "x64",
|
|
||||||
"package_type": "jdk",
|
|
||||||
"directly_downloadable": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "redhat-9-jdk-linux-x64",
|
|
||||||
"archive_type": "tar.xz",
|
|
||||||
"distribution": "redhat",
|
|
||||||
"java_version": "9+181",
|
|
||||||
"release_status": "ga",
|
|
||||||
"operating_system": "linux",
|
|
||||||
"architecture": "x64",
|
|
||||||
"package_type": "jdk",
|
|
||||||
"directly_downloadable": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "redhat-21.0.8-jre-linux-x64",
|
|
||||||
"archive_type": "tar.xz",
|
|
||||||
"distribution": "redhat",
|
|
||||||
"java_version": "21.0.8+9",
|
|
||||||
"release_status": "ga",
|
|
||||||
"operating_system": "linux",
|
|
||||||
"architecture": "x64",
|
|
||||||
"package_type": "jre",
|
|
||||||
"directly_downloadable": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "redhat-17.0.16-jdk-windows-x64",
|
|
||||||
"archive_type": "zip",
|
|
||||||
"distribution": "redhat",
|
|
||||||
"java_version": "17.0.16+8",
|
|
||||||
"release_status": "ga",
|
|
||||||
"operating_system": "windows",
|
|
||||||
"architecture": "x64",
|
|
||||||
"package_type": "jdk",
|
|
||||||
"directly_downloadable": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"message": "6 package(s) found"
|
|
||||||
}
|
|
||||||
@@ -1,109 +0,0 @@
|
|||||||
import {beforeEach, describe, expect, it, jest} from '@jest/globals';
|
|
||||||
import path from 'path';
|
|
||||||
|
|
||||||
const mockReaddirSync = jest.fn();
|
|
||||||
const realFs = await import('fs');
|
|
||||||
jest.unstable_mockModule('fs', () => ({
|
|
||||||
...realFs,
|
|
||||||
default: {...realFs.default, readdirSync: mockReaddirSync},
|
|
||||||
readdirSync: mockReaddirSync
|
|
||||||
}));
|
|
||||||
|
|
||||||
jest.unstable_mockModule('@actions/core', () => ({
|
|
||||||
info: jest.fn(),
|
|
||||||
debug: jest.fn(),
|
|
||||||
isDebug: jest.fn(() => false),
|
|
||||||
startGroup: jest.fn(),
|
|
||||||
endGroup: jest.fn()
|
|
||||||
}));
|
|
||||||
|
|
||||||
const realUtil = await import('../../src/util.js');
|
|
||||||
const mockCacheJdkDir = jest.fn();
|
|
||||||
const mockExtractJdkFile = jest.fn();
|
|
||||||
const mockRenameWinArchive = jest.fn();
|
|
||||||
jest.unstable_mockModule('../../src/util.js', () => ({
|
|
||||||
...realUtil,
|
|
||||||
cacheJdkDir: mockCacheJdkDir,
|
|
||||||
extractJdkFile: mockExtractJdkFile,
|
|
||||||
renameWinArchive: mockRenameWinArchive
|
|
||||||
}));
|
|
||||||
|
|
||||||
const {RedHatDistribution} =
|
|
||||||
await import('../../src/distributions/redhat/installer.js');
|
|
||||||
|
|
||||||
const release = {
|
|
||||||
version: '21.0.8+9',
|
|
||||||
url: 'https://developers.redhat.com/openjdk-21.tar.xz',
|
|
||||||
checksum: {
|
|
||||||
algorithm: 'sha256' as const,
|
|
||||||
value: 'a'.repeat(64)
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const createDistribution = () =>
|
|
||||||
new RedHatDistribution({
|
|
||||||
version: '21',
|
|
||||||
architecture: 'x64',
|
|
||||||
packageType: 'jdk',
|
|
||||||
checkLatest: false
|
|
||||||
});
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
jest.clearAllMocks();
|
|
||||||
mockReaddirSync.mockReturnValue(['jdk-21']);
|
|
||||||
mockExtractJdkFile.mockResolvedValue('/tmp/extracted');
|
|
||||||
mockCacheJdkDir.mockResolvedValue('/toolcache/Java_RedHat_jdk/21.0.8-9/x64');
|
|
||||||
mockRenameWinArchive.mockReturnValue('/tmp/download.zip');
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Red Hat package installation', () => {
|
|
||||||
it('extracts and caches Linux tar.xz archives', async () => {
|
|
||||||
const distribution = createDistribution();
|
|
||||||
distribution['downloadAndVerify'] = jest
|
|
||||||
.fn()
|
|
||||||
.mockResolvedValue('/tmp/download');
|
|
||||||
distribution['getArchiveType'] = () => 'tar.xz';
|
|
||||||
|
|
||||||
const result = await distribution['downloadTool'](release);
|
|
||||||
|
|
||||||
expect(mockExtractJdkFile).toHaveBeenCalledWith('/tmp/download', 'tar.xz');
|
|
||||||
expect(mockRenameWinArchive).not.toHaveBeenCalled();
|
|
||||||
expect(mockCacheJdkDir).toHaveBeenCalledWith(
|
|
||||||
path.join('/tmp/extracted', 'jdk-21'),
|
|
||||||
'Java_RedHat_jdk',
|
|
||||||
'21.0.8-9',
|
|
||||||
'x64'
|
|
||||||
);
|
|
||||||
expect(result).toEqual({
|
|
||||||
version: '21.0.8+9',
|
|
||||||
path: '/toolcache/Java_RedHat_jdk/21.0.8-9/x64'
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('renames downloaded Windows ZIP archives before extraction', async () => {
|
|
||||||
const distribution = createDistribution();
|
|
||||||
distribution['downloadAndVerify'] = jest
|
|
||||||
.fn()
|
|
||||||
.mockResolvedValue('/tmp/download');
|
|
||||||
distribution['getArchiveType'] = () => 'zip';
|
|
||||||
|
|
||||||
await distribution['downloadTool'](release);
|
|
||||||
|
|
||||||
expect(mockRenameWinArchive).toHaveBeenCalledWith('/tmp/download');
|
|
||||||
expect(mockExtractJdkFile).toHaveBeenCalledWith('/tmp/download.zip', 'zip');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('fails when the extracted archive is empty', async () => {
|
|
||||||
mockReaddirSync.mockReturnValue([]);
|
|
||||||
const distribution = createDistribution();
|
|
||||||
distribution['downloadAndVerify'] = jest
|
|
||||||
.fn()
|
|
||||||
.mockResolvedValue('/tmp/download');
|
|
||||||
distribution['getArchiveType'] = () => 'tar.xz';
|
|
||||||
|
|
||||||
await expect(distribution['downloadTool'](release)).rejects.toThrow(
|
|
||||||
'The Red Hat archive for Java 21.0.8+9 was empty.'
|
|
||||||
);
|
|
||||||
expect(mockCacheJdkDir).not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -1,181 +0,0 @@
|
|||||||
import {afterEach, describe, expect, it, jest} from '@jest/globals';
|
|
||||||
import {HttpClient} from '@actions/http-client';
|
|
||||||
import packageDetails from '../data/redhat-package-details.json' with {type: 'json'};
|
|
||||||
import packages from '../data/redhat-packages.json' with {type: 'json'};
|
|
||||||
import {RedHatDistribution} from '../../src/distributions/redhat/installer.js';
|
|
||||||
|
|
||||||
const createDistribution = (
|
|
||||||
version: string,
|
|
||||||
packageType = 'jdk'
|
|
||||||
): RedHatDistribution => {
|
|
||||||
const distribution = new RedHatDistribution({
|
|
||||||
version,
|
|
||||||
architecture: 'x64',
|
|
||||||
packageType,
|
|
||||||
checkLatest: false
|
|
||||||
});
|
|
||||||
distribution['getOperatingSystem'] = () => 'linux';
|
|
||||||
distribution['getArchiveType'] = () => 'tar.xz';
|
|
||||||
return distribution;
|
|
||||||
};
|
|
||||||
|
|
||||||
const mockDisco = (
|
|
||||||
packageResponse: unknown = packages,
|
|
||||||
detailsResponse: unknown = packageDetails
|
|
||||||
) =>
|
|
||||||
jest.spyOn(HttpClient.prototype, 'getJson').mockImplementation(async url => ({
|
|
||||||
result: url.includes('/packages?') ? packageResponse : detailsResponse,
|
|
||||||
statusCode: 200,
|
|
||||||
headers: {}
|
|
||||||
}));
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
jest.restoreAllMocks();
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('Red Hat package resolution', () => {
|
|
||||||
it('resolves the newest matching release and authoritative checksum', async () => {
|
|
||||||
const getJson = mockDisco();
|
|
||||||
const distribution = createDistribution('21');
|
|
||||||
|
|
||||||
const release = await distribution['findPackageForDownload']('21');
|
|
||||||
|
|
||||||
expect(release).toEqual({
|
|
||||||
version: '21.0.8+9',
|
|
||||||
url: packageDetails.result[0].direct_download_uri,
|
|
||||||
checksum: {
|
|
||||||
algorithm: 'sha256',
|
|
||||||
value: packageDetails.result[0].checksum,
|
|
||||||
source:
|
|
||||||
'https://api.foojay.io/disco/v3.0/ids/redhat-21.0.8-jdk-linux-x64'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
expect(getJson).toHaveBeenNthCalledWith(
|
|
||||||
1,
|
|
||||||
expect.stringContaining(
|
|
||||||
'distro=redhat&release_status=ga&operating_system=linux&architecture=x64&package_type=jdk&archive_type=tar.xz&directly_downloadable=true'
|
|
||||||
)
|
|
||||||
);
|
|
||||||
expect(getJson).toHaveBeenNthCalledWith(
|
|
||||||
2,
|
|
||||||
'https://api.foojay.io/disco/v3.0/ids/redhat-21.0.8-jdk-linux-x64'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('normalizes feature-only Disco versions before matching', async () => {
|
|
||||||
mockDisco(undefined, {
|
|
||||||
result: [
|
|
||||||
{
|
|
||||||
...packageDetails.result[0],
|
|
||||||
direct_download_uri: 'https://developers.redhat.com/openjdk-9.tar.xz'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
message: ''
|
|
||||||
});
|
|
||||||
const distribution = createDistribution('9');
|
|
||||||
|
|
||||||
const release = await distribution['findPackageForDownload']('9');
|
|
||||||
|
|
||||||
expect(release.version).toBe('9.0.0+181');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('selects the requested package type', async () => {
|
|
||||||
const getJson = mockDisco();
|
|
||||||
const distribution = createDistribution('21', 'jre');
|
|
||||||
|
|
||||||
await distribution['findPackageForDownload']('21');
|
|
||||||
|
|
||||||
expect(getJson).toHaveBeenNthCalledWith(
|
|
||||||
1,
|
|
||||||
expect.stringContaining('package_type=jre')
|
|
||||||
);
|
|
||||||
expect(getJson).toHaveBeenNthCalledWith(
|
|
||||||
2,
|
|
||||||
'https://api.foojay.io/disco/v3.0/ids/redhat-21.0.8-jre-linux-x64'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('maps Windows to ZIP packages', async () => {
|
|
||||||
const getJson = mockDisco();
|
|
||||||
const distribution = createDistribution('17');
|
|
||||||
distribution['getOperatingSystem'] = () => 'windows';
|
|
||||||
distribution['getArchiveType'] = () => 'zip';
|
|
||||||
|
|
||||||
await distribution['findPackageForDownload']('17');
|
|
||||||
|
|
||||||
expect(getJson).toHaveBeenNthCalledWith(
|
|
||||||
1,
|
|
||||||
expect.stringContaining(
|
|
||||||
'operating_system=windows&architecture=x64&package_type=jdk&archive_type=zip'
|
|
||||||
)
|
|
||||||
);
|
|
||||||
expect(getJson).toHaveBeenNthCalledWith(
|
|
||||||
2,
|
|
||||||
'https://api.foojay.io/disco/v3.0/ids/redhat-17.0.16-jdk-windows-x64'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('rejects Alpine before requesting glibc package metadata', async () => {
|
|
||||||
const getJson = mockDisco();
|
|
||||||
const distribution = new RedHatDistribution({
|
|
||||||
version: '21',
|
|
||||||
architecture: 'x64',
|
|
||||||
packageType: 'jdk',
|
|
||||||
checkLatest: false
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(() => distribution['getOperatingSystem'](true)).toThrow(
|
|
||||||
"Distribution 'redhat' does not support Alpine Linux because Red Hat portable archives require glibc."
|
|
||||||
);
|
|
||||||
expect(getJson).not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('rejects early-access versions before requesting metadata', async () => {
|
|
||||||
const getJson = mockDisco();
|
|
||||||
const distribution = createDistribution('21-ea');
|
|
||||||
|
|
||||||
await expect(distribution['findPackageForDownload']('21')).rejects.toThrow(
|
|
||||||
'Early access versions are not supported'
|
|
||||||
);
|
|
||||||
expect(getJson).not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('reports available versions when no release matches', async () => {
|
|
||||||
mockDisco();
|
|
||||||
const distribution = createDistribution('25');
|
|
||||||
|
|
||||||
await expect(distribution['findPackageForDownload']('25')).rejects.toThrow(
|
|
||||||
"No matching version found for SemVer '25'.\nDistribution: RedHat"
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('fails when the package detail has no direct Red Hat URL', async () => {
|
|
||||||
mockDisco(packages, {result: [], message: ''});
|
|
||||||
const distribution = createDistribution('21');
|
|
||||||
|
|
||||||
await expect(distribution['findPackageForDownload']('21')).rejects.toThrow(
|
|
||||||
'returned no direct Red Hat download URL'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('fails when the package detail has no SHA-256 checksum', async () => {
|
|
||||||
mockDisco(packages, {
|
|
||||||
result: [{...packageDetails.result[0], checksum: ''}],
|
|
||||||
message: ''
|
|
||||||
});
|
|
||||||
const distribution = createDistribution('21');
|
|
||||||
|
|
||||||
await expect(distribution['findPackageForDownload']('21')).rejects.toThrow(
|
|
||||||
'returned no SHA-256 checksum'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('fails with a targeted error when package metadata is missing', async () => {
|
|
||||||
mockDisco(null);
|
|
||||||
const distribution = createDistribution('21');
|
|
||||||
|
|
||||||
await expect(distribution['findPackageForDownload']('21')).rejects.toThrow(
|
|
||||||
'Could not fetch Red Hat package metadata from Foojay Disco'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -405,18 +405,6 @@ describe('extractJdkFile', () => {
|
|||||||
expect(io.which).not.toHaveBeenCalled();
|
expect(io.which).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('extracts xz-compressed tarballs with xz tar flags', async () => {
|
|
||||||
(tc.extractTar as jest.Mock).mockResolvedValue('/extracted' as never);
|
|
||||||
|
|
||||||
await expect(extractJdkFile('/tmp/jdk.tar.xz')).resolves.toBe('/extracted');
|
|
||||||
expect(tc.extractTar).toHaveBeenCalledWith(
|
|
||||||
'/tmp/jdk.tar.xz',
|
|
||||||
undefined,
|
|
||||||
'xJ'
|
|
||||||
);
|
|
||||||
expect(io.which).not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('uses the bundled tar.exe for zip archives on Windows', async () => {
|
it('uses the bundled tar.exe for zip archives on Windows', async () => {
|
||||||
setPlatform('win32');
|
setPlatform('win32');
|
||||||
const systemRoot = path.join(workDir, 'Windows');
|
const systemRoot = path.join(workDir, 'Windows');
|
||||||
|
|||||||
@@ -263,7 +263,6 @@ describe('validatePaginationUrl', () => {
|
|||||||
describe('getVersionFromFileContent', () => {
|
describe('getVersionFromFileContent', () => {
|
||||||
describe('.sdkmanrc', () => {
|
describe('.sdkmanrc', () => {
|
||||||
it.each([
|
it.each([
|
||||||
['java=26-tem', '26', 'temurin'],
|
|
||||||
['java=11.0.20.1-tem', '11.0.20', 'temurin'],
|
['java=11.0.20.1-tem', '11.0.20', 'temurin'],
|
||||||
['java = 11.0.20.1-tem', '11.0.20', 'temurin'],
|
['java = 11.0.20.1-tem', '11.0.20', 'temurin'],
|
||||||
['java=11.0.20.1-tem # a comment in sdkmanrc', '11.0.20', 'temurin'],
|
['java=11.0.20.1-tem # a comment in sdkmanrc', '11.0.20', 'temurin'],
|
||||||
|
|||||||
-14
@@ -64,20 +64,6 @@ inputs:
|
|||||||
server-password:
|
server-password:
|
||||||
description: 'Deprecated alias for server-password-env-var'
|
description: 'Deprecated alias for server-password-env-var'
|
||||||
required: false
|
required: false
|
||||||
mvn-server-credentials:
|
|
||||||
description: 'Multiline list of Maven server credentials in the format `server-id:USERNAME_ENV:PASSWORD_ENV`. When set, replaces the single server configured by server-id, server-username-env-var, and server-password-env-var.'
|
|
||||||
required: false
|
|
||||||
mvn-repositories:
|
|
||||||
description: 'Multiline list of Maven dependency repositories in the format `repository-id:repository-url:snapshots-enabled`.'
|
|
||||||
required: false
|
|
||||||
mvn-repositories-include-central:
|
|
||||||
description: 'Include Maven Central in the generated dependency repositories profile. When false, Central is disabled unless an explicit repository with ID `central` is declared.'
|
|
||||||
required: false
|
|
||||||
default: true
|
|
||||||
mvn-repositories-prioritize-central:
|
|
||||||
description: 'Place Maven Central before custom dependency repositories. Has no effect when Maven Central is excluded.'
|
|
||||||
required: false
|
|
||||||
default: true
|
|
||||||
settings-path:
|
settings-path:
|
||||||
description: 'Path to where the settings.xml file will be written. Default is ~/.m2.'
|
description: 'Path to where the settings.xml file will be written. Default is ~/.m2.'
|
||||||
required: false
|
required: false
|
||||||
|
|||||||
Vendored
+1
-12
@@ -30774,7 +30774,7 @@ module.exports = {
|
|||||||
/* harmony export */ gk: () => (/* binding */ INPUT_CACHE),
|
/* harmony export */ gk: () => (/* binding */ INPUT_CACHE),
|
||||||
/* harmony export */ wG: () => (/* binding */ INPUT_JOB_STATUS)
|
/* harmony export */ wG: () => (/* binding */ INPUT_JOB_STATUS)
|
||||||
/* harmony export */ });
|
/* harmony export */ });
|
||||||
/* unused harmony exports MACOS_JAVA_CONTENT_POSTFIX, INPUT_JAVA_VERSION, INPUT_JAVA_VERSION_FILE, INPUT_ARCHITECTURE, INPUT_JAVA_PACKAGE, INPUT_DISTRIBUTION, INPUT_JDK_FILE, INPUT_JDK_FILE_DEPRECATED, INPUT_CHECK_LATEST, INPUT_FORCE_DOWNLOAD, INPUT_SET_DEFAULT, INPUT_PROBLEM_MATCHER, INPUT_VERIFY_SIGNATURE, INPUT_VERIFY_SIGNATURE_PUBLIC_KEY, INPUT_MVN_SERVER_CREDENTIALS, INPUT_MVN_REPOSITORIES, INPUT_MVN_REPOSITORIES_INCLUDE_CENTRAL, INPUT_MVN_REPOSITORIES_PRIORITIZE_CENTRAL, INPUT_SERVER_ID, INPUT_SERVER_USERNAME_ENV_VAR, INPUT_SERVER_PASSWORD_ENV_VAR, INPUT_SERVER_USERNAME_DEPRECATED, INPUT_SERVER_PASSWORD_DEPRECATED, INPUT_SETTINGS_PATH, INPUT_OVERWRITE_SETTINGS, INPUT_GPG_PRIVATE_KEY, INPUT_GPG_PASSPHRASE_ENV_VAR, INPUT_GPG_PASSPHRASE_DEPRECATED, INPUT_DEFAULT_SERVER_USERNAME, INPUT_DEFAULT_SERVER_PASSWORD, INPUT_DEFAULT_GPG_PRIVATE_KEY, INPUT_DEFAULT_GPG_PASSPHRASE, MAVEN_GPG_PASSPHRASE_DEFAULT_ENV, GPG_PASSPHRASE_PROFILE_ID, MAVEN_REPOSITORIES_PROFILE_ID, MAVEN_CENTRAL_REPOSITORY_ID, MAVEN_CENTRAL_REPOSITORY_URL, INPUT_CACHE_DEPENDENCY_PATH, INPUT_CACHE_PATH, M2_DIR, MVN_SETTINGS_FILE, MVN_TOOLCHAINS_FILE, INPUT_MVN_TOOLCHAIN_ID, INPUT_MVN_TOOLCHAIN_VENDOR, INPUT_SHOW_DOWNLOAD_PROGRESS, MAVEN_ARGS_ENV, MAVEN_NO_TRANSFER_PROGRESS_FLAG, MAVEN_NO_TRANSFER_PROGRESS_LONG_FLAG, DISTRIBUTIONS_ONLY_MAJOR_VERSION */
|
/* unused harmony exports MACOS_JAVA_CONTENT_POSTFIX, INPUT_JAVA_VERSION, INPUT_JAVA_VERSION_FILE, INPUT_ARCHITECTURE, INPUT_JAVA_PACKAGE, INPUT_DISTRIBUTION, INPUT_JDK_FILE, INPUT_JDK_FILE_DEPRECATED, INPUT_CHECK_LATEST, INPUT_FORCE_DOWNLOAD, INPUT_SET_DEFAULT, INPUT_PROBLEM_MATCHER, INPUT_VERIFY_SIGNATURE, INPUT_VERIFY_SIGNATURE_PUBLIC_KEY, INPUT_SERVER_ID, INPUT_SERVER_USERNAME_ENV_VAR, INPUT_SERVER_PASSWORD_ENV_VAR, INPUT_SERVER_USERNAME_DEPRECATED, INPUT_SERVER_PASSWORD_DEPRECATED, INPUT_SETTINGS_PATH, INPUT_OVERWRITE_SETTINGS, INPUT_GPG_PRIVATE_KEY, INPUT_GPG_PASSPHRASE_ENV_VAR, INPUT_GPG_PASSPHRASE_DEPRECATED, INPUT_DEFAULT_SERVER_USERNAME, INPUT_DEFAULT_SERVER_PASSWORD, INPUT_DEFAULT_GPG_PRIVATE_KEY, INPUT_DEFAULT_GPG_PASSPHRASE, MAVEN_GPG_PASSPHRASE_DEFAULT_ENV, GPG_PASSPHRASE_PROFILE_ID, INPUT_CACHE_DEPENDENCY_PATH, INPUT_CACHE_PATH, M2_DIR, MVN_SETTINGS_FILE, MVN_TOOLCHAINS_FILE, INPUT_MVN_TOOLCHAIN_ID, INPUT_MVN_TOOLCHAIN_VENDOR, INPUT_SHOW_DOWNLOAD_PROGRESS, MAVEN_ARGS_ENV, MAVEN_NO_TRANSFER_PROGRESS_FLAG, MAVEN_NO_TRANSFER_PROGRESS_LONG_FLAG, DISTRIBUTIONS_ONLY_MAJOR_VERSION */
|
||||||
const MACOS_JAVA_CONTENT_POSTFIX = 'Contents/Home';
|
const MACOS_JAVA_CONTENT_POSTFIX = 'Contents/Home';
|
||||||
const INPUT_JAVA_VERSION = 'java-version';
|
const INPUT_JAVA_VERSION = 'java-version';
|
||||||
const INPUT_JAVA_VERSION_FILE = 'java-version-file';
|
const INPUT_JAVA_VERSION_FILE = 'java-version-file';
|
||||||
@@ -30789,10 +30789,6 @@ const INPUT_SET_DEFAULT = 'set-default';
|
|||||||
const INPUT_PROBLEM_MATCHER = 'problem-matcher';
|
const INPUT_PROBLEM_MATCHER = 'problem-matcher';
|
||||||
const INPUT_VERIFY_SIGNATURE = 'verify-signature';
|
const INPUT_VERIFY_SIGNATURE = 'verify-signature';
|
||||||
const INPUT_VERIFY_SIGNATURE_PUBLIC_KEY = 'verify-signature-public-key';
|
const INPUT_VERIFY_SIGNATURE_PUBLIC_KEY = 'verify-signature-public-key';
|
||||||
const INPUT_MVN_SERVER_CREDENTIALS = 'mvn-server-credentials';
|
|
||||||
const INPUT_MVN_REPOSITORIES = 'mvn-repositories';
|
|
||||||
const INPUT_MVN_REPOSITORIES_INCLUDE_CENTRAL = 'mvn-repositories-include-central';
|
|
||||||
const INPUT_MVN_REPOSITORIES_PRIORITIZE_CENTRAL = 'mvn-repositories-prioritize-central';
|
|
||||||
const INPUT_SERVER_ID = 'server-id';
|
const INPUT_SERVER_ID = 'server-id';
|
||||||
const INPUT_SERVER_USERNAME_ENV_VAR = 'server-username-env-var';
|
const INPUT_SERVER_USERNAME_ENV_VAR = 'server-username-env-var';
|
||||||
const INPUT_SERVER_PASSWORD_ENV_VAR = 'server-password-env-var';
|
const INPUT_SERVER_PASSWORD_ENV_VAR = 'server-password-env-var';
|
||||||
@@ -30813,9 +30809,6 @@ const INPUT_DEFAULT_GPG_PASSPHRASE = 'GPG_PASSPHRASE';
|
|||||||
const MAVEN_GPG_PASSPHRASE_DEFAULT_ENV = 'MAVEN_GPG_PASSPHRASE';
|
const MAVEN_GPG_PASSPHRASE_DEFAULT_ENV = 'MAVEN_GPG_PASSPHRASE';
|
||||||
// Id of the settings.xml profile used to set `gpg.passphraseEnvName`.
|
// Id of the settings.xml profile used to set `gpg.passphraseEnvName`.
|
||||||
const GPG_PASSPHRASE_PROFILE_ID = 'setup-java-gpg';
|
const GPG_PASSPHRASE_PROFILE_ID = 'setup-java-gpg';
|
||||||
const MAVEN_REPOSITORIES_PROFILE_ID = 'setup-java-repositories';
|
|
||||||
const MAVEN_CENTRAL_REPOSITORY_ID = 'central';
|
|
||||||
const MAVEN_CENTRAL_REPOSITORY_URL = 'https://repo.maven.apache.org/maven2';
|
|
||||||
const INPUT_CACHE = 'cache';
|
const INPUT_CACHE = 'cache';
|
||||||
const INPUT_CACHE_JDK = 'cache-jdk';
|
const INPUT_CACHE_JDK = 'cache-jdk';
|
||||||
const INPUT_CACHE_DEPENDENCY_PATH = 'cache-dependency-path';
|
const INPUT_CACHE_DEPENDENCY_PATH = 'cache-dependency-path';
|
||||||
@@ -30905,8 +30898,6 @@ async function extractJdkFile(toolPath, extension) {
|
|||||||
if (!extension) {
|
if (!extension) {
|
||||||
extension = toolPath.endsWith('.tar.gz')
|
extension = toolPath.endsWith('.tar.gz')
|
||||||
? 'tar.gz'
|
? 'tar.gz'
|
||||||
: toolPath.endsWith('.tar.xz')
|
|
||||||
? 'tar.xz'
|
|
||||||
: path.extname(toolPath);
|
: path.extname(toolPath);
|
||||||
if (extension.startsWith('.')) {
|
if (extension.startsWith('.')) {
|
||||||
extension = extension.substring(1);
|
extension = extension.substring(1);
|
||||||
@@ -30915,8 +30906,6 @@ async function extractJdkFile(toolPath, extension) {
|
|||||||
switch (extension) {
|
switch (extension) {
|
||||||
case 'tar.gz':
|
case 'tar.gz':
|
||||||
return await extractTarGz(toolPath);
|
return await extractTarGz(toolPath);
|
||||||
case 'tar.xz':
|
|
||||||
return await tc.extractTar(toolPath, undefined, 'xJ');
|
|
||||||
case 'tar':
|
case 'tar':
|
||||||
return await tc.extractTar(toolPath);
|
return await tc.extractTar(toolPath);
|
||||||
case 'zip':
|
case 'zip':
|
||||||
|
|||||||
Vendored
-139
@@ -1,139 +0,0 @@
|
|||||||
export const id = 228;
|
|
||||||
export const ids = [228];
|
|
||||||
export const modules = {
|
|
||||||
|
|
||||||
/***/ 8228:
|
|
||||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
||||||
|
|
||||||
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
||||||
/* harmony export */ RedHatDistribution: () => (/* binding */ RedHatDistribution)
|
|
||||||
/* harmony export */ });
|
|
||||||
/* harmony import */ var _actions_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3838);
|
|
||||||
/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9896);
|
|
||||||
/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_1__);
|
|
||||||
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6928);
|
|
||||||
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_2__);
|
|
||||||
/* harmony import */ var semver__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2088);
|
|
||||||
/* harmony import */ var semver__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(semver__WEBPACK_IMPORTED_MODULE_3__);
|
|
||||||
/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4527);
|
|
||||||
/* harmony import */ var _base_installer_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(6242);
|
|
||||||
/* harmony import */ var _platform_types_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7444);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const DISCO_API_URL = 'https://api.foojay.io/disco/v3.0';
|
|
||||||
class RedHatDistribution extends _base_installer_js__WEBPACK_IMPORTED_MODULE_5__/* .JavaBase */ .O {
|
|
||||||
constructor(installerOptions) {
|
|
||||||
super('RedHat', installerOptions);
|
|
||||||
}
|
|
||||||
async findPackageForDownload(range) {
|
|
||||||
if (!this.stable) {
|
|
||||||
throw new Error('Early access versions are not supported');
|
|
||||||
}
|
|
||||||
const availablePackages = await this.getAvailablePackages();
|
|
||||||
const normalizedPackages = availablePackages
|
|
||||||
.map(item => ({
|
|
||||||
item,
|
|
||||||
version: this.normalizeDiscoVersion(item.java_version)
|
|
||||||
}))
|
|
||||||
.filter((item) => item.version !== null)
|
|
||||||
.sort((left, right) => -semver__WEBPACK_IMPORTED_MODULE_3___default().compareBuild(left.version, right.version));
|
|
||||||
const selectedPackage = normalizedPackages.find(item => (0,_util_js__WEBPACK_IMPORTED_MODULE_4__/* .isVersionSatisfies */ .y)(range, item.version));
|
|
||||||
if (!selectedPackage) {
|
|
||||||
throw this.createVersionNotFoundError(range, normalizedPackages.map(item => item.version), `Operating system: ${this.getOperatingSystem()}`);
|
|
||||||
}
|
|
||||||
const detailsUrl = `${DISCO_API_URL}/ids/${selectedPackage.item.id}`;
|
|
||||||
const response = await this.http.getJson(detailsUrl);
|
|
||||||
const details = response.result?.result?.[0];
|
|
||||||
if (!details?.direct_download_uri) {
|
|
||||||
throw new Error(`Foojay Disco returned no direct Red Hat download URL for package '${selectedPackage.item.id}'.`);
|
|
||||||
}
|
|
||||||
const checksum = details.checksum?.trim();
|
|
||||||
if (details.checksum_type?.toLowerCase() !== 'sha256' || !checksum) {
|
|
||||||
throw new Error(`Foojay Disco returned no SHA-256 checksum for Red Hat package '${selectedPackage.item.id}'.`);
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
version: selectedPackage.version,
|
|
||||||
url: details.direct_download_uri,
|
|
||||||
checksum: {
|
|
||||||
algorithm: 'sha256',
|
|
||||||
value: checksum,
|
|
||||||
source: detailsUrl
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
async downloadTool(javaRelease) {
|
|
||||||
_actions_core__WEBPACK_IMPORTED_MODULE_0__/* .info */ .pq(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`);
|
|
||||||
let javaArchivePath = await this.downloadAndVerify(javaRelease);
|
|
||||||
_actions_core__WEBPACK_IMPORTED_MODULE_0__/* .info */ .pq('Extracting Java archive...');
|
|
||||||
const archiveType = this.getArchiveType();
|
|
||||||
if (archiveType === 'zip') {
|
|
||||||
javaArchivePath = (0,_util_js__WEBPACK_IMPORTED_MODULE_4__/* .renameWinArchive */ .n2)(javaArchivePath);
|
|
||||||
}
|
|
||||||
const extractedJavaPath = await (0,_util_js__WEBPACK_IMPORTED_MODULE_4__/* .extractJdkFile */ .PE)(javaArchivePath, archiveType);
|
|
||||||
const archiveName = fs__WEBPACK_IMPORTED_MODULE_1___default().readdirSync(extractedJavaPath)[0];
|
|
||||||
if (!archiveName) {
|
|
||||||
throw new Error(`The Red Hat archive for Java ${javaRelease.version} was empty.`);
|
|
||||||
}
|
|
||||||
const archivePath = path__WEBPACK_IMPORTED_MODULE_2___default().join(extractedJavaPath, archiveName);
|
|
||||||
const javaPath = await (0,_util_js__WEBPACK_IMPORTED_MODULE_4__/* .cacheJdkDir */ .Vj)(archivePath, this.toolcacheFolderName, this.getToolcacheVersionName(javaRelease.version), this.architecture);
|
|
||||||
return { version: javaRelease.version, path: javaPath };
|
|
||||||
}
|
|
||||||
async getAvailablePackages() {
|
|
||||||
const operatingSystem = this.getOperatingSystem();
|
|
||||||
const archiveType = this.getArchiveType();
|
|
||||||
const query = new URLSearchParams({
|
|
||||||
distro: 'redhat',
|
|
||||||
release_status: 'ga',
|
|
||||||
operating_system: operatingSystem,
|
|
||||||
architecture: this.distributionArchitecture(),
|
|
||||||
package_type: this.packageType,
|
|
||||||
archive_type: archiveType,
|
|
||||||
directly_downloadable: 'true'
|
|
||||||
});
|
|
||||||
const url = `${DISCO_API_URL}/packages?${query.toString()}`;
|
|
||||||
const response = await this.http.getJson(url);
|
|
||||||
const packages = response.result?.result;
|
|
||||||
if (!Array.isArray(packages)) {
|
|
||||||
throw new Error(`Could not fetch Red Hat package metadata from Foojay Disco: ${url}`);
|
|
||||||
}
|
|
||||||
return packages.filter(item => item.distribution === 'redhat' &&
|
|
||||||
item.release_status === 'ga' &&
|
|
||||||
item.operating_system === operatingSystem &&
|
|
||||||
item.architecture === this.distributionArchitecture() &&
|
|
||||||
item.package_type === this.packageType &&
|
|
||||||
item.archive_type === archiveType &&
|
|
||||||
item.directly_downloadable);
|
|
||||||
}
|
|
||||||
getOperatingSystem(alpine = (0,_platform_types_js__WEBPACK_IMPORTED_MODULE_6__/* .isAlpineLinux */ .G6)()) {
|
|
||||||
if (alpine) {
|
|
||||||
throw new Error("Distribution 'redhat' does not support Alpine Linux because Red Hat portable archives require glibc.");
|
|
||||||
}
|
|
||||||
return process.platform === 'win32' ? 'windows' : 'linux';
|
|
||||||
}
|
|
||||||
getArchiveType() {
|
|
||||||
return process.platform === 'win32' ? 'zip' : 'tar.xz';
|
|
||||||
}
|
|
||||||
normalizeDiscoVersion(version) {
|
|
||||||
let normalizedVersion = version.trim();
|
|
||||||
if (/^\d+\+\d+$/.test(normalizedVersion)) {
|
|
||||||
normalizedVersion = normalizedVersion.replace('+', '.0.0+');
|
|
||||||
}
|
|
||||||
else if (/^\d+$/.test(normalizedVersion)) {
|
|
||||||
normalizedVersion = `${normalizedVersion}.0.0`;
|
|
||||||
}
|
|
||||||
else if (/^\d+\.\d+$/.test(normalizedVersion)) {
|
|
||||||
normalizedVersion = `${normalizedVersion}.0`;
|
|
||||||
}
|
|
||||||
return semver__WEBPACK_IMPORTED_MODULE_3___default().valid(normalizedVersion) ? normalizedVersion : null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***/ })
|
|
||||||
|
|
||||||
};
|
|
||||||
Vendored
+17
-149
@@ -10,11 +10,7 @@ __webpack_require__.r(__webpack_exports__);
|
|||||||
/* harmony export */ configureAuthentication: () => (/* binding */ configureAuthentication),
|
/* harmony export */ configureAuthentication: () => (/* binding */ configureAuthentication),
|
||||||
/* harmony export */ createAuthenticationSettings: () => (/* binding */ createAuthenticationSettings),
|
/* harmony export */ createAuthenticationSettings: () => (/* binding */ createAuthenticationSettings),
|
||||||
/* harmony export */ generate: () => (/* binding */ generate),
|
/* harmony export */ generate: () => (/* binding */ generate),
|
||||||
/* harmony export */ getInputWithDeprecatedAlias: () => (/* binding */ getInputWithDeprecatedAlias),
|
/* harmony export */ getInputWithDeprecatedAlias: () => (/* binding */ getInputWithDeprecatedAlias)
|
||||||
/* harmony export */ getMavenRepositorySettings: () => (/* binding */ getMavenRepositorySettings),
|
|
||||||
/* harmony export */ getMavenServerSettings: () => (/* binding */ getMavenServerSettings),
|
|
||||||
/* harmony export */ parseMavenRepositories: () => (/* binding */ parseMavenRepositories),
|
|
||||||
/* harmony export */ parseMavenServerCredentials: () => (/* binding */ parseMavenServerCredentials)
|
|
||||||
/* harmony export */ });
|
/* harmony export */ });
|
||||||
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6928);
|
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6928);
|
||||||
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_0__);
|
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_0__);
|
||||||
@@ -38,8 +34,9 @@ __webpack_require__.r(__webpack_exports__);
|
|||||||
|
|
||||||
|
|
||||||
async function configureAuthentication() {
|
async function configureAuthentication() {
|
||||||
const servers = getMavenServerSettings();
|
const id = _actions_core__WEBPACK_IMPORTED_MODULE_1__/* .getInput */ .V4(_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_SERVER_ID */ .fd);
|
||||||
const repositorySettings = getMavenRepositorySettings();
|
const usernameEnvVar = getInputWithDeprecatedAlias(_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_SERVER_USERNAME_ENV_VAR */ .sc, _constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_SERVER_USERNAME_DEPRECATED */ .sp, _constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_DEFAULT_SERVER_USERNAME */ .Wj);
|
||||||
|
const passwordEnvVar = getInputWithDeprecatedAlias(_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_SERVER_PASSWORD_ENV_VAR */ .r4, _constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_SERVER_PASSWORD_DEPRECATED */ .Vt, _constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_DEFAULT_SERVER_PASSWORD */ .xp);
|
||||||
const settingsDirectory = _actions_core__WEBPACK_IMPORTED_MODULE_1__/* .getInput */ .V4(_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_SETTINGS_PATH */ .Xh) ||
|
const settingsDirectory = _actions_core__WEBPACK_IMPORTED_MODULE_1__/* .getInput */ .V4(_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_SETTINGS_PATH */ .Xh) ||
|
||||||
path__WEBPACK_IMPORTED_MODULE_0__.join(os__WEBPACK_IMPORTED_MODULE_4__.homedir(), _constants_js__WEBPACK_IMPORTED_MODULE_7__/* .M2_DIR */ .iT);
|
path__WEBPACK_IMPORTED_MODULE_0__.join(os__WEBPACK_IMPORTED_MODULE_4__.homedir(), _constants_js__WEBPACK_IMPORTED_MODULE_7__/* .M2_DIR */ .iT);
|
||||||
const overwriteSettings = (0,_util_js__WEBPACK_IMPORTED_MODULE_6__/* .getBooleanInput */ .Vt)(_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_OVERWRITE_SETTINGS */ .TS, true);
|
const overwriteSettings = (0,_util_js__WEBPACK_IMPORTED_MODULE_6__/* .getBooleanInput */ .Vt)(_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_OVERWRITE_SETTINGS */ .TS, true);
|
||||||
@@ -49,7 +46,7 @@ async function configureAuthentication() {
|
|||||||
if (gpgPrivateKey) {
|
if (gpgPrivateKey) {
|
||||||
_actions_core__WEBPACK_IMPORTED_MODULE_1__/* .setSecret */ .Pq(gpgPrivateKey);
|
_actions_core__WEBPACK_IMPORTED_MODULE_1__/* .setSecret */ .Pq(gpgPrivateKey);
|
||||||
}
|
}
|
||||||
await createAuthenticationSettings(servers, settingsDirectory, overwriteSettings, gpgPassphraseEnvVar, repositorySettings);
|
await createAuthenticationSettings(id, usernameEnvVar, passwordEnvVar, settingsDirectory, overwriteSettings, gpgPassphraseEnvVar);
|
||||||
if (gpgPrivateKey) {
|
if (gpgPrivateKey) {
|
||||||
_actions_core__WEBPACK_IMPORTED_MODULE_1__/* .info */ .pq('Importing private gpg key');
|
_actions_core__WEBPACK_IMPORTED_MODULE_1__/* .info */ .pq('Importing private gpg key');
|
||||||
const gpgHome = await _gpg_js__WEBPACK_IMPORTED_MODULE_5__/* .importKey */ .Fh(gpgPrivateKey);
|
const gpgHome = await _gpg_js__WEBPACK_IMPORTED_MODULE_5__/* .importKey */ .Fh(gpgPrivateKey);
|
||||||
@@ -71,106 +68,15 @@ function getInputWithDeprecatedAlias(inputName, deprecatedInputName, defaultValu
|
|||||||
}
|
}
|
||||||
return value || deprecatedValue || defaultValue || '';
|
return value || deprecatedValue || defaultValue || '';
|
||||||
}
|
}
|
||||||
// only exported for testing purposes
|
async function createAuthenticationSettings(id, usernameEnvVar, passwordEnvVar, settingsDirectory, overwriteSettings, gpgPassphraseEnvVar = undefined) {
|
||||||
function getMavenServerSettings() {
|
_actions_core__WEBPACK_IMPORTED_MODULE_1__/* .info */ .pq(`Creating ${_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .MVN_SETTINGS_FILE */ .vO} with server-id: ${id}`);
|
||||||
const entries = _actions_core__WEBPACK_IMPORTED_MODULE_1__/* .getMultilineInput */ .q3(_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_MVN_SERVER_CREDENTIALS */ .MM);
|
|
||||||
if (entries.some(entry => entry.trim())) {
|
|
||||||
return parseMavenServerCredentials(entries);
|
|
||||||
}
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
id: _actions_core__WEBPACK_IMPORTED_MODULE_1__/* .getInput */ .V4(_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_SERVER_ID */ .fd),
|
|
||||||
usernameEnvVar: getInputWithDeprecatedAlias(_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_SERVER_USERNAME_ENV_VAR */ .sc, _constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_SERVER_USERNAME_DEPRECATED */ .sp, _constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_DEFAULT_SERVER_USERNAME */ .Wj),
|
|
||||||
passwordEnvVar: getInputWithDeprecatedAlias(_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_SERVER_PASSWORD_ENV_VAR */ .r4, _constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_SERVER_PASSWORD_DEPRECATED */ .Vt, _constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_DEFAULT_SERVER_PASSWORD */ .xp)
|
|
||||||
}
|
|
||||||
];
|
|
||||||
}
|
|
||||||
// only exported for testing purposes
|
|
||||||
function parseMavenServerCredentials(entries) {
|
|
||||||
const servers = [];
|
|
||||||
const serverIds = new Set();
|
|
||||||
entries.forEach((entry, index) => {
|
|
||||||
if (!entry.trim()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const fields = entry.split(':');
|
|
||||||
if (fields.length !== 3) {
|
|
||||||
throw new Error(`Invalid mvn-server-credentials entry at line ${index + 1}. Expected format: server-id:USERNAME_ENV:PASSWORD_ENV`);
|
|
||||||
}
|
|
||||||
const [id, usernameEnvVar, passwordEnvVar] = fields.map(field => field.trim());
|
|
||||||
if (!id || !usernameEnvVar || !passwordEnvVar) {
|
|
||||||
throw new Error(`Invalid mvn-server-credentials entry at line ${index + 1}. server-id, username environment variable, and password environment variable are required`);
|
|
||||||
}
|
|
||||||
if (serverIds.has(id)) {
|
|
||||||
throw new Error(`Duplicate server-id '${id}' in mvn-server-credentials input`);
|
|
||||||
}
|
|
||||||
serverIds.add(id);
|
|
||||||
servers.push({ id, usernameEnvVar, passwordEnvVar });
|
|
||||||
});
|
|
||||||
return servers;
|
|
||||||
}
|
|
||||||
// only exported for testing purposes
|
|
||||||
function getMavenRepositorySettings() {
|
|
||||||
const entries = _actions_core__WEBPACK_IMPORTED_MODULE_1__/* .getMultilineInput */ .q3(_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_MVN_REPOSITORIES */ .W2);
|
|
||||||
if (!entries.some(entry => entry.trim())) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
const includeCentral = (0,_util_js__WEBPACK_IMPORTED_MODULE_6__/* .getBooleanInput */ .Vt)(_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_MVN_REPOSITORIES_INCLUDE_CENTRAL */ .H5, true);
|
|
||||||
return {
|
|
||||||
repositories: parseMavenRepositories(entries, includeCentral),
|
|
||||||
includeCentral,
|
|
||||||
prioritizeCentral: (0,_util_js__WEBPACK_IMPORTED_MODULE_6__/* .getBooleanInput */ .Vt)(_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_MVN_REPOSITORIES_PRIORITIZE_CENTRAL */ .OT, true)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
// only exported for testing purposes
|
|
||||||
function parseMavenRepositories(entries, includeCentral) {
|
|
||||||
const repositories = [];
|
|
||||||
const repositoryIds = new Set();
|
|
||||||
entries.forEach((entry, index) => {
|
|
||||||
if (!entry.trim()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const firstSeparator = entry.indexOf(':');
|
|
||||||
const lastSeparator = entry.lastIndexOf(':');
|
|
||||||
if (firstSeparator <= 0 || lastSeparator <= firstSeparator) {
|
|
||||||
throw new Error(`Invalid mvn-repositories entry at line ${index + 1}. Expected format: repository-id:repository-url:snapshots-enabled`);
|
|
||||||
}
|
|
||||||
const id = entry.slice(0, firstSeparator).trim();
|
|
||||||
const url = entry.slice(firstSeparator + 1, lastSeparator).trim();
|
|
||||||
const snapshotsValue = entry
|
|
||||||
.slice(lastSeparator + 1)
|
|
||||||
.trim()
|
|
||||||
.toLowerCase();
|
|
||||||
if (!id || !url || !snapshotsValue) {
|
|
||||||
throw new Error(`Invalid mvn-repositories entry at line ${index + 1}. repository-id, repository URL, and snapshots-enabled are required`);
|
|
||||||
}
|
|
||||||
if (snapshotsValue !== 'true' && snapshotsValue !== 'false') {
|
|
||||||
throw new Error(`Invalid snapshots-enabled value '${snapshotsValue}' in mvn-repositories entry at line ${index + 1}. Expected true or false`);
|
|
||||||
}
|
|
||||||
if (repositoryIds.has(id)) {
|
|
||||||
throw new Error(`Duplicate repository-id '${id}' in mvn-repositories input`);
|
|
||||||
}
|
|
||||||
if (includeCentral && id === _constants_js__WEBPACK_IMPORTED_MODULE_7__/* .MAVEN_CENTRAL_REPOSITORY_ID */ .xg) {
|
|
||||||
throw new Error(`Repository-id '${_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .MAVEN_CENTRAL_REPOSITORY_ID */ .xg}' is reserved when ${_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .INPUT_MVN_REPOSITORIES_INCLUDE_CENTRAL */ .H5} is enabled`);
|
|
||||||
}
|
|
||||||
repositoryIds.add(id);
|
|
||||||
repositories.push({
|
|
||||||
id,
|
|
||||||
url,
|
|
||||||
snapshotsEnabled: snapshotsValue === 'true'
|
|
||||||
});
|
|
||||||
});
|
|
||||||
return repositories;
|
|
||||||
}
|
|
||||||
async function createAuthenticationSettings(servers, settingsDirectory, overwriteSettings, gpgPassphraseEnvVar = undefined, repositorySettings = undefined) {
|
|
||||||
_actions_core__WEBPACK_IMPORTED_MODULE_1__/* .info */ .pq(`Creating ${_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .MVN_SETTINGS_FILE */ .vO} with server-id: ${servers.map(server => server.id).join(', ')}`);
|
|
||||||
// when an alternate m2 location is specified use only that location (no .m2 directory)
|
// when an alternate m2 location is specified use only that location (no .m2 directory)
|
||||||
// otherwise use the home/.m2/ path
|
// otherwise use the home/.m2/ path
|
||||||
await _actions_io__WEBPACK_IMPORTED_MODULE_2__/* .mkdirP */ .U$(settingsDirectory);
|
await _actions_io__WEBPACK_IMPORTED_MODULE_2__/* .mkdirP */ .U$(settingsDirectory);
|
||||||
await write(settingsDirectory, generate(servers, gpgPassphraseEnvVar, repositorySettings), overwriteSettings);
|
await write(settingsDirectory, generate(id, usernameEnvVar, passwordEnvVar, gpgPassphraseEnvVar), overwriteSettings);
|
||||||
}
|
}
|
||||||
// only exported for testing purposes
|
// only exported for testing purposes
|
||||||
function generate(servers, gpgPassphraseEnvVar, repositorySettings) {
|
function generate(id, usernameEnvVar, passwordEnvVar, gpgPassphraseEnvVar) {
|
||||||
// The maven-gpg-plugin reads the passphrase from the environment variable
|
// The maven-gpg-plugin reads the passphrase from the environment variable
|
||||||
// named by the `gpg.passphraseEnvName` property (default MAVEN_GPG_PASSPHRASE).
|
// named by the `gpg.passphraseEnvName` property (default MAVEN_GPG_PASSPHRASE).
|
||||||
// Only configure it when the requested env var name differs from that default;
|
// Only configure it when the requested env var name differs from that default;
|
||||||
@@ -184,54 +90,16 @@ function generate(servers, gpgPassphraseEnvVar, repositorySettings) {
|
|||||||
' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
|
' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
|
||||||
' xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">',
|
' xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">',
|
||||||
' <interactiveMode>false</interactiveMode>',
|
' <interactiveMode>false</interactiveMode>',
|
||||||
' <servers>'
|
' <servers>',
|
||||||
|
' <server>',
|
||||||
|
` <id>${(0,_xml_js__WEBPACK_IMPORTED_MODULE_8__/* .escapeXmlText */ .I)(id)}</id>`,
|
||||||
|
` <username>${(0,_xml_js__WEBPACK_IMPORTED_MODULE_8__/* .escapeXmlText */ .I)(`\${env.${usernameEnvVar}}`)}</username>`,
|
||||||
|
` <password>${(0,_xml_js__WEBPACK_IMPORTED_MODULE_8__/* .escapeXmlText */ .I)(`\${env.${passwordEnvVar}}`)}</password>`,
|
||||||
|
' </server>',
|
||||||
|
' </servers>'
|
||||||
];
|
];
|
||||||
for (const server of servers) {
|
|
||||||
lines.push(' <server>', ` <id>${(0,_xml_js__WEBPACK_IMPORTED_MODULE_8__/* .escapeXmlText */ .I)(server.id)}</id>`, ` <username>${(0,_xml_js__WEBPACK_IMPORTED_MODULE_8__/* .escapeXmlText */ .I)(`\${env.${server.usernameEnvVar}}`)}</username>`, ` <password>${(0,_xml_js__WEBPACK_IMPORTED_MODULE_8__/* .escapeXmlText */ .I)(`\${env.${server.passwordEnvVar}}`)}</password>`, ' </server>');
|
|
||||||
}
|
|
||||||
lines.push(' </servers>');
|
|
||||||
if (repositorySettings || includeGpgPassphraseProfile) {
|
|
||||||
lines.push(' <profiles>');
|
|
||||||
if (repositorySettings) {
|
|
||||||
const centralRepository = {
|
|
||||||
id: _constants_js__WEBPACK_IMPORTED_MODULE_7__/* .MAVEN_CENTRAL_REPOSITORY_ID */ .xg,
|
|
||||||
url: _constants_js__WEBPACK_IMPORTED_MODULE_7__/* .MAVEN_CENTRAL_REPOSITORY_URL */ .jv,
|
|
||||||
snapshotsEnabled: false
|
|
||||||
};
|
|
||||||
const customCentralConfigured = repositorySettings.repositories.some(repository => repository.id === _constants_js__WEBPACK_IMPORTED_MODULE_7__/* .MAVEN_CENTRAL_REPOSITORY_ID */ .xg);
|
|
||||||
const repositories = repositorySettings.includeCentral
|
|
||||||
? repositorySettings.prioritizeCentral
|
|
||||||
? [centralRepository, ...repositorySettings.repositories]
|
|
||||||
: [...repositorySettings.repositories, centralRepository]
|
|
||||||
: customCentralConfigured
|
|
||||||
? repositorySettings.repositories
|
|
||||||
: [
|
|
||||||
...repositorySettings.repositories,
|
|
||||||
{ ...centralRepository, releasesEnabled: false }
|
|
||||||
];
|
|
||||||
lines.push(' <profile>', ` <id>${_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .MAVEN_REPOSITORIES_PROFILE_ID */ .hq}</id>`, ' <repositories>');
|
|
||||||
for (const repository of repositories) {
|
|
||||||
lines.push(' <repository>', ` <id>${(0,_xml_js__WEBPACK_IMPORTED_MODULE_8__/* .escapeXmlText */ .I)(repository.id)}</id>`, ` <url>${(0,_xml_js__WEBPACK_IMPORTED_MODULE_8__/* .escapeXmlText */ .I)(repository.url)}</url>`, ...(repository.releasesEnabled === undefined
|
|
||||||
? []
|
|
||||||
: [
|
|
||||||
' <releases>',
|
|
||||||
` <enabled>${repository.releasesEnabled}</enabled>`,
|
|
||||||
' </releases>'
|
|
||||||
]), ' <snapshots>', ` <enabled>${repository.snapshotsEnabled}</enabled>`, ' </snapshots>', ' </repository>');
|
|
||||||
}
|
|
||||||
lines.push(' </repositories>', ' </profile>');
|
|
||||||
}
|
|
||||||
if (includeGpgPassphraseProfile) {
|
if (includeGpgPassphraseProfile) {
|
||||||
lines.push(' <profile>', ` <id>${_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .GPG_PASSPHRASE_PROFILE_ID */ .K$}</id>`, ' <properties>', ` <gpg.passphraseEnvName>${(0,_xml_js__WEBPACK_IMPORTED_MODULE_8__/* .escapeXmlText */ .I)(gpgPassphraseEnvVar)}</gpg.passphraseEnvName>`, ' </properties>', ' </profile>');
|
lines.push(' <profiles>', ' <profile>', ` <id>${_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .GPG_PASSPHRASE_PROFILE_ID */ .K$}</id>`, ' <properties>', ` <gpg.passphraseEnvName>${(0,_xml_js__WEBPACK_IMPORTED_MODULE_8__/* .escapeXmlText */ .I)(gpgPassphraseEnvVar)}</gpg.passphraseEnvName>`, ' </properties>', ' </profile>', ' </profiles>', ' <activeProfiles>', ` <activeProfile>${_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .GPG_PASSPHRASE_PROFILE_ID */ .K$}</activeProfile>`, ' </activeProfiles>');
|
||||||
}
|
|
||||||
lines.push(' </profiles>', ' <activeProfiles>');
|
|
||||||
if (repositorySettings) {
|
|
||||||
lines.push(` <activeProfile>${_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .MAVEN_REPOSITORIES_PROFILE_ID */ .hq}</activeProfile>`);
|
|
||||||
}
|
|
||||||
if (includeGpgPassphraseProfile) {
|
|
||||||
lines.push(` <activeProfile>${_constants_js__WEBPACK_IMPORTED_MODULE_7__/* .GPG_PASSPHRASE_PROFILE_ID */ .K$}</activeProfile>`);
|
|
||||||
}
|
|
||||||
lines.push(' </activeProfiles>');
|
|
||||||
}
|
}
|
||||||
lines.push('</settings>');
|
lines.push('</settings>');
|
||||||
return lines.join('\n');
|
return lines.join('\n');
|
||||||
|
|||||||
Vendored
+1
-38
@@ -30772,20 +30772,16 @@ module.exports = {
|
|||||||
/* harmony export */ E8: () => (/* binding */ INPUT_SET_DEFAULT),
|
/* harmony export */ E8: () => (/* binding */ INPUT_SET_DEFAULT),
|
||||||
/* harmony export */ Fi: () => (/* binding */ STATE_GPG_HOME),
|
/* harmony export */ Fi: () => (/* binding */ STATE_GPG_HOME),
|
||||||
/* harmony export */ GL: () => (/* binding */ INPUT_CACHE_JDK),
|
/* harmony export */ GL: () => (/* binding */ INPUT_CACHE_JDK),
|
||||||
/* harmony export */ H5: () => (/* binding */ INPUT_MVN_REPOSITORIES_INCLUDE_CENTRAL),
|
|
||||||
/* harmony export */ I9: () => (/* binding */ INPUT_FORCE_DOWNLOAD),
|
/* harmony export */ I9: () => (/* binding */ INPUT_FORCE_DOWNLOAD),
|
||||||
/* harmony export */ K$: () => (/* binding */ GPG_PASSPHRASE_PROFILE_ID),
|
/* harmony export */ K$: () => (/* binding */ GPG_PASSPHRASE_PROFILE_ID),
|
||||||
/* harmony export */ LS: () => (/* binding */ INPUT_ARCHITECTURE),
|
/* harmony export */ LS: () => (/* binding */ INPUT_ARCHITECTURE),
|
||||||
/* harmony export */ MM: () => (/* binding */ INPUT_MVN_SERVER_CREDENTIALS),
|
|
||||||
/* harmony export */ OD: () => (/* binding */ INPUT_DEFAULT_GPG_PRIVATE_KEY),
|
/* harmony export */ OD: () => (/* binding */ INPUT_DEFAULT_GPG_PRIVATE_KEY),
|
||||||
/* harmony export */ OT: () => (/* binding */ INPUT_MVN_REPOSITORIES_PRIORITIZE_CENTRAL),
|
|
||||||
/* harmony export */ PG: () => (/* binding */ MACOS_JAVA_CONTENT_POSTFIX),
|
/* harmony export */ PG: () => (/* binding */ MACOS_JAVA_CONTENT_POSTFIX),
|
||||||
/* harmony export */ QM: () => (/* binding */ INPUT_JAVA_VERSION),
|
/* harmony export */ QM: () => (/* binding */ INPUT_JAVA_VERSION),
|
||||||
/* harmony export */ RX: () => (/* binding */ INPUT_DEFAULT_GPG_PASSPHRASE),
|
/* harmony export */ RX: () => (/* binding */ INPUT_DEFAULT_GPG_PASSPHRASE),
|
||||||
/* harmony export */ TS: () => (/* binding */ INPUT_OVERWRITE_SETTINGS),
|
/* harmony export */ TS: () => (/* binding */ INPUT_OVERWRITE_SETTINGS),
|
||||||
/* harmony export */ TY: () => (/* binding */ INPUT_GPG_PASSPHRASE_DEPRECATED),
|
/* harmony export */ TY: () => (/* binding */ INPUT_GPG_PASSPHRASE_DEPRECATED),
|
||||||
/* harmony export */ Vt: () => (/* binding */ INPUT_SERVER_PASSWORD_DEPRECATED),
|
/* harmony export */ Vt: () => (/* binding */ INPUT_SERVER_PASSWORD_DEPRECATED),
|
||||||
/* harmony export */ W2: () => (/* binding */ INPUT_MVN_REPOSITORIES),
|
|
||||||
/* harmony export */ Wj: () => (/* binding */ INPUT_DEFAULT_SERVER_USERNAME),
|
/* harmony export */ Wj: () => (/* binding */ INPUT_DEFAULT_SERVER_USERNAME),
|
||||||
/* harmony export */ Wt: () => (/* binding */ INPUT_PROBLEM_MATCHER),
|
/* harmony export */ Wt: () => (/* binding */ INPUT_PROBLEM_MATCHER),
|
||||||
/* harmony export */ Xh: () => (/* binding */ INPUT_SETTINGS_PATH),
|
/* harmony export */ Xh: () => (/* binding */ INPUT_SETTINGS_PATH),
|
||||||
@@ -30796,9 +30792,7 @@ module.exports = {
|
|||||||
/* harmony export */ fd: () => (/* binding */ INPUT_SERVER_ID),
|
/* harmony export */ fd: () => (/* binding */ INPUT_SERVER_ID),
|
||||||
/* harmony export */ g_: () => (/* binding */ INPUT_DISTRIBUTION),
|
/* harmony export */ g_: () => (/* binding */ INPUT_DISTRIBUTION),
|
||||||
/* harmony export */ gk: () => (/* binding */ INPUT_CACHE),
|
/* harmony export */ gk: () => (/* binding */ INPUT_CACHE),
|
||||||
/* harmony export */ hq: () => (/* binding */ MAVEN_REPOSITORIES_PROFILE_ID),
|
|
||||||
/* harmony export */ iT: () => (/* binding */ M2_DIR),
|
/* harmony export */ iT: () => (/* binding */ M2_DIR),
|
||||||
/* harmony export */ jv: () => (/* binding */ MAVEN_CENTRAL_REPOSITORY_URL),
|
|
||||||
/* harmony export */ kM: () => (/* binding */ INPUT_JDK_FILE),
|
/* harmony export */ kM: () => (/* binding */ INPUT_JDK_FILE),
|
||||||
/* harmony export */ kN: () => (/* binding */ MAVEN_NO_TRANSFER_PROGRESS_LONG_FLAG),
|
/* harmony export */ kN: () => (/* binding */ MAVEN_NO_TRANSFER_PROGRESS_LONG_FLAG),
|
||||||
/* harmony export */ ko: () => (/* binding */ MAVEN_GPG_PASSPHRASE_DEFAULT_ENV),
|
/* harmony export */ ko: () => (/* binding */ MAVEN_GPG_PASSPHRASE_DEFAULT_ENV),
|
||||||
@@ -30818,7 +30812,6 @@ module.exports = {
|
|||||||
/* harmony export */ wX: () => (/* binding */ INPUT_SHOW_DOWNLOAD_PROGRESS),
|
/* harmony export */ wX: () => (/* binding */ INPUT_SHOW_DOWNLOAD_PROGRESS),
|
||||||
/* harmony export */ wc: () => (/* binding */ INPUT_JDK_FILE_DEPRECATED),
|
/* harmony export */ wc: () => (/* binding */ INPUT_JDK_FILE_DEPRECATED),
|
||||||
/* harmony export */ wz: () => (/* binding */ INPUT_GPG_PRIVATE_KEY),
|
/* harmony export */ wz: () => (/* binding */ INPUT_GPG_PRIVATE_KEY),
|
||||||
/* harmony export */ xg: () => (/* binding */ MAVEN_CENTRAL_REPOSITORY_ID),
|
|
||||||
/* harmony export */ xp: () => (/* binding */ INPUT_DEFAULT_SERVER_PASSWORD)
|
/* harmony export */ xp: () => (/* binding */ INPUT_DEFAULT_SERVER_PASSWORD)
|
||||||
/* harmony export */ });
|
/* harmony export */ });
|
||||||
/* unused harmony exports INPUT_CACHE_READ_ONLY, INPUT_JOB_STATUS */
|
/* unused harmony exports INPUT_CACHE_READ_ONLY, INPUT_JOB_STATUS */
|
||||||
@@ -30836,10 +30829,6 @@ const INPUT_SET_DEFAULT = 'set-default';
|
|||||||
const INPUT_PROBLEM_MATCHER = 'problem-matcher';
|
const INPUT_PROBLEM_MATCHER = 'problem-matcher';
|
||||||
const INPUT_VERIFY_SIGNATURE = 'verify-signature';
|
const INPUT_VERIFY_SIGNATURE = 'verify-signature';
|
||||||
const INPUT_VERIFY_SIGNATURE_PUBLIC_KEY = 'verify-signature-public-key';
|
const INPUT_VERIFY_SIGNATURE_PUBLIC_KEY = 'verify-signature-public-key';
|
||||||
const INPUT_MVN_SERVER_CREDENTIALS = 'mvn-server-credentials';
|
|
||||||
const INPUT_MVN_REPOSITORIES = 'mvn-repositories';
|
|
||||||
const INPUT_MVN_REPOSITORIES_INCLUDE_CENTRAL = 'mvn-repositories-include-central';
|
|
||||||
const INPUT_MVN_REPOSITORIES_PRIORITIZE_CENTRAL = 'mvn-repositories-prioritize-central';
|
|
||||||
const INPUT_SERVER_ID = 'server-id';
|
const INPUT_SERVER_ID = 'server-id';
|
||||||
const INPUT_SERVER_USERNAME_ENV_VAR = 'server-username-env-var';
|
const INPUT_SERVER_USERNAME_ENV_VAR = 'server-username-env-var';
|
||||||
const INPUT_SERVER_PASSWORD_ENV_VAR = 'server-password-env-var';
|
const INPUT_SERVER_PASSWORD_ENV_VAR = 'server-password-env-var';
|
||||||
@@ -30860,9 +30849,6 @@ const INPUT_DEFAULT_GPG_PASSPHRASE = 'GPG_PASSPHRASE';
|
|||||||
const MAVEN_GPG_PASSPHRASE_DEFAULT_ENV = 'MAVEN_GPG_PASSPHRASE';
|
const MAVEN_GPG_PASSPHRASE_DEFAULT_ENV = 'MAVEN_GPG_PASSPHRASE';
|
||||||
// Id of the settings.xml profile used to set `gpg.passphraseEnvName`.
|
// Id of the settings.xml profile used to set `gpg.passphraseEnvName`.
|
||||||
const GPG_PASSPHRASE_PROFILE_ID = 'setup-java-gpg';
|
const GPG_PASSPHRASE_PROFILE_ID = 'setup-java-gpg';
|
||||||
const MAVEN_REPOSITORIES_PROFILE_ID = 'setup-java-repositories';
|
|
||||||
const MAVEN_CENTRAL_REPOSITORY_ID = 'central';
|
|
||||||
const MAVEN_CENTRAL_REPOSITORY_URL = 'https://repo.maven.apache.org/maven2';
|
|
||||||
const INPUT_CACHE = 'cache';
|
const INPUT_CACHE = 'cache';
|
||||||
const INPUT_CACHE_JDK = 'cache-jdk';
|
const INPUT_CACHE_JDK = 'cache-jdk';
|
||||||
const INPUT_CACHE_DEPENDENCY_PATH = 'cache-dependency-path';
|
const INPUT_CACHE_DEPENDENCY_PATH = 'cache-dependency-path';
|
||||||
@@ -30915,7 +30901,6 @@ var JavaDistribution;
|
|||||||
JavaDistribution["JetBrains"] = "jetbrains";
|
JavaDistribution["JetBrains"] = "jetbrains";
|
||||||
JavaDistribution["Kona"] = "kona";
|
JavaDistribution["Kona"] = "kona";
|
||||||
JavaDistribution["OracleOpenJdk"] = "oracle-openjdk";
|
JavaDistribution["OracleOpenJdk"] = "oracle-openjdk";
|
||||||
JavaDistribution["RedHat"] = "redhat";
|
|
||||||
})(JavaDistribution || (JavaDistribution = {}));
|
})(JavaDistribution || (JavaDistribution = {}));
|
||||||
const JAVA_PACKAGE_CAPABILITIES = {
|
const JAVA_PACKAGE_CAPABILITIES = {
|
||||||
[JavaDistribution.Temurin]: ['jdk', 'jre', 'jdk+jmods'],
|
[JavaDistribution.Temurin]: ['jdk', 'jre', 'jdk+jmods'],
|
||||||
@@ -30947,8 +30932,7 @@ const JAVA_PACKAGE_CAPABILITIES = {
|
|||||||
'jre+ft'
|
'jre+ft'
|
||||||
],
|
],
|
||||||
[JavaDistribution.Kona]: ['jdk'],
|
[JavaDistribution.Kona]: ['jdk'],
|
||||||
[JavaDistribution.OracleOpenJdk]: ['jdk'],
|
[JavaDistribution.OracleOpenJdk]: ['jdk']
|
||||||
[JavaDistribution.RedHat]: ['jdk', 'jre']
|
|
||||||
};
|
};
|
||||||
function validateJavaPackage(distributionName, packageType, version) {
|
function validateJavaPackage(distributionName, packageType, version) {
|
||||||
if (!isJavaDistribution(distributionName)) {
|
if (!isJavaDistribution(distributionName)) {
|
||||||
@@ -31133,19 +31117,6 @@ const JAVA_PLATFORM_CAPABILITIES = {
|
|||||||
macos: X64_ARM64,
|
macos: X64_ARM64,
|
||||||
windows: ['x64']
|
windows: ['x64']
|
||||||
}
|
}
|
||||||
},
|
|
||||||
[_package_types_js__WEBPACK_IMPORTED_MODULE_2__/* .JavaDistribution */ .zS.RedHat]: {
|
|
||||||
platforms: {
|
|
||||||
linux: [
|
|
||||||
'x64',
|
|
||||||
{ architecture: 'aarch64', versionRange: '<12' },
|
|
||||||
{ architecture: 'ppc64le', versionRange: '<12' }
|
|
||||||
],
|
|
||||||
windows: [
|
|
||||||
{ architecture: 'x64', versionRange: '<22' },
|
|
||||||
{ architecture: 'x86', versionRange: '<11' }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
const ARCHITECTURE_ALIASES = {
|
const ARCHITECTURE_ALIASES = {
|
||||||
@@ -31361,8 +31332,6 @@ async function extractJdkFile(toolPath, extension) {
|
|||||||
if (!extension) {
|
if (!extension) {
|
||||||
extension = toolPath.endsWith('.tar.gz')
|
extension = toolPath.endsWith('.tar.gz')
|
||||||
? 'tar.gz'
|
? 'tar.gz'
|
||||||
: toolPath.endsWith('.tar.xz')
|
|
||||||
? 'tar.xz'
|
|
||||||
: path__WEBPACK_IMPORTED_MODULE_1___default().extname(toolPath);
|
: path__WEBPACK_IMPORTED_MODULE_1___default().extname(toolPath);
|
||||||
if (extension.startsWith('.')) {
|
if (extension.startsWith('.')) {
|
||||||
extension = extension.substring(1);
|
extension = extension.substring(1);
|
||||||
@@ -31371,8 +31340,6 @@ async function extractJdkFile(toolPath, extension) {
|
|||||||
switch (extension) {
|
switch (extension) {
|
||||||
case 'tar.gz':
|
case 'tar.gz':
|
||||||
return await extractTarGz(toolPath);
|
return await extractTarGz(toolPath);
|
||||||
case 'tar.xz':
|
|
||||||
return await _actions_tool_cache__WEBPACK_IMPORTED_MODULE_5__/* .extractTar */ .nN(toolPath, undefined, 'xJ');
|
|
||||||
case 'tar':
|
case 'tar':
|
||||||
return await _actions_tool_cache__WEBPACK_IMPORTED_MODULE_5__/* .extractTar */ .nN(toolPath);
|
return await _actions_tool_cache__WEBPACK_IMPORTED_MODULE_5__/* .extractTar */ .nN(toolPath);
|
||||||
case 'zip':
|
case 'zip':
|
||||||
@@ -36328,10 +36295,6 @@ async function getJavaDistribution(distributionName, installerOptions, jdkFile)
|
|||||||
const { OpenJdkDistribution } = await Promise.all(/* import() */[__nccwpck_require__.e(242), __nccwpck_require__.e(735)]).then(__nccwpck_require__.bind(__nccwpck_require__, 3735));
|
const { OpenJdkDistribution } = await Promise.all(/* import() */[__nccwpck_require__.e(242), __nccwpck_require__.e(735)]).then(__nccwpck_require__.bind(__nccwpck_require__, 3735));
|
||||||
return new OpenJdkDistribution(normalizedInstallerOptions);
|
return new OpenJdkDistribution(normalizedInstallerOptions);
|
||||||
}
|
}
|
||||||
case package_types/* JavaDistribution */.zS.RedHat: {
|
|
||||||
const { RedHatDistribution } = await Promise.all(/* import() */[__nccwpck_require__.e(242), __nccwpck_require__.e(228)]).then(__nccwpck_require__.bind(__nccwpck_require__, 8228));
|
|
||||||
return new RedHatDistribution(normalizedInstallerOptions);
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,6 @@
|
|||||||
- [Testing against different Java distributions](#Testing-against-different-Java-distributions)
|
- [Testing against different Java distributions](#Testing-against-different-Java-distributions)
|
||||||
- [Testing against different platforms](#Testing-against-different-platforms)
|
- [Testing against different platforms](#Testing-against-different-platforms)
|
||||||
- [Publishing using Apache Maven](#Publishing-using-Apache-Maven)
|
- [Publishing using Apache Maven](#Publishing-using-Apache-Maven)
|
||||||
- [Publishing to multiple Maven servers](#publishing-to-multiple-maven-servers)
|
|
||||||
- [Apache Maven with a settings path](#apache-maven-with-a-settings-path)
|
- [Apache Maven with a settings path](#apache-maven-with-a-settings-path)
|
||||||
- [Maven transfer progress (download logs)](#Maven-transfer-progress-download-logs)
|
- [Maven transfer progress (download logs)](#Maven-transfer-progress-download-logs)
|
||||||
- [Java problem matcher (compiler annotations)](#java-problem-matcher-compiler-annotations)
|
- [Java problem matcher (compiler annotations)](#java-problem-matcher-compiler-annotations)
|
||||||
@@ -77,19 +76,6 @@ steps:
|
|||||||
- run: java --version
|
- run: java --version
|
||||||
```
|
```
|
||||||
|
|
||||||
### Red Hat Build of OpenJDK
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v7
|
|
||||||
- uses: actions/setup-java@v6
|
|
||||||
with:
|
|
||||||
distribution: 'redhat'
|
|
||||||
java-version: '21'
|
|
||||||
java-package: jdk # optional (jdk or jre) - defaults to jdk
|
|
||||||
- run: java --version
|
|
||||||
```
|
|
||||||
|
|
||||||
### Liberica
|
### Liberica
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
@@ -342,7 +328,6 @@ The package types have these meanings:
|
|||||||
| `corretto` | `jdk`, `jre` | Accepts major versions only. JDK availability follows Amazon's platform catalog. For the operating systems directly selected by `setup-java`, JRE downloads are limited to Java 8 on Windows; Linux and macOS use `jdk`. |
|
| `corretto` | `jdk`, `jre` | Accepts major versions only. JDK availability follows Amazon's platform catalog. For the operating systems directly selected by `setup-java`, JRE downloads are limited to Java 8 on Windows; Linux and macOS use `jdk`. |
|
||||||
| `oracle` | `jdk` | Stable Oracle JDK 17 and later only. |
|
| `oracle` | `jdk` | Stable Oracle JDK 17 and later only. |
|
||||||
| `oracle-openjdk` | `jdk` | Installs the GA or early-access JDK builds currently listed or archived on `jdk.java.net`; use a `-ea` version such as `27-ea` for early access. |
|
| `oracle-openjdk` | `jdk` | Installs the GA or early-access JDK builds currently listed or archived on `jdk.java.net`; use a `-ea` version such as `27-ea` for early access. |
|
||||||
| `redhat` | `jdk`, `jre` | Stable builds only. Version availability follows the Foojay Disco catalog for Red Hat Build of OpenJDK and can lag Red Hat's downloads page. |
|
|
||||||
| `dragonwell` | `jdk` | Stable builds only. The current vendor catalog provides Java 8, 11, 17, 21, and 25. |
|
| `dragonwell` | `jdk` | Stable builds only. The current vendor catalog provides Java 8, 11, 17, 21, and 25. |
|
||||||
| `sapmachine` | `jdk`, `jre` | Follows the SapMachine catalog. Both editions are represented from Java 10 onward, but individual versions and platforms can differ. |
|
| `sapmachine` | `jdk`, `jre` | Follows the SapMachine catalog. Both editions are represented from Java 10 onward, but individual versions and platforms can differ. |
|
||||||
| `graalvm` | `jdk` | Stable Oracle GraalVM for JDK 17 and later only. |
|
| `graalvm` | `jdk` | Stable Oracle GraalVM for JDK 17 and later only. |
|
||||||
@@ -658,7 +643,6 @@ absent from a vendor catalog.
|
|||||||
| `corretto` | `x64`, `x86`, `armv7`, `aarch64` | `x64`, `aarch64` | `x64`, `x86` | `x86` is limited to Java 11 or earlier; Linux `armv7` is available for Java 11. |
|
| `corretto` | `x64`, `x86`, `armv7`, `aarch64` | `x64`, `aarch64` | `x64`, `x86` | `x86` is limited to Java 11 or earlier; Linux `armv7` is available for Java 11. |
|
||||||
| `oracle` | `x64`, `aarch64` | `x64`, `aarch64` | `x64` | |
|
| `oracle` | `x64`, `aarch64` | `x64`, `aarch64` | `x64` | |
|
||||||
| `oracle-openjdk` | `x64`, `aarch64` | `x64`, `aarch64` | `x64` | |
|
| `oracle-openjdk` | `x64`, `aarch64` | `x64`, `aarch64` | `x64` | |
|
||||||
| `redhat` | `x64`, `aarch64`, `ppc64le` | — | `x64`, `x86` | Linux requires glibc; Alpine is unsupported. Linux `aarch64` and `ppc64le` are limited to Java 11 or earlier. Windows `x64` is limited to Java 21 or earlier and `x86` to Java 10 or earlier. |
|
|
||||||
| `dragonwell` | `x64`, `aarch64` | — | `x64` | |
|
| `dragonwell` | `x64`, `aarch64` | — | `x64` | |
|
||||||
| `sapmachine` | `x64`, `aarch64`, `ppc64le` | `x64`, `aarch64` | `x64`, `aarch64` | |
|
| `sapmachine` | `x64`, `aarch64`, `ppc64le` | `x64`, `aarch64` | `x64`, `aarch64` | |
|
||||||
| `graalvm`, `graalvm-community` | `x64`, `aarch64` | `x64`, `aarch64` | `x64` | |
|
| `graalvm`, `graalvm-community` | `x64`, `aarch64` | `x64`, `aarch64` | `x64` | |
|
||||||
@@ -879,125 +863,6 @@ The two `settings.xml` files created from the above example look like the follow
|
|||||||
|
|
||||||
If you don't want to overwrite the `settings.xml` file, you can set `overwrite-settings: false`
|
If you don't want to overwrite the `settings.xml` file, you can set `overwrite-settings: false`
|
||||||
|
|
||||||
### Publishing to multiple Maven servers
|
|
||||||
|
|
||||||
Use `mvn-server-credentials` to add more than one credential entry to the generated `settings.xml`. Each line has the format `server-id:USERNAME_ENV:PASSWORD_ENV`. The username and password fields are environment variable names, not credential values.
|
|
||||||
|
|
||||||
When this input is set, it replaces the single server configured by `server-id`, `server-username-env-var`, and `server-password-env-var`.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v7
|
|
||||||
- name: Set up release and snapshot repositories
|
|
||||||
uses: actions/setup-java@v6
|
|
||||||
with:
|
|
||||||
distribution: 'temurin'
|
|
||||||
java-version: '21'
|
|
||||||
mvn-server-credentials: |
|
|
||||||
releases:RELEASES_USERNAME:RELEASES_PASSWORD
|
|
||||||
snapshots:SNAPSHOTS_USERNAME:SNAPSHOTS_PASSWORD
|
|
||||||
- name: Publish with Maven
|
|
||||||
run: mvn deploy
|
|
||||||
env:
|
|
||||||
RELEASES_USERNAME: ${{ secrets.RELEASES_USERNAME }}
|
|
||||||
RELEASES_PASSWORD: ${{ secrets.RELEASES_PASSWORD }}
|
|
||||||
SNAPSHOTS_USERNAME: ${{ secrets.SNAPSHOTS_USERNAME }}
|
|
||||||
SNAPSHOTS_PASSWORD: ${{ secrets.SNAPSHOTS_PASSWORD }}
|
|
||||||
```
|
|
||||||
|
|
||||||
This configuration produces the following server entries:
|
|
||||||
|
|
||||||
```xml
|
|
||||||
<servers>
|
|
||||||
<server>
|
|
||||||
<id>releases</id>
|
|
||||||
<username>${env.RELEASES_USERNAME}</username>
|
|
||||||
<password>${env.RELEASES_PASSWORD}</password>
|
|
||||||
</server>
|
|
||||||
<server>
|
|
||||||
<id>snapshots</id>
|
|
||||||
<username>${env.SNAPSHOTS_USERNAME}</username>
|
|
||||||
<password>${env.SNAPSHOTS_PASSWORD}</password>
|
|
||||||
</server>
|
|
||||||
</servers>
|
|
||||||
```
|
|
||||||
|
|
||||||
### Resolving Maven dependencies from custom repositories
|
|
||||||
|
|
||||||
Use `mvn-repositories` when Maven must download dependencies from repositories
|
|
||||||
outside Maven Central. Each line has the format
|
|
||||||
`repository-id:repository-url:snapshots-enabled`. The parser uses the first and
|
|
||||||
last colons as separators, so repository URLs can contain a scheme or port.
|
|
||||||
|
|
||||||
The repository ID can match a `mvn-server-credentials` server ID to authenticate
|
|
||||||
requests to a private repository:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v7
|
|
||||||
- name: Set up Java and private Maven repositories
|
|
||||||
uses: actions/setup-java@v6
|
|
||||||
with:
|
|
||||||
distribution: 'temurin'
|
|
||||||
java-version: '21'
|
|
||||||
mvn-server-credentials: |
|
|
||||||
private:PRIVATE_REPOSITORY_USERNAME:PRIVATE_REPOSITORY_TOKEN
|
|
||||||
mvn-repositories: |
|
|
||||||
private:https://maven.example.com:8443/releases:false
|
|
||||||
snapshots:https://maven.example.com:8443/snapshots:true
|
|
||||||
mvn-repositories-include-central: true
|
|
||||||
mvn-repositories-prioritize-central: true
|
|
||||||
- run: mvn --batch-mode verify
|
|
||||||
env:
|
|
||||||
PRIVATE_REPOSITORY_USERNAME: ${{ secrets.PRIVATE_REPOSITORY_USERNAME }}
|
|
||||||
PRIVATE_REPOSITORY_TOKEN: ${{ secrets.PRIVATE_REPOSITORY_TOKEN }}
|
|
||||||
```
|
|
||||||
|
|
||||||
This configuration adds the following active profile to `settings.xml`:
|
|
||||||
|
|
||||||
```xml
|
|
||||||
<profiles>
|
|
||||||
<profile>
|
|
||||||
<id>setup-java-repositories</id>
|
|
||||||
<repositories>
|
|
||||||
<repository>
|
|
||||||
<id>central</id>
|
|
||||||
<url>https://repo.maven.apache.org/maven2</url>
|
|
||||||
<snapshots>
|
|
||||||
<enabled>false</enabled>
|
|
||||||
</snapshots>
|
|
||||||
</repository>
|
|
||||||
<repository>
|
|
||||||
<id>private</id>
|
|
||||||
<url>https://maven.example.com:8443/releases</url>
|
|
||||||
<snapshots>
|
|
||||||
<enabled>false</enabled>
|
|
||||||
</snapshots>
|
|
||||||
</repository>
|
|
||||||
<repository>
|
|
||||||
<id>snapshots</id>
|
|
||||||
<url>https://maven.example.com:8443/snapshots</url>
|
|
||||||
<snapshots>
|
|
||||||
<enabled>true</enabled>
|
|
||||||
</snapshots>
|
|
||||||
</repository>
|
|
||||||
</repositories>
|
|
||||||
</profile>
|
|
||||||
</profiles>
|
|
||||||
<activeProfiles>
|
|
||||||
<activeProfile>setup-java-repositories</activeProfile>
|
|
||||||
</activeProfiles>
|
|
||||||
```
|
|
||||||
|
|
||||||
Maven Central is included first by default. Set
|
|
||||||
`mvn-repositories-prioritize-central: false` to place custom repositories
|
|
||||||
first, or set `mvn-repositories-include-central: false` to disable Central. The
|
|
||||||
generated profile overrides the Central repository inherited from Maven's Super
|
|
||||||
POM with releases and snapshots disabled. When automatic Central inclusion is
|
|
||||||
off, the ID `central` may instead be declared explicitly in `mvn-repositories`
|
|
||||||
to replace it with a user-specified repository; otherwise that ID is reserved
|
|
||||||
to prevent duplicate entries.
|
|
||||||
|
|
||||||
### GPG
|
### GPG
|
||||||
|
|
||||||
The example above uses the [Maven GPG Plugin](https://maven.apache.org/plugins/maven-gpg-plugin/)'s Bouncy Castle signer (`-Dgpg.signer=bc`, available since `maven-gpg-plugin` 3.2.0). It is a pure-Java signer that reads the key directly from the `MAVEN_GPG_KEY` environment variable, so it does **not** require the `gpg` executable, importing the key into a GPG keychain, or the `--pinentry-mode loopback` workaround in your `pom.xml`. The key must be an ASCII-armored secret key (transferable secret key format).
|
The example above uses the [Maven GPG Plugin](https://maven.apache.org/plugins/maven-gpg-plugin/)'s Bouncy Castle signer (`-Dgpg.signer=bc`, available since `maven-gpg-plugin` 3.2.0). It is a pure-Java signer that reads the key directly from the `MAVEN_GPG_KEY` environment variable, so it does **not** require the `gpg` executable, importing the key into a GPG keychain, or the `--pinentry-mode loopback` workaround in your `pom.xml`. The key must be an ASCII-armored secret key (transferable secret key format).
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Contributing
|
# Contributors
|
||||||
|
|
||||||
Thank you for contributing!
|
Thank you for contributing!
|
||||||
|
|
||||||
Generated
+67
-67
@@ -23,18 +23,18 @@
|
|||||||
"@eslint/js": "^10.0.1",
|
"@eslint/js": "^10.0.1",
|
||||||
"@jest/globals": "^30.4.1",
|
"@jest/globals": "^30.4.1",
|
||||||
"@types/node": "^26.1.1",
|
"@types/node": "^26.1.1",
|
||||||
"@types/semver": "^7.8.0",
|
"@types/semver": "^7.7.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.67.0",
|
"@typescript-eslint/eslint-plugin": "^8.64.0",
|
||||||
"@typescript-eslint/parser": "^8.65.0",
|
"@typescript-eslint/parser": "^8.65.0",
|
||||||
"@vercel/ncc": "^0.44.0",
|
"@vercel/ncc": "^0.44.0",
|
||||||
"eslint": "^10.7.0",
|
"eslint": "^10.7.0",
|
||||||
"eslint-config-prettier": "^10.1.8",
|
"eslint-config-prettier": "^10.1.8",
|
||||||
"eslint-plugin-jest": "^29.15.4",
|
"eslint-plugin-jest": "^29.15.4",
|
||||||
"eslint-plugin-n": "^18.2.2",
|
"eslint-plugin-n": "^18.2.2",
|
||||||
"globals": "^17.9.0",
|
"globals": "^17.7.0",
|
||||||
"husky": "^9.1.7",
|
"husky": "^9.1.7",
|
||||||
"jest": "^30.4.2",
|
"jest": "^30.4.2",
|
||||||
"lint-staged": "^17.3.0",
|
"lint-staged": "^17.2.0",
|
||||||
"prettier": "^3.9.5",
|
"prettier": "^3.9.5",
|
||||||
"ts-jest": "^29.4.11",
|
"ts-jest": "^29.4.11",
|
||||||
"typescript": "^6.0.3"
|
"typescript": "^6.0.3"
|
||||||
@@ -1736,9 +1736,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/semver": {
|
"node_modules/@types/semver": {
|
||||||
"version": "7.8.0",
|
"version": "7.7.1",
|
||||||
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz",
|
||||||
"integrity": "sha512-1mAINjtQCXXeLkJ9ehXkwOcBpqtLxiVtKhpUf83DdRNdQKV0iXZpaHYqRr7nj+wvxuJzoAmAwXI+sCNMv1CzLQ==",
|
"integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
@@ -1767,17 +1767,17 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/eslint-plugin": {
|
"node_modules/@typescript-eslint/eslint-plugin": {
|
||||||
"version": "8.67.0",
|
"version": "8.65.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.67.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.65.0.tgz",
|
||||||
"integrity": "sha512-Un7Heoyj65NREbKAyIrFxeM143NZpExWmy1Nep4DLeQOeLlTeumPjoNKnBrU5D5moWXbPJgRa5Uwcdu0faVNGQ==",
|
"integrity": "sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/regexpp": "^4.12.2",
|
"@eslint-community/regexpp": "^4.12.2",
|
||||||
"@typescript-eslint/scope-manager": "8.67.0",
|
"@typescript-eslint/scope-manager": "8.65.0",
|
||||||
"@typescript-eslint/type-utils": "8.67.0",
|
"@typescript-eslint/type-utils": "8.65.0",
|
||||||
"@typescript-eslint/utils": "8.67.0",
|
"@typescript-eslint/utils": "8.65.0",
|
||||||
"@typescript-eslint/visitor-keys": "8.67.0",
|
"@typescript-eslint/visitor-keys": "8.65.0",
|
||||||
"ignore": "^7.0.5",
|
"ignore": "^7.0.5",
|
||||||
"natural-compare": "^1.4.0",
|
"natural-compare": "^1.4.0",
|
||||||
"ts-api-utils": "^2.5.0"
|
"ts-api-utils": "^2.5.0"
|
||||||
@@ -1790,22 +1790,22 @@
|
|||||||
"url": "https://opencollective.com/typescript-eslint"
|
"url": "https://opencollective.com/typescript-eslint"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@typescript-eslint/parser": "^8.67.0",
|
"@typescript-eslint/parser": "^8.65.0",
|
||||||
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
|
"eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
|
||||||
"typescript": ">=4.8.4 <6.1.0"
|
"typescript": ">=4.8.4 <6.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/parser": {
|
"node_modules/@typescript-eslint/parser": {
|
||||||
"version": "8.67.0",
|
"version": "8.65.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.67.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.65.0.tgz",
|
||||||
"integrity": "sha512-fUBfTuuEulWqX6V8+O3PtScV01tzYYRUDTAirHFKoRAt7nOzoGiPt0M/bB47wWNy0coOOcgEwAMUtBpykMxl6w==",
|
"integrity": "sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/scope-manager": "8.67.0",
|
"@typescript-eslint/scope-manager": "8.65.0",
|
||||||
"@typescript-eslint/types": "8.67.0",
|
"@typescript-eslint/types": "8.65.0",
|
||||||
"@typescript-eslint/typescript-estree": "8.67.0",
|
"@typescript-eslint/typescript-estree": "8.65.0",
|
||||||
"@typescript-eslint/visitor-keys": "8.67.0",
|
"@typescript-eslint/visitor-keys": "8.65.0",
|
||||||
"debug": "^4.4.3"
|
"debug": "^4.4.3"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -1821,14 +1821,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/project-service": {
|
"node_modules/@typescript-eslint/project-service": {
|
||||||
"version": "8.67.0",
|
"version": "8.65.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.67.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.65.0.tgz",
|
||||||
"integrity": "sha512-cvE8c7ulYeXN9fYuszhCeCsbzyVEXuhrRCybnBre7TUmqb5nRmBfQAwCj0O3WJFDeyAZt4VYv51vMCC9LHSdYw==",
|
"integrity": "sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/tsconfig-utils": "^8.67.0",
|
"@typescript-eslint/tsconfig-utils": "^8.65.0",
|
||||||
"@typescript-eslint/types": "^8.67.0",
|
"@typescript-eslint/types": "^8.65.0",
|
||||||
"debug": "^4.4.3"
|
"debug": "^4.4.3"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -1843,14 +1843,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/scope-manager": {
|
"node_modules/@typescript-eslint/scope-manager": {
|
||||||
"version": "8.67.0",
|
"version": "8.65.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.67.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.65.0.tgz",
|
||||||
"integrity": "sha512-EgvsleTwS4E+WzzSvem8fAUubLwatMNF1B5hHSLQxcvs7q2dtRhGyujHwLJSYlG41niJ7GP24Aha2+0mb1b2kg==",
|
"integrity": "sha512-Esbl8OSYiVxBokYgWPf7VVWg/BE798wXhimnn9ML9Pt5qoDf8bfQlgjlKXR/k98+AcNzlLKYrpCcrcuZ9DZLgg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "8.67.0",
|
"@typescript-eslint/types": "8.65.0",
|
||||||
"@typescript-eslint/visitor-keys": "8.67.0"
|
"@typescript-eslint/visitor-keys": "8.65.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
@@ -1861,9 +1861,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/tsconfig-utils": {
|
"node_modules/@typescript-eslint/tsconfig-utils": {
|
||||||
"version": "8.67.0",
|
"version": "8.65.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.67.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.65.0.tgz",
|
||||||
"integrity": "sha512-vV+LUSv5njUWsknE71fqKTlXUva+R76SaeORd6Zojcunk/6DvKFXONU3BrAs2H49mbygUXt6gbYunzwqNwlhdg==",
|
"integrity": "sha512-j6GzGqCiRdA7Qhur2VVmKZAkBLfnHFQfx4TaJGL9RMveZqCo48jSHHO0DTgizEnGhtWnqmbtCUSrqSkdiY/0Hg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -1878,15 +1878,15 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/type-utils": {
|
"node_modules/@typescript-eslint/type-utils": {
|
||||||
"version": "8.67.0",
|
"version": "8.65.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.67.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.65.0.tgz",
|
||||||
"integrity": "sha512-aVWDXbRmdXO9siTfX4ditQI1T9+zVcNazT48EJCD0v40/9RIFoUgZ05CmGEq9H2gixRpjUn/iplwvlcvutJW/Q==",
|
"integrity": "sha512-YjaZ7PRI5qY7ax2L3PbvX0rRyGtipAReCWs0mhhDBHjH/vl0g0BonaGXrKdKpMbIIsMIwDgbk/xzkBTyAltS5g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "8.67.0",
|
"@typescript-eslint/types": "8.65.0",
|
||||||
"@typescript-eslint/typescript-estree": "8.67.0",
|
"@typescript-eslint/typescript-estree": "8.65.0",
|
||||||
"@typescript-eslint/utils": "8.67.0",
|
"@typescript-eslint/utils": "8.65.0",
|
||||||
"debug": "^4.4.3",
|
"debug": "^4.4.3",
|
||||||
"ts-api-utils": "^2.5.0"
|
"ts-api-utils": "^2.5.0"
|
||||||
},
|
},
|
||||||
@@ -1903,9 +1903,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/types": {
|
"node_modules/@typescript-eslint/types": {
|
||||||
"version": "8.67.0",
|
"version": "8.65.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.67.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.65.0.tgz",
|
||||||
"integrity": "sha512-sBtgslww8nsMYUjhdPBiSyUqSzT8uR6g93A2QXnQC8+cGdjz0CyaOdqHDRJb1AtORbZCNUJBBeFA/tNR2uQmww==",
|
"integrity": "sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -1917,16 +1917,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/typescript-estree": {
|
"node_modules/@typescript-eslint/typescript-estree": {
|
||||||
"version": "8.67.0",
|
"version": "8.65.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.67.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.65.0.tgz",
|
||||||
"integrity": "sha512-EKQBCE9yNlRJYm7jdTW5AhDacDUmSwQb0FAJAmK2EKYrNXIsa2vxcSZx6PvJ/dEdI6lS+Y9W+EXckLj0iPFGcw==",
|
"integrity": "sha512-JboAE2swaYt4tb1fHhHTABE2K+OLy09XfcTbhnk4Pw96f9dd2e9iYsJ28gBggHlo5z5x1rkyWvcPoTuNTd4oGg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/project-service": "8.67.0",
|
"@typescript-eslint/project-service": "8.65.0",
|
||||||
"@typescript-eslint/tsconfig-utils": "8.67.0",
|
"@typescript-eslint/tsconfig-utils": "8.65.0",
|
||||||
"@typescript-eslint/types": "8.67.0",
|
"@typescript-eslint/types": "8.65.0",
|
||||||
"@typescript-eslint/visitor-keys": "8.67.0",
|
"@typescript-eslint/visitor-keys": "8.65.0",
|
||||||
"debug": "^4.4.3",
|
"debug": "^4.4.3",
|
||||||
"minimatch": "^10.2.2",
|
"minimatch": "^10.2.2",
|
||||||
"semver": "^7.7.3",
|
"semver": "^7.7.3",
|
||||||
@@ -1945,16 +1945,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/utils": {
|
"node_modules/@typescript-eslint/utils": {
|
||||||
"version": "8.67.0",
|
"version": "8.65.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.67.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.65.0.tgz",
|
||||||
"integrity": "sha512-U9D1FdwEWBwok3hxxSdhclMb0twvt9QnjIQ0VfQ1AiX2epnpSgv2ubVDsayOFyY8K6FX+AQ7E0FKWVG3iKsj1A==",
|
"integrity": "sha512-gXiwIHsYreboxeJucHKPvgwl7dXt50mF8s1/c00cP/WoVTyWKFdtfhRWwZiXYFU5H2O8vVoSLNrexFZjYS/SGA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/eslint-utils": "^4.9.1",
|
"@eslint-community/eslint-utils": "^4.9.1",
|
||||||
"@typescript-eslint/scope-manager": "8.67.0",
|
"@typescript-eslint/scope-manager": "8.65.0",
|
||||||
"@typescript-eslint/types": "8.67.0",
|
"@typescript-eslint/types": "8.65.0",
|
||||||
"@typescript-eslint/typescript-estree": "8.67.0"
|
"@typescript-eslint/typescript-estree": "8.65.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
@@ -1969,13 +1969,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/visitor-keys": {
|
"node_modules/@typescript-eslint/visitor-keys": {
|
||||||
"version": "8.67.0",
|
"version": "8.65.0",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.67.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.65.0.tgz",
|
||||||
"integrity": "sha512-fkv8dHRDqfGtTHuJeebdrQ7cX6Ad4WAS00rgHh9UGvMycF1mjBfsxry1XsLIFhWZ6Judlh6UdzK+TYlbpCXgnA==",
|
"integrity": "sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "8.67.0",
|
"@typescript-eslint/types": "8.65.0",
|
||||||
"eslint-visitor-keys": "^5.0.0"
|
"eslint-visitor-keys": "^5.0.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -3691,9 +3691,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/globals": {
|
"node_modules/globals": {
|
||||||
"version": "17.9.0",
|
"version": "17.8.0",
|
||||||
"resolved": "https://registry.npmjs.org/globals/-/globals-17.9.0.tgz",
|
"resolved": "https://registry.npmjs.org/globals/-/globals-17.8.0.tgz",
|
||||||
"integrity": "sha512-m/MvAW61QVU5VDNF1Vj8axt016h8w7L5TU1e9zlab7XIttAT2YAlCwl75K1fOqvMM9apmD7lbCIRhpfkhmxhCg==",
|
"integrity": "sha512-Zz/LMDZScFmkakeL2cTHzf+PbWKdpU3uclqkZT7TjDG58j5WPt0PpA+n9uPI24fZtlw07q0OtEi84K+umsRzqQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -4714,9 +4714,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/lint-staged": {
|
"node_modules/lint-staged": {
|
||||||
"version": "17.3.0",
|
"version": "17.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-17.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-17.2.0.tgz",
|
||||||
"integrity": "sha512-woZS3vNe3UKqBaLPvbLOtKRY4tLANpWQhom12MGWqC8Mh1lCOO+WgSwmX2amjJAqTY9BkXYW87fCUH5H9Ph6xw==",
|
"integrity": "sha512-FchGnFe4i4B1C/a35SPU9bNGPEHSC1+1iV0plLjzBmKVe9klZrlRfSgK6Cw4VeHyqOXbJUXP0vON61uRftNQ0A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
+4
-4
@@ -56,18 +56,18 @@
|
|||||||
"@eslint/js": "^10.0.1",
|
"@eslint/js": "^10.0.1",
|
||||||
"@jest/globals": "^30.4.1",
|
"@jest/globals": "^30.4.1",
|
||||||
"@types/node": "^26.1.1",
|
"@types/node": "^26.1.1",
|
||||||
"@types/semver": "^7.8.0",
|
"@types/semver": "^7.7.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.67.0",
|
"@typescript-eslint/eslint-plugin": "^8.64.0",
|
||||||
"@typescript-eslint/parser": "^8.65.0",
|
"@typescript-eslint/parser": "^8.65.0",
|
||||||
"@vercel/ncc": "^0.44.0",
|
"@vercel/ncc": "^0.44.0",
|
||||||
"eslint": "^10.7.0",
|
"eslint": "^10.7.0",
|
||||||
"eslint-config-prettier": "^10.1.8",
|
"eslint-config-prettier": "^10.1.8",
|
||||||
"eslint-plugin-jest": "^29.15.4",
|
"eslint-plugin-jest": "^29.15.4",
|
||||||
"eslint-plugin-n": "^18.2.2",
|
"eslint-plugin-n": "^18.2.2",
|
||||||
"globals": "^17.9.0",
|
"globals": "^17.7.0",
|
||||||
"husky": "^9.1.7",
|
"husky": "^9.1.7",
|
||||||
"jest": "^30.4.2",
|
"jest": "^30.4.2",
|
||||||
"lint-staged": "^17.3.0",
|
"lint-staged": "^17.2.0",
|
||||||
"prettier": "^3.9.5",
|
"prettier": "^3.9.5",
|
||||||
"ts-jest": "^29.4.11",
|
"ts-jest": "^29.4.11",
|
||||||
"typescript": "^6.0.3"
|
"typescript": "^6.0.3"
|
||||||
|
|||||||
+37
-254
@@ -9,28 +9,18 @@ import * as gpg from './gpg.js';
|
|||||||
import {getBooleanInput} from './util.js';
|
import {getBooleanInput} from './util.js';
|
||||||
import {escapeXmlText} from './xml.js';
|
import {escapeXmlText} from './xml.js';
|
||||||
|
|
||||||
export interface MavenServerCredentials {
|
|
||||||
id: string;
|
|
||||||
usernameEnvVar: string;
|
|
||||||
passwordEnvVar: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface MavenRepository {
|
|
||||||
id: string;
|
|
||||||
url: string;
|
|
||||||
snapshotsEnabled: boolean;
|
|
||||||
releasesEnabled?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface MavenRepositorySettings {
|
|
||||||
repositories: MavenRepository[];
|
|
||||||
includeCentral: boolean;
|
|
||||||
prioritizeCentral: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function configureAuthentication() {
|
export async function configureAuthentication() {
|
||||||
const servers = getMavenServerSettings();
|
const id = core.getInput(constants.INPUT_SERVER_ID);
|
||||||
const repositorySettings = getMavenRepositorySettings();
|
const usernameEnvVar = getInputWithDeprecatedAlias(
|
||||||
|
constants.INPUT_SERVER_USERNAME_ENV_VAR,
|
||||||
|
constants.INPUT_SERVER_USERNAME_DEPRECATED,
|
||||||
|
constants.INPUT_DEFAULT_SERVER_USERNAME
|
||||||
|
);
|
||||||
|
const passwordEnvVar = getInputWithDeprecatedAlias(
|
||||||
|
constants.INPUT_SERVER_PASSWORD_ENV_VAR,
|
||||||
|
constants.INPUT_SERVER_PASSWORD_DEPRECATED,
|
||||||
|
constants.INPUT_DEFAULT_SERVER_PASSWORD
|
||||||
|
);
|
||||||
const settingsDirectory =
|
const settingsDirectory =
|
||||||
core.getInput(constants.INPUT_SETTINGS_PATH) ||
|
core.getInput(constants.INPUT_SETTINGS_PATH) ||
|
||||||
path.join(os.homedir(), constants.M2_DIR);
|
path.join(os.homedir(), constants.M2_DIR);
|
||||||
@@ -52,11 +42,12 @@ export async function configureAuthentication() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
await createAuthenticationSettings(
|
await createAuthenticationSettings(
|
||||||
servers,
|
id,
|
||||||
|
usernameEnvVar,
|
||||||
|
passwordEnvVar,
|
||||||
settingsDirectory,
|
settingsDirectory,
|
||||||
overwriteSettings,
|
overwriteSettings,
|
||||||
gpgPassphraseEnvVar,
|
gpgPassphraseEnvVar
|
||||||
repositorySettings
|
|
||||||
);
|
);
|
||||||
|
|
||||||
if (gpgPrivateKey) {
|
if (gpgPrivateKey) {
|
||||||
@@ -89,179 +80,31 @@ export function getInputWithDeprecatedAlias(
|
|||||||
return value || deprecatedValue || defaultValue || '';
|
return value || deprecatedValue || defaultValue || '';
|
||||||
}
|
}
|
||||||
|
|
||||||
// only exported for testing purposes
|
|
||||||
export function getMavenServerSettings(): MavenServerCredentials[] {
|
|
||||||
const entries = core.getMultilineInput(
|
|
||||||
constants.INPUT_MVN_SERVER_CREDENTIALS
|
|
||||||
);
|
|
||||||
|
|
||||||
if (entries.some(entry => entry.trim())) {
|
|
||||||
return parseMavenServerCredentials(entries);
|
|
||||||
}
|
|
||||||
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
id: core.getInput(constants.INPUT_SERVER_ID),
|
|
||||||
usernameEnvVar: getInputWithDeprecatedAlias(
|
|
||||||
constants.INPUT_SERVER_USERNAME_ENV_VAR,
|
|
||||||
constants.INPUT_SERVER_USERNAME_DEPRECATED,
|
|
||||||
constants.INPUT_DEFAULT_SERVER_USERNAME
|
|
||||||
),
|
|
||||||
passwordEnvVar: getInputWithDeprecatedAlias(
|
|
||||||
constants.INPUT_SERVER_PASSWORD_ENV_VAR,
|
|
||||||
constants.INPUT_SERVER_PASSWORD_DEPRECATED,
|
|
||||||
constants.INPUT_DEFAULT_SERVER_PASSWORD
|
|
||||||
)
|
|
||||||
}
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
// only exported for testing purposes
|
|
||||||
export function parseMavenServerCredentials(
|
|
||||||
entries: string[]
|
|
||||||
): MavenServerCredentials[] {
|
|
||||||
const servers: MavenServerCredentials[] = [];
|
|
||||||
const serverIds = new Set<string>();
|
|
||||||
|
|
||||||
entries.forEach((entry, index) => {
|
|
||||||
if (!entry.trim()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const fields = entry.split(':');
|
|
||||||
if (fields.length !== 3) {
|
|
||||||
throw new Error(
|
|
||||||
`Invalid mvn-server-credentials entry at line ${index + 1}. Expected format: server-id:USERNAME_ENV:PASSWORD_ENV`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const [id, usernameEnvVar, passwordEnvVar] = fields.map(field =>
|
|
||||||
field.trim()
|
|
||||||
);
|
|
||||||
if (!id || !usernameEnvVar || !passwordEnvVar) {
|
|
||||||
throw new Error(
|
|
||||||
`Invalid mvn-server-credentials entry at line ${index + 1}. server-id, username environment variable, and password environment variable are required`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (serverIds.has(id)) {
|
|
||||||
throw new Error(
|
|
||||||
`Duplicate server-id '${id}' in mvn-server-credentials input`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
serverIds.add(id);
|
|
||||||
servers.push({id, usernameEnvVar, passwordEnvVar});
|
|
||||||
});
|
|
||||||
|
|
||||||
return servers;
|
|
||||||
}
|
|
||||||
|
|
||||||
// only exported for testing purposes
|
|
||||||
export function getMavenRepositorySettings():
|
|
||||||
MavenRepositorySettings | undefined {
|
|
||||||
const entries = core.getMultilineInput(constants.INPUT_MVN_REPOSITORIES);
|
|
||||||
if (!entries.some(entry => entry.trim())) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
const includeCentral = getBooleanInput(
|
|
||||||
constants.INPUT_MVN_REPOSITORIES_INCLUDE_CENTRAL,
|
|
||||||
true
|
|
||||||
);
|
|
||||||
return {
|
|
||||||
repositories: parseMavenRepositories(entries, includeCentral),
|
|
||||||
includeCentral,
|
|
||||||
prioritizeCentral: getBooleanInput(
|
|
||||||
constants.INPUT_MVN_REPOSITORIES_PRIORITIZE_CENTRAL,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// only exported for testing purposes
|
|
||||||
export function parseMavenRepositories(
|
|
||||||
entries: string[],
|
|
||||||
includeCentral: boolean
|
|
||||||
): MavenRepository[] {
|
|
||||||
const repositories: MavenRepository[] = [];
|
|
||||||
const repositoryIds = new Set<string>();
|
|
||||||
|
|
||||||
entries.forEach((entry, index) => {
|
|
||||||
if (!entry.trim()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const firstSeparator = entry.indexOf(':');
|
|
||||||
const lastSeparator = entry.lastIndexOf(':');
|
|
||||||
if (firstSeparator <= 0 || lastSeparator <= firstSeparator) {
|
|
||||||
throw new Error(
|
|
||||||
`Invalid mvn-repositories entry at line ${index + 1}. Expected format: repository-id:repository-url:snapshots-enabled`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const id = entry.slice(0, firstSeparator).trim();
|
|
||||||
const url = entry.slice(firstSeparator + 1, lastSeparator).trim();
|
|
||||||
const snapshotsValue = entry
|
|
||||||
.slice(lastSeparator + 1)
|
|
||||||
.trim()
|
|
||||||
.toLowerCase();
|
|
||||||
if (!id || !url || !snapshotsValue) {
|
|
||||||
throw new Error(
|
|
||||||
`Invalid mvn-repositories entry at line ${index + 1}. repository-id, repository URL, and snapshots-enabled are required`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (snapshotsValue !== 'true' && snapshotsValue !== 'false') {
|
|
||||||
throw new Error(
|
|
||||||
`Invalid snapshots-enabled value '${snapshotsValue}' in mvn-repositories entry at line ${index + 1}. Expected true or false`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (repositoryIds.has(id)) {
|
|
||||||
throw new Error(
|
|
||||||
`Duplicate repository-id '${id}' in mvn-repositories input`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (includeCentral && id === constants.MAVEN_CENTRAL_REPOSITORY_ID) {
|
|
||||||
throw new Error(
|
|
||||||
`Repository-id '${constants.MAVEN_CENTRAL_REPOSITORY_ID}' is reserved when ${constants.INPUT_MVN_REPOSITORIES_INCLUDE_CENTRAL} is enabled`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
repositoryIds.add(id);
|
|
||||||
repositories.push({
|
|
||||||
id,
|
|
||||||
url,
|
|
||||||
snapshotsEnabled: snapshotsValue === 'true'
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
return repositories;
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function createAuthenticationSettings(
|
export async function createAuthenticationSettings(
|
||||||
servers: MavenServerCredentials[],
|
id: string,
|
||||||
|
usernameEnvVar: string,
|
||||||
|
passwordEnvVar: string,
|
||||||
settingsDirectory: string,
|
settingsDirectory: string,
|
||||||
overwriteSettings: boolean,
|
overwriteSettings: boolean,
|
||||||
gpgPassphraseEnvVar: string | undefined = undefined,
|
gpgPassphraseEnvVar: string | undefined = undefined
|
||||||
repositorySettings: MavenRepositorySettings | undefined = undefined
|
|
||||||
) {
|
) {
|
||||||
core.info(
|
core.info(`Creating ${constants.MVN_SETTINGS_FILE} with server-id: ${id}`);
|
||||||
`Creating ${constants.MVN_SETTINGS_FILE} with server-id: ${servers.map(server => server.id).join(', ')}`
|
|
||||||
);
|
|
||||||
// when an alternate m2 location is specified use only that location (no .m2 directory)
|
// when an alternate m2 location is specified use only that location (no .m2 directory)
|
||||||
// otherwise use the home/.m2/ path
|
// otherwise use the home/.m2/ path
|
||||||
await io.mkdirP(settingsDirectory);
|
await io.mkdirP(settingsDirectory);
|
||||||
await write(
|
await write(
|
||||||
settingsDirectory,
|
settingsDirectory,
|
||||||
generate(servers, gpgPassphraseEnvVar, repositorySettings),
|
generate(id, usernameEnvVar, passwordEnvVar, gpgPassphraseEnvVar),
|
||||||
overwriteSettings
|
overwriteSettings
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// only exported for testing purposes
|
// only exported for testing purposes
|
||||||
export function generate(
|
export function generate(
|
||||||
servers: MavenServerCredentials[],
|
id: string,
|
||||||
gpgPassphraseEnvVar?: string | undefined,
|
usernameEnvVar: string,
|
||||||
repositorySettings?: MavenRepositorySettings | undefined
|
passwordEnvVar: string,
|
||||||
|
gpgPassphraseEnvVar?: string | undefined
|
||||||
) {
|
) {
|
||||||
// The maven-gpg-plugin reads the passphrase from the environment variable
|
// The maven-gpg-plugin reads the passphrase from the environment variable
|
||||||
// named by the `gpg.passphraseEnvName` property (default MAVEN_GPG_PASSPHRASE).
|
// named by the `gpg.passphraseEnvName` property (default MAVEN_GPG_PASSPHRASE).
|
||||||
@@ -278,90 +121,30 @@ export function generate(
|
|||||||
' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
|
' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
|
||||||
' xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">',
|
' xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">',
|
||||||
' <interactiveMode>false</interactiveMode>',
|
' <interactiveMode>false</interactiveMode>',
|
||||||
' <servers>'
|
' <servers>',
|
||||||
];
|
|
||||||
|
|
||||||
for (const server of servers) {
|
|
||||||
lines.push(
|
|
||||||
' <server>',
|
' <server>',
|
||||||
` <id>${escapeXmlText(server.id)}</id>`,
|
` <id>${escapeXmlText(id)}</id>`,
|
||||||
` <username>${escapeXmlText(`\${env.${server.usernameEnvVar}}`)}</username>`,
|
` <username>${escapeXmlText(`\${env.${usernameEnvVar}}`)}</username>`,
|
||||||
` <password>${escapeXmlText(`\${env.${server.passwordEnvVar}}`)}</password>`,
|
` <password>${escapeXmlText(`\${env.${passwordEnvVar}}`)}</password>`,
|
||||||
' </server>'
|
' </server>',
|
||||||
);
|
' </servers>'
|
||||||
}
|
|
||||||
lines.push(' </servers>');
|
|
||||||
|
|
||||||
if (repositorySettings || includeGpgPassphraseProfile) {
|
|
||||||
lines.push(' <profiles>');
|
|
||||||
if (repositorySettings) {
|
|
||||||
const centralRepository: MavenRepository = {
|
|
||||||
id: constants.MAVEN_CENTRAL_REPOSITORY_ID,
|
|
||||||
url: constants.MAVEN_CENTRAL_REPOSITORY_URL,
|
|
||||||
snapshotsEnabled: false
|
|
||||||
};
|
|
||||||
const customCentralConfigured = repositorySettings.repositories.some(
|
|
||||||
repository => repository.id === constants.MAVEN_CENTRAL_REPOSITORY_ID
|
|
||||||
);
|
|
||||||
const repositories = repositorySettings.includeCentral
|
|
||||||
? repositorySettings.prioritizeCentral
|
|
||||||
? [centralRepository, ...repositorySettings.repositories]
|
|
||||||
: [...repositorySettings.repositories, centralRepository]
|
|
||||||
: customCentralConfigured
|
|
||||||
? repositorySettings.repositories
|
|
||||||
: [
|
|
||||||
...repositorySettings.repositories,
|
|
||||||
{...centralRepository, releasesEnabled: false}
|
|
||||||
];
|
];
|
||||||
|
|
||||||
lines.push(
|
|
||||||
' <profile>',
|
|
||||||
` <id>${constants.MAVEN_REPOSITORIES_PROFILE_ID}</id>`,
|
|
||||||
' <repositories>'
|
|
||||||
);
|
|
||||||
for (const repository of repositories) {
|
|
||||||
lines.push(
|
|
||||||
' <repository>',
|
|
||||||
` <id>${escapeXmlText(repository.id)}</id>`,
|
|
||||||
` <url>${escapeXmlText(repository.url)}</url>`,
|
|
||||||
...(repository.releasesEnabled === undefined
|
|
||||||
? []
|
|
||||||
: [
|
|
||||||
' <releases>',
|
|
||||||
` <enabled>${repository.releasesEnabled}</enabled>`,
|
|
||||||
' </releases>'
|
|
||||||
]),
|
|
||||||
' <snapshots>',
|
|
||||||
` <enabled>${repository.snapshotsEnabled}</enabled>`,
|
|
||||||
' </snapshots>',
|
|
||||||
' </repository>'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
lines.push(' </repositories>', ' </profile>');
|
|
||||||
}
|
|
||||||
if (includeGpgPassphraseProfile) {
|
if (includeGpgPassphraseProfile) {
|
||||||
lines.push(
|
lines.push(
|
||||||
|
' <profiles>',
|
||||||
' <profile>',
|
' <profile>',
|
||||||
` <id>${constants.GPG_PASSPHRASE_PROFILE_ID}</id>`,
|
` <id>${constants.GPG_PASSPHRASE_PROFILE_ID}</id>`,
|
||||||
' <properties>',
|
' <properties>',
|
||||||
` <gpg.passphraseEnvName>${escapeXmlText(gpgPassphraseEnvVar)}</gpg.passphraseEnvName>`,
|
` <gpg.passphraseEnvName>${escapeXmlText(gpgPassphraseEnvVar)}</gpg.passphraseEnvName>`,
|
||||||
' </properties>',
|
' </properties>',
|
||||||
' </profile>'
|
' </profile>',
|
||||||
|
' </profiles>',
|
||||||
|
' <activeProfiles>',
|
||||||
|
` <activeProfile>${constants.GPG_PASSPHRASE_PROFILE_ID}</activeProfile>`,
|
||||||
|
' </activeProfiles>'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
lines.push(' </profiles>', ' <activeProfiles>');
|
|
||||||
if (repositorySettings) {
|
|
||||||
lines.push(
|
|
||||||
` <activeProfile>${constants.MAVEN_REPOSITORIES_PROFILE_ID}</activeProfile>`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (includeGpgPassphraseProfile) {
|
|
||||||
lines.push(
|
|
||||||
` <activeProfile>${constants.GPG_PASSPHRASE_PROFILE_ID}</activeProfile>`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
lines.push(' </activeProfiles>');
|
|
||||||
}
|
|
||||||
|
|
||||||
lines.push('</settings>');
|
lines.push('</settings>');
|
||||||
return lines.join('\n');
|
return lines.join('\n');
|
||||||
|
|||||||
@@ -12,12 +12,6 @@ export const INPUT_SET_DEFAULT = 'set-default';
|
|||||||
export const INPUT_PROBLEM_MATCHER = 'problem-matcher';
|
export const INPUT_PROBLEM_MATCHER = 'problem-matcher';
|
||||||
export const INPUT_VERIFY_SIGNATURE = 'verify-signature';
|
export const INPUT_VERIFY_SIGNATURE = 'verify-signature';
|
||||||
export const INPUT_VERIFY_SIGNATURE_PUBLIC_KEY = 'verify-signature-public-key';
|
export const INPUT_VERIFY_SIGNATURE_PUBLIC_KEY = 'verify-signature-public-key';
|
||||||
export const INPUT_MVN_SERVER_CREDENTIALS = 'mvn-server-credentials';
|
|
||||||
export const INPUT_MVN_REPOSITORIES = 'mvn-repositories';
|
|
||||||
export const INPUT_MVN_REPOSITORIES_INCLUDE_CENTRAL =
|
|
||||||
'mvn-repositories-include-central';
|
|
||||||
export const INPUT_MVN_REPOSITORIES_PRIORITIZE_CENTRAL =
|
|
||||||
'mvn-repositories-prioritize-central';
|
|
||||||
export const INPUT_SERVER_ID = 'server-id';
|
export const INPUT_SERVER_ID = 'server-id';
|
||||||
export const INPUT_SERVER_USERNAME_ENV_VAR = 'server-username-env-var';
|
export const INPUT_SERVER_USERNAME_ENV_VAR = 'server-username-env-var';
|
||||||
export const INPUT_SERVER_PASSWORD_ENV_VAR = 'server-password-env-var';
|
export const INPUT_SERVER_PASSWORD_ENV_VAR = 'server-password-env-var';
|
||||||
@@ -41,10 +35,6 @@ export const MAVEN_GPG_PASSPHRASE_DEFAULT_ENV = 'MAVEN_GPG_PASSPHRASE';
|
|||||||
|
|
||||||
// Id of the settings.xml profile used to set `gpg.passphraseEnvName`.
|
// Id of the settings.xml profile used to set `gpg.passphraseEnvName`.
|
||||||
export const GPG_PASSPHRASE_PROFILE_ID = 'setup-java-gpg';
|
export const GPG_PASSPHRASE_PROFILE_ID = 'setup-java-gpg';
|
||||||
export const MAVEN_REPOSITORIES_PROFILE_ID = 'setup-java-repositories';
|
|
||||||
export const MAVEN_CENTRAL_REPOSITORY_ID = 'central';
|
|
||||||
export const MAVEN_CENTRAL_REPOSITORY_URL =
|
|
||||||
'https://repo.maven.apache.org/maven2';
|
|
||||||
|
|
||||||
export const INPUT_CACHE = 'cache';
|
export const INPUT_CACHE = 'cache';
|
||||||
export const INPUT_CACHE_JDK = 'cache-jdk';
|
export const INPUT_CACHE_JDK = 'cache-jdk';
|
||||||
|
|||||||
@@ -98,10 +98,6 @@ export async function getJavaDistribution(
|
|||||||
const {OpenJdkDistribution} = await import('./openjdk/installer.js');
|
const {OpenJdkDistribution} = await import('./openjdk/installer.js');
|
||||||
return new OpenJdkDistribution(normalizedInstallerOptions);
|
return new OpenJdkDistribution(normalizedInstallerOptions);
|
||||||
}
|
}
|
||||||
case JavaDistribution.RedHat: {
|
|
||||||
const {RedHatDistribution} = await import('./redhat/installer.js');
|
|
||||||
return new RedHatDistribution(normalizedInstallerOptions);
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,8 +17,7 @@ export enum JavaDistribution {
|
|||||||
GraalVMCommunity = 'graalvm-community',
|
GraalVMCommunity = 'graalvm-community',
|
||||||
JetBrains = 'jetbrains',
|
JetBrains = 'jetbrains',
|
||||||
Kona = 'kona',
|
Kona = 'kona',
|
||||||
OracleOpenJdk = 'oracle-openjdk',
|
OracleOpenJdk = 'oracle-openjdk'
|
||||||
RedHat = 'redhat'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const JAVA_PACKAGE_CAPABILITIES = {
|
export const JAVA_PACKAGE_CAPABILITIES = {
|
||||||
@@ -51,8 +50,7 @@ export const JAVA_PACKAGE_CAPABILITIES = {
|
|||||||
'jre+ft'
|
'jre+ft'
|
||||||
],
|
],
|
||||||
[JavaDistribution.Kona]: ['jdk'],
|
[JavaDistribution.Kona]: ['jdk'],
|
||||||
[JavaDistribution.OracleOpenJdk]: ['jdk'],
|
[JavaDistribution.OracleOpenJdk]: ['jdk']
|
||||||
[JavaDistribution.RedHat]: ['jdk', 'jre']
|
|
||||||
} as const satisfies Record<JavaDistribution, readonly string[]>;
|
} as const satisfies Record<JavaDistribution, readonly string[]>;
|
||||||
|
|
||||||
export function validateJavaPackage(
|
export function validateJavaPackage(
|
||||||
|
|||||||
@@ -145,19 +145,6 @@ export const JAVA_PLATFORM_CAPABILITIES: Record<
|
|||||||
macos: X64_ARM64,
|
macos: X64_ARM64,
|
||||||
windows: ['x64']
|
windows: ['x64']
|
||||||
}
|
}
|
||||||
},
|
|
||||||
[JavaDistribution.RedHat]: {
|
|
||||||
platforms: {
|
|
||||||
linux: [
|
|
||||||
'x64',
|
|
||||||
{architecture: 'aarch64', versionRange: '<12'},
|
|
||||||
{architecture: 'ppc64le', versionRange: '<12'}
|
|
||||||
],
|
|
||||||
windows: [
|
|
||||||
{architecture: 'x64', versionRange: '<22'},
|
|
||||||
{architecture: 'x86', versionRange: '<11'}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,180 +0,0 @@
|
|||||||
import * as core from '@actions/core';
|
|
||||||
import fs from 'fs';
|
|
||||||
import path from 'path';
|
|
||||||
import semver from 'semver';
|
|
||||||
import {
|
|
||||||
cacheJdkDir,
|
|
||||||
extractJdkFile,
|
|
||||||
isVersionSatisfies,
|
|
||||||
renameWinArchive
|
|
||||||
} from '../../util.js';
|
|
||||||
import {JavaBase} from '../base-installer.js';
|
|
||||||
import {
|
|
||||||
JavaDownloadRelease,
|
|
||||||
JavaInstallerOptions,
|
|
||||||
JavaInstallerResults
|
|
||||||
} from '../base-models.js';
|
|
||||||
import {
|
|
||||||
IDiscoPackage,
|
|
||||||
IDiscoPackageDetailsResponse,
|
|
||||||
IDiscoPackageListResponse
|
|
||||||
} from './models.js';
|
|
||||||
import {isAlpineLinux} from '../platform-types.js';
|
|
||||||
|
|
||||||
const DISCO_API_URL = 'https://api.foojay.io/disco/v3.0';
|
|
||||||
|
|
||||||
export class RedHatDistribution extends JavaBase {
|
|
||||||
constructor(installerOptions: JavaInstallerOptions) {
|
|
||||||
super('RedHat', installerOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected async findPackageForDownload(
|
|
||||||
range: string
|
|
||||||
): Promise<JavaDownloadRelease> {
|
|
||||||
if (!this.stable) {
|
|
||||||
throw new Error('Early access versions are not supported');
|
|
||||||
}
|
|
||||||
|
|
||||||
const availablePackages = await this.getAvailablePackages();
|
|
||||||
const normalizedPackages = availablePackages
|
|
||||||
.map(item => ({
|
|
||||||
item,
|
|
||||||
version: this.normalizeDiscoVersion(item.java_version)
|
|
||||||
}))
|
|
||||||
.filter(
|
|
||||||
(item): item is {item: IDiscoPackage; version: string} =>
|
|
||||||
item.version !== null
|
|
||||||
)
|
|
||||||
.sort((left, right) => -semver.compareBuild(left.version, right.version));
|
|
||||||
|
|
||||||
const selectedPackage = normalizedPackages.find(item =>
|
|
||||||
isVersionSatisfies(range, item.version)
|
|
||||||
);
|
|
||||||
if (!selectedPackage) {
|
|
||||||
throw this.createVersionNotFoundError(
|
|
||||||
range,
|
|
||||||
normalizedPackages.map(item => item.version),
|
|
||||||
`Operating system: ${this.getOperatingSystem()}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const detailsUrl = `${DISCO_API_URL}/ids/${selectedPackage.item.id}`;
|
|
||||||
const response =
|
|
||||||
await this.http.getJson<IDiscoPackageDetailsResponse>(detailsUrl);
|
|
||||||
const details = response.result?.result?.[0];
|
|
||||||
if (!details?.direct_download_uri) {
|
|
||||||
throw new Error(
|
|
||||||
`Foojay Disco returned no direct Red Hat download URL for package '${selectedPackage.item.id}'.`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
const checksum = details.checksum?.trim();
|
|
||||||
if (details.checksum_type?.toLowerCase() !== 'sha256' || !checksum) {
|
|
||||||
throw new Error(
|
|
||||||
`Foojay Disco returned no SHA-256 checksum for Red Hat package '${selectedPackage.item.id}'.`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
version: selectedPackage.version,
|
|
||||||
url: details.direct_download_uri,
|
|
||||||
checksum: {
|
|
||||||
algorithm: 'sha256',
|
|
||||||
value: checksum,
|
|
||||||
source: detailsUrl
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
protected async downloadTool(
|
|
||||||
javaRelease: JavaDownloadRelease
|
|
||||||
): Promise<JavaInstallerResults> {
|
|
||||||
core.info(
|
|
||||||
`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`
|
|
||||||
);
|
|
||||||
let javaArchivePath = await this.downloadAndVerify(javaRelease);
|
|
||||||
|
|
||||||
core.info('Extracting Java archive...');
|
|
||||||
const archiveType = this.getArchiveType();
|
|
||||||
if (archiveType === 'zip') {
|
|
||||||
javaArchivePath = renameWinArchive(javaArchivePath);
|
|
||||||
}
|
|
||||||
const extractedJavaPath = await extractJdkFile(
|
|
||||||
javaArchivePath,
|
|
||||||
archiveType
|
|
||||||
);
|
|
||||||
const archiveName = fs.readdirSync(extractedJavaPath)[0];
|
|
||||||
if (!archiveName) {
|
|
||||||
throw new Error(
|
|
||||||
`The Red Hat archive for Java ${javaRelease.version} was empty.`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
const archivePath = path.join(extractedJavaPath, archiveName);
|
|
||||||
const javaPath = await cacheJdkDir(
|
|
||||||
archivePath,
|
|
||||||
this.toolcacheFolderName,
|
|
||||||
this.getToolcacheVersionName(javaRelease.version),
|
|
||||||
this.architecture
|
|
||||||
);
|
|
||||||
|
|
||||||
return {version: javaRelease.version, path: javaPath};
|
|
||||||
}
|
|
||||||
|
|
||||||
private async getAvailablePackages(): Promise<IDiscoPackage[]> {
|
|
||||||
const operatingSystem = this.getOperatingSystem();
|
|
||||||
const archiveType = this.getArchiveType();
|
|
||||||
const query = new URLSearchParams({
|
|
||||||
distro: 'redhat',
|
|
||||||
release_status: 'ga',
|
|
||||||
operating_system: operatingSystem,
|
|
||||||
architecture: this.distributionArchitecture(),
|
|
||||||
package_type: this.packageType,
|
|
||||||
archive_type: archiveType,
|
|
||||||
directly_downloadable: 'true'
|
|
||||||
});
|
|
||||||
const url = `${DISCO_API_URL}/packages?${query.toString()}`;
|
|
||||||
const response = await this.http.getJson<IDiscoPackageListResponse>(url);
|
|
||||||
const packages = response.result?.result;
|
|
||||||
if (!Array.isArray(packages)) {
|
|
||||||
throw new Error(
|
|
||||||
`Could not fetch Red Hat package metadata from Foojay Disco: ${url}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return packages.filter(
|
|
||||||
item =>
|
|
||||||
item.distribution === 'redhat' &&
|
|
||||||
item.release_status === 'ga' &&
|
|
||||||
item.operating_system === operatingSystem &&
|
|
||||||
item.architecture === this.distributionArchitecture() &&
|
|
||||||
item.package_type === this.packageType &&
|
|
||||||
item.archive_type === archiveType &&
|
|
||||||
item.directly_downloadable
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private getOperatingSystem(alpine = isAlpineLinux()): string {
|
|
||||||
if (alpine) {
|
|
||||||
throw new Error(
|
|
||||||
"Distribution 'redhat' does not support Alpine Linux because Red Hat portable archives require glibc."
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return process.platform === 'win32' ? 'windows' : 'linux';
|
|
||||||
}
|
|
||||||
|
|
||||||
private getArchiveType(): string {
|
|
||||||
return process.platform === 'win32' ? 'zip' : 'tar.xz';
|
|
||||||
}
|
|
||||||
|
|
||||||
private normalizeDiscoVersion(version: string): string | null {
|
|
||||||
let normalizedVersion = version.trim();
|
|
||||||
if (/^\d+\+\d+$/.test(normalizedVersion)) {
|
|
||||||
normalizedVersion = normalizedVersion.replace('+', '.0.0+');
|
|
||||||
} else if (/^\d+$/.test(normalizedVersion)) {
|
|
||||||
normalizedVersion = `${normalizedVersion}.0.0`;
|
|
||||||
} else if (/^\d+\.\d+$/.test(normalizedVersion)) {
|
|
||||||
normalizedVersion = `${normalizedVersion}.0`;
|
|
||||||
}
|
|
||||||
|
|
||||||
return semver.valid(normalizedVersion) ? normalizedVersion : null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
export interface IDiscoPackage {
|
|
||||||
id: string;
|
|
||||||
archive_type: string;
|
|
||||||
distribution: string;
|
|
||||||
java_version: string;
|
|
||||||
release_status: string;
|
|
||||||
operating_system: string;
|
|
||||||
architecture: string;
|
|
||||||
package_type: string;
|
|
||||||
directly_downloadable: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IDiscoPackageListResponse {
|
|
||||||
result: IDiscoPackage[];
|
|
||||||
message: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IDiscoPackageDetails {
|
|
||||||
filename: string;
|
|
||||||
direct_download_uri: string;
|
|
||||||
checksum: string;
|
|
||||||
checksum_type: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IDiscoPackageDetailsResponse {
|
|
||||||
result: IDiscoPackageDetails[];
|
|
||||||
message: string;
|
|
||||||
}
|
|
||||||
@@ -59,8 +59,6 @@ export async function extractJdkFile(toolPath: string, extension?: string) {
|
|||||||
if (!extension) {
|
if (!extension) {
|
||||||
extension = toolPath.endsWith('.tar.gz')
|
extension = toolPath.endsWith('.tar.gz')
|
||||||
? 'tar.gz'
|
? 'tar.gz'
|
||||||
: toolPath.endsWith('.tar.xz')
|
|
||||||
? 'tar.xz'
|
|
||||||
: path.extname(toolPath);
|
: path.extname(toolPath);
|
||||||
if (extension.startsWith('.')) {
|
if (extension.startsWith('.')) {
|
||||||
extension = extension.substring(1);
|
extension = extension.substring(1);
|
||||||
@@ -70,8 +68,6 @@ export async function extractJdkFile(toolPath: string, extension?: string) {
|
|||||||
switch (extension) {
|
switch (extension) {
|
||||||
case 'tar.gz':
|
case 'tar.gz':
|
||||||
return await extractTarGz(toolPath);
|
return await extractTarGz(toolPath);
|
||||||
case 'tar.xz':
|
|
||||||
return await tc.extractTar(toolPath, undefined, 'xJ');
|
|
||||||
case 'tar':
|
case 'tar':
|
||||||
return await tc.extractTar(toolPath);
|
return await tc.extractTar(toolPath);
|
||||||
case 'zip':
|
case 'zip':
|
||||||
|
|||||||
Reference in New Issue
Block a user