Skip to content

Commit

Permalink
Add proxy support (#250)
Browse files Browse the repository at this point in the history
  • Loading branch information
Romanticoseu committed Nov 4, 2022
1 parent 4a3e3d7 commit 52fa27d
Show file tree
Hide file tree
Showing 7 changed files with 136 additions and 1 deletion.
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,14 @@ steps:
mirrors: '[{"id": "mirrorId", "name": "mirrorName", "mirrorOf": "mirrorOf", "url": "mirrorUrl"}]'
```

## ```settings.xml``` with proxies section
```yml
step:
- uses: s4u/maven-settings-action@v2.7.0
with:
proxies: '[{"id": "proxyId", "active": "isActive", "protocol": "proxyProtocol", "host": "proxyHost", "port": "proxyPort", "nonProxyHosts": "nonProxyHost"}]'
```

## ```settings.xml``` with properties
```yml
steps:
Expand Down
2 changes: 2 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ inputs:
mirrors:
description: 'mirrors definition in json array, eg: [{"id": "id", "name": "name", "mirrorOf": "mirrorOf", "url": "url"}]'
required: false
proxies:
description: 'proxies definition in json array, eg: [{"id": "id", "active": "active", "protocol": "protocol", "host": "hostl", "port": "port", "nonProxyHosts", "nonProxyHosts"}]'
properties:
description: 'json array with properties, eg [{"propertyName1": "propertyValue1"}, {"propertyName2": "propertyValue2"}]'
required: false
Expand Down
10 changes: 9 additions & 1 deletion index.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,14 +68,14 @@ test('run with all feature', () => {
process.env['INPUT_GITHUBSERVER'] = true;

process.env['INPUT_MIRRORS'] = '[{"id": "mirrorId", "name": "mirror Name", "mirrorOf": "mirror Off *", "url": "mirror url"}]';
process.env['INPUT_PROXIES'] = '[{"id": "proxyId", "active": "isActive", "protocol": "proxyProtocol", "host": "proxyHost", "port": "proxyPort", "nonProxyHosts": "nonProxyHost"}]';
process.env['INPUT_PROPERTIES'] = '[{"prop1": "value1"}, {"prop2": "value2"}]'

process.env['INPUT_APACHESNAPSHOTS'] = true;
process.env['INPUT_SONATYPESNAPSHOTS'] = true;
process.env['INPUT_ORACLEREPO'] = true;

cp.spawnSync('node', [ `${indexPath}` ], { env: process.env, stdio: 'inherit' });

const settingsStatus = fs.lstatSync(settingsPath);
expect(settingsStatus.isFile()).toBeTruthy();
expect(settingsStatus.size).toBeGreaterThan(0);
Expand Down Expand Up @@ -242,5 +242,13 @@ test('run with all feature', () => {
<mirrorOf>mirror Off *</mirrorOf>
<url>mirror url</url>
</mirror></mirrors>
<proxies><proxy>
<id>proxyId</id>
<active>isActive</active>
<protocol>proxyProtocol</protocol>
<host>proxyHost</host>
<port>proxyPort</port>
<nonProxyHosts>nonProxyHost</nonProxyHosts>
</proxy></proxies>
</settings>`);
})
31 changes: 31 additions & 0 deletions settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,35 @@ function fillMirrors(template) {
JSON.parse(mirrors).forEach((mirror) => fillMirror(template, mirror.id, mirror.name, mirror.mirrorOf, mirror.url));
}

function fillProxies(template) {

const proxies = core.getInput('proxies');

if (!proxies) {
return;
}

JSON.parse(proxies).forEach((proxy) => fillProxy(template, proxy.id, proxy.active, proxy.protocol, proxy.host, proxy.port, proxy.nonProxyHosts));
}

function fillProxy(template, id, active, protocol, host, port, nonProxyHosts) {
if(!id || !active || !protocol || !host || !port || !nonProxyHosts) {
core.setFailed('proxies must contain id, active, protocol, host, port and nonProxyHosts');
return;
}

const proxyXml = getTemplate('proxy.xml');
proxyXml.getElementsByTagName("id")[0].textContent = id;
proxyXml.getElementsByTagName("active")[0].textContent = active;
proxyXml.getElementsByTagName("protocol")[0].textContent = protocol;
proxyXml.getElementsByTagName("host")[0].textContent = host;
proxyXml.getElementsByTagName("port")[0].textContent = port;
proxyXml.getElementsByTagName("nonProxyHosts")[0].textContent = nonProxyHosts;

const proxiesXml = template.getElementsByTagName('proxies')[0];
proxiesXml.appendChild(proxyXml);
}

function isInputTrue(inputName) {
const val = core.getInput(inputName);
return val && val.toLocaleLowerCase() == 'true';
Expand Down Expand Up @@ -230,6 +259,7 @@ function generate() {
}

const settingsXml = getTemplate('settings.xml');
fillProxies(settingsXml);
fillMirrors(settingsXml);
fillServers(settingsXml, 'servers');
fillServers(settingsXml, 'oracleServers');
Expand Down Expand Up @@ -263,6 +293,7 @@ module.exports = {
writeSettings,
fillMirrors,
fillServers,
fillProxies,
fillServerForGithub,
fillProperties,
addApacheSnapshots,
Expand Down
77 changes: 77 additions & 0 deletions settings.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -436,6 +436,83 @@ test('fillMirrors incorrect fields', () => {
);
});

test("fillProxies do noting if no params", () => {
const xml = stringAsXml("<proxies/>");

settings.fillProxies(xml);

const xmlStr = new XMLSerializer().serializeToString(xml);
expect(xmlStr).toBe("<proxies/>");
expect(consoleOutput).toEqual([]);
})

test("fillProxies one proxy", () => {
const xml = stringAsXml("<proxies/>");

process.env['INPUT_PROXIES'] = `[{"id": "proxyId", "active": "isActive", "protocol": "proxyProtocol",
"host": "proxyHost", "port": "proxyPort", "nonProxyHosts": "nonProxyHost"}]`;

settings.fillProxies(xml);

const xmlStr = new XMLSerializer().serializeToString(xml);
expect(xmlStr).toBe(`<proxies><proxy>
<id>proxyId</id>
<active>isActive</active>
<protocol>proxyProtocol</protocol>
<host>proxyHost</host>
<port>proxyPort</port>
<nonProxyHosts>nonProxyHost</nonProxyHosts>
</proxy></proxies>`)

})

test("fillProxies two proxies", () => {
const xml = stringAsXml("<proxies/>");

process.env['INPUT_PROXIES'] = `[{"id": "proxyId1", "active": "isActive1", "protocol": "proxyProtocol1",
"host": "proxyHost1", "port": "proxyPort1", "nonProxyHosts": "nonProxyHost1"},
{"id": "proxyId2", "active": "isActive2", "protocol": "proxyProtocol2",
"host": "proxyHost2", "port": "proxyPort2", "nonProxyHosts": "nonProxyHost2"}]`;

settings.fillProxies(xml);

const xmlStr = new XMLSerializer().serializeToString(xml);
expect(xmlStr).toBe(`<proxies><proxy>
<id>proxyId1</id>
<active>isActive1</active>
<protocol>proxyProtocol1</protocol>
<host>proxyHost1</host>
<port>proxyPort1</port>
<nonProxyHosts>nonProxyHost1</nonProxyHosts>
</proxy><proxy>
<id>proxyId2</id>
<active>isActive2</active>
<protocol>proxyProtocol2</protocol>
<host>proxyHost2</host>
<port>proxyPort2</port>
<nonProxyHosts>nonProxyHost2</nonProxyHosts>
</proxy></proxies>`)

})

test('fillProxies incorrect fields', () => {

const xml = stringAsXml("<proxies/>");

process.env['INPUT_PROXIES'] = '[{"idx": "id1"}]';

settings.fillProxies(xml);

const xmlStr = new XMLSerializer().serializeToString(xml);

expect(xmlStr).toBe('<proxies/>');
expect(consoleOutput).toEqual(
expect.arrayContaining([
expect.stringMatching(/::error::proxies must contain id, active, protocol, host, port and nonProxyHosts/)
])
);
})

test('addApacheSnapshots', () => {

process.env['INPUT_APACHESNAPSHOTS'] = "true";
Expand Down
8 changes: 8 additions & 0 deletions templates/proxy.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<proxy>
<id />
<active />
<protocol />
<host />
<port />
<nonProxyHosts />
</proxy>
1 change: 1 addition & 0 deletions templates/settings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@
<profiles/>
<servers />
<mirrors />
<proxies />
</settings>

0 comments on commit 52fa27d

Please sign in to comment.