soajs.controller 4.2.42 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +43 -0
- package/.github/workflows/release.yml +94 -0
- package/ARCHITECTURE.md +193 -0
- package/Gruntfile.js +1 -1
- package/docs/configuration-custom-registry.md +421 -0
- package/docs/configuration-services-config.md +275 -0
- package/docs/data-flow.md +138 -0
- package/docs/deployment.md +205 -0
- package/docs/external-integrations.md +159 -0
- package/docs/gateway-routes.md +259 -0
- package/docs/maintenance-routes.md +308 -0
- package/docs/middleware/awareness.md +120 -0
- package/docs/middleware/cors.md +88 -0
- package/docs/middleware/enhancer.md +75 -0
- package/docs/middleware/favicon.md +36 -0
- package/docs/middleware/gotoService.md +146 -0
- package/docs/middleware/ip2ban.md +70 -0
- package/docs/middleware/key.md +196 -0
- package/docs/middleware/keyACL.md +139 -0
- package/docs/middleware/lastSeen.md +111 -0
- package/docs/middleware/maintenanceMode.md +81 -0
- package/docs/middleware/mt.md +568 -0
- package/docs/middleware/oauth.md +173 -0
- package/docs/middleware/response.md +106 -0
- package/docs/middleware/soajs.md +71 -0
- package/docs/middleware/traffic.md +190 -0
- package/docs/middleware/url.md +102 -0
- package/docs/multi-tenant-security.md +183 -0
- package/docs/request-flow.md +230 -0
- package/docs/service-discovery.md +167 -0
- package/mw/key/index.js +16 -1
- package/mw/mt/urac.js +21 -1
- package/mw/mt/utils.js +2 -0
- package/package.json +13 -13
- package/test/unit/mw/key/index.js +150 -0
- package/test/unit/mw/mt/urac.js +157 -4
- package/.travis.yml +0 -72
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "soajs.controller",
|
|
3
3
|
"description": "soajs multi tenant API gateway",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.3.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "soajs team",
|
|
7
7
|
"email": "team@soajs.org"
|
|
@@ -21,24 +21,24 @@
|
|
|
21
21
|
"async": "3.2.6",
|
|
22
22
|
"connect": "3.7.0",
|
|
23
23
|
"http-proxy": "1.18.1",
|
|
24
|
-
"jsonwebtoken": "9.0.
|
|
24
|
+
"jsonwebtoken": "9.0.3",
|
|
25
25
|
"kubernetes-client": "9.0.0",
|
|
26
|
-
"lodash": "4.17.
|
|
26
|
+
"lodash": "4.17.23",
|
|
27
27
|
"merge": "2.1.1",
|
|
28
28
|
"netmask": "2.0.2",
|
|
29
29
|
"oauth2-server": "2.4.1",
|
|
30
30
|
"path-to-regexp": "8.3.0",
|
|
31
|
-
"soajs.core.libs": "1.2.
|
|
32
|
-
"soajs.core.modules": "5.2.
|
|
33
|
-
"soajs.urac.driver": "3.2.
|
|
31
|
+
"soajs.core.libs": "1.2.2",
|
|
32
|
+
"soajs.core.modules": "5.2.18",
|
|
33
|
+
"soajs.urac.driver": "3.2.15",
|
|
34
34
|
"useragent": "2.3.0"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@babel/core": "7.
|
|
38
|
-
"@babel/plugin-transform-runtime": "7.
|
|
39
|
-
"@babel/preset-env": "7.
|
|
40
|
-
"@babel/runtime": "7.28.
|
|
41
|
-
"express": "
|
|
37
|
+
"@babel/core": "7.29.0",
|
|
38
|
+
"@babel/plugin-transform-runtime": "7.29.0",
|
|
39
|
+
"@babel/preset-env": "7.29.0",
|
|
40
|
+
"@babel/runtime": "7.28.6",
|
|
41
|
+
"express": "5.2.1",
|
|
42
42
|
"grunt": "1.6.1",
|
|
43
43
|
"grunt-babel": "8.0.0",
|
|
44
44
|
"grunt-contrib-clean": "2.0.1",
|
|
@@ -50,8 +50,8 @@
|
|
|
50
50
|
"grunt-jsdoc": "2.4.1",
|
|
51
51
|
"grunt-mocha-test": "0.13.3",
|
|
52
52
|
"mocha": "11.7.5",
|
|
53
|
-
"nock": "14.0.
|
|
53
|
+
"nock": "14.0.11",
|
|
54
54
|
"request": "2.88.2",
|
|
55
|
-
"sinon": "21.0.
|
|
55
|
+
"sinon": "21.0.1"
|
|
56
56
|
}
|
|
57
57
|
}
|
|
@@ -134,4 +134,154 @@ describe("Unit test for: mw - key", function () {
|
|
|
134
134
|
done();
|
|
135
135
|
});
|
|
136
136
|
});
|
|
137
|
+
|
|
138
|
+
describe("Network Package Override", function () {
|
|
139
|
+
let networkKeyObj = {
|
|
140
|
+
"key": "a139786a6e6d18e48b4987e83789430b",
|
|
141
|
+
"tenant": {"id": "10d2cb5fc04ce51e06000001", "code": "DBTN", "locked": true},
|
|
142
|
+
"application": {
|
|
143
|
+
"product": "AVAPP",
|
|
144
|
+
"package": "AVAPP_EXMPL",
|
|
145
|
+
"appId": "5c0e74ba9acc3c5a84a5125a",
|
|
146
|
+
"acl": null,
|
|
147
|
+
"acl_all_env": null
|
|
148
|
+
},
|
|
149
|
+
"device": null,
|
|
150
|
+
"env": "dev",
|
|
151
|
+
"geo": null,
|
|
152
|
+
"config": {
|
|
153
|
+
"gateway": {
|
|
154
|
+
"networkPackages": {
|
|
155
|
+
"mw": {
|
|
156
|
+
"AVAPP": {
|
|
157
|
+
"default": "AVAPP_DEFAU",
|
|
158
|
+
"users": {
|
|
159
|
+
"AVAPP_EXMPL": "AVAPP_ALTRN"
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
let networkReq = {
|
|
169
|
+
"get": () => {
|
|
170
|
+
return key;
|
|
171
|
+
},
|
|
172
|
+
"soajs": {
|
|
173
|
+
"controller": {"serviceParams": {}},
|
|
174
|
+
"registry": {
|
|
175
|
+
"serviceConfig": {
|
|
176
|
+
"key": {
|
|
177
|
+
algorithm: "aes256",
|
|
178
|
+
password: "soajs key lal massa"
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
"custom": {
|
|
182
|
+
"gateway": {
|
|
183
|
+
"value": {
|
|
184
|
+
"lastSeen": {
|
|
185
|
+
"network": "mw"
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
"log": {
|
|
192
|
+
"error": (err) => {
|
|
193
|
+
console.log(err);
|
|
194
|
+
},
|
|
195
|
+
"debug": (msg) => {
|
|
196
|
+
console.log(msg);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
it("Call MW with network package override - should replace package with default", function (done) {
|
|
203
|
+
let networkProvision = {
|
|
204
|
+
"getExternalKeyData": (key, keyConfig, cb) => {
|
|
205
|
+
return cb(null, JSON.parse(JSON.stringify(networkKeyObj)));
|
|
206
|
+
},
|
|
207
|
+
"getPackageData": (pack, cb) => {
|
|
208
|
+
// Verify the package was overridden
|
|
209
|
+
if (pack === "AVAPP_DEFAU") {
|
|
210
|
+
return cb(null, {"acl": {}, "_TTL": 604800000});
|
|
211
|
+
}
|
|
212
|
+
return cb(new Error("Expected package AVAPP_DEFAU but got " + pack));
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
let mw_use = mw({"provision": networkProvision, "regEnvironment": "dev"});
|
|
216
|
+
mw_use(networkReq, res, (err) => {
|
|
217
|
+
if (err) {
|
|
218
|
+
done(new Error("Unexpected error: " + err));
|
|
219
|
+
} else {
|
|
220
|
+
done();
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
it("Call MW without network in registry - should NOT replace package", function (done) {
|
|
226
|
+
let reqNoNetwork = JSON.parse(JSON.stringify(networkReq));
|
|
227
|
+
reqNoNetwork.soajs.registry.custom = {};
|
|
228
|
+
reqNoNetwork.get = () => key;
|
|
229
|
+
reqNoNetwork.soajs.log = {
|
|
230
|
+
"error": (err) => { console.log(err); },
|
|
231
|
+
"debug": (msg) => { console.log(msg); }
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
let networkProvision = {
|
|
235
|
+
"getExternalKeyData": (key, keyConfig, cb) => {
|
|
236
|
+
return cb(null, JSON.parse(JSON.stringify(networkKeyObj)));
|
|
237
|
+
},
|
|
238
|
+
"getPackageData": (pack, cb) => {
|
|
239
|
+
// Verify the package was NOT overridden
|
|
240
|
+
if (pack === "AVAPP_EXMPL") {
|
|
241
|
+
return cb(null, {"acl": {}, "_TTL": 604800000});
|
|
242
|
+
}
|
|
243
|
+
return cb(new Error("Expected package AVAPP_EXMPL but got " + pack));
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
let mw_use = mw({"provision": networkProvision, "regEnvironment": "dev"});
|
|
247
|
+
mw_use(reqNoNetwork, res, (err) => {
|
|
248
|
+
if (err) {
|
|
249
|
+
done(new Error("Unexpected error: " + err));
|
|
250
|
+
} else {
|
|
251
|
+
done();
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
it("Call MW with different network - should NOT replace package", function (done) {
|
|
257
|
+
let reqDiffNetwork = JSON.parse(JSON.stringify(networkReq));
|
|
258
|
+
reqDiffNetwork.soajs.registry.custom.gateway.value.lastSeen.network = "other";
|
|
259
|
+
reqDiffNetwork.get = () => key;
|
|
260
|
+
reqDiffNetwork.soajs.log = {
|
|
261
|
+
"error": (err) => { console.log(err); },
|
|
262
|
+
"debug": (msg) => { console.log(msg); }
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
let networkProvision = {
|
|
266
|
+
"getExternalKeyData": (key, keyConfig, cb) => {
|
|
267
|
+
return cb(null, JSON.parse(JSON.stringify(networkKeyObj)));
|
|
268
|
+
},
|
|
269
|
+
"getPackageData": (pack, cb) => {
|
|
270
|
+
// Verify the package was NOT overridden (different network)
|
|
271
|
+
if (pack === "AVAPP_EXMPL") {
|
|
272
|
+
return cb(null, {"acl": {}, "_TTL": 604800000});
|
|
273
|
+
}
|
|
274
|
+
return cb(new Error("Expected package AVAPP_EXMPL but got " + pack));
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
let mw_use = mw({"provision": networkProvision, "regEnvironment": "dev"});
|
|
278
|
+
mw_use(reqDiffNetwork, res, (err) => {
|
|
279
|
+
if (err) {
|
|
280
|
+
done(new Error("Unexpected error: " + err));
|
|
281
|
+
} else {
|
|
282
|
+
done();
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
});
|
|
137
287
|
});
|
package/test/unit/mw/mt/urac.js
CHANGED
|
@@ -78,17 +78,17 @@ describe("Unit test for: mw - mt URAC", () => {
|
|
|
78
78
|
oauth.bearerToken = require('../../../data/sample/bearerToken.json');
|
|
79
79
|
soajs.tenant.application.product = "DSBRD";
|
|
80
80
|
let uracDriver = new UracDriver({"soajs": soajs, "oauth": oauth});
|
|
81
|
-
|
|
81
|
+
|
|
82
82
|
let provisionStub;
|
|
83
|
-
|
|
83
|
+
|
|
84
84
|
before((done) => {
|
|
85
85
|
const coreModules = require("soajs.core.modules");
|
|
86
86
|
let provision = coreModules.provision;
|
|
87
|
-
|
|
87
|
+
|
|
88
88
|
provisionStub = sinon.stub(provision, 'getPackagesData').callsFake((code, cb) => {
|
|
89
89
|
return cb(null, []);
|
|
90
90
|
});
|
|
91
|
-
|
|
91
|
+
|
|
92
92
|
done();
|
|
93
93
|
});
|
|
94
94
|
after((done) => {
|
|
@@ -154,4 +154,157 @@ describe("Unit test for: mw - mt URAC", () => {
|
|
|
154
154
|
done();
|
|
155
155
|
});
|
|
156
156
|
});
|
|
157
|
+
|
|
158
|
+
describe("Network Package Override test for: mw - mt URAC", () => {
|
|
159
|
+
let networkSoajs = {
|
|
160
|
+
tenant: {
|
|
161
|
+
application: {
|
|
162
|
+
product: "AVAPP"
|
|
163
|
+
},
|
|
164
|
+
key: {
|
|
165
|
+
iKey: "1111"
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
registry: {
|
|
169
|
+
custom: {
|
|
170
|
+
gateway: {
|
|
171
|
+
value: {
|
|
172
|
+
lastSeen: {
|
|
173
|
+
network: "mw"
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
controller: {
|
|
180
|
+
serviceParams: {
|
|
181
|
+
keyObj: {
|
|
182
|
+
config: {
|
|
183
|
+
gateway: {
|
|
184
|
+
networkPackages: {
|
|
185
|
+
"mw": {
|
|
186
|
+
"AVAPP": {
|
|
187
|
+
"default": "AVAPP_DEFAU",
|
|
188
|
+
"users": {
|
|
189
|
+
"AVAPP_EXMPL": "AVAPP_ALTRN"
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
log: {
|
|
200
|
+
debug: (msg) => {
|
|
201
|
+
console.log(msg);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
let networkOauth = {
|
|
207
|
+
type: 2,
|
|
208
|
+
bearerToken: {
|
|
209
|
+
user: {
|
|
210
|
+
"_id": "user123",
|
|
211
|
+
"username": "testuser",
|
|
212
|
+
"firstName": "Test",
|
|
213
|
+
"lastName": "User",
|
|
214
|
+
"email": "test@example.com",
|
|
215
|
+
"groups": ["testgroup"],
|
|
216
|
+
"config": {},
|
|
217
|
+
"tenant": {"id": "tenant123", "code": "TEST"},
|
|
218
|
+
"groupsConfig": {
|
|
219
|
+
"allowedPackages": {
|
|
220
|
+
"AVAPP": ["AVAPP_EXMPL"]
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
"loginMode": "oauth",
|
|
224
|
+
"id": "user123"
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
let provisionStub;
|
|
230
|
+
let receivedPackages = null;
|
|
231
|
+
|
|
232
|
+
before((done) => {
|
|
233
|
+
const coreModules = require("soajs.core.modules");
|
|
234
|
+
let provision = coreModules.provision;
|
|
235
|
+
|
|
236
|
+
provisionStub = sinon.stub(provision, 'getPackagesData').callsFake((packages, cb) => {
|
|
237
|
+
receivedPackages = packages;
|
|
238
|
+
return cb(null, []);
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
done();
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
after((done) => {
|
|
245
|
+
if (provisionStub) {
|
|
246
|
+
provisionStub.restore();
|
|
247
|
+
}
|
|
248
|
+
done();
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
it("test resolveACL with user network package override - should replace package", (done) => {
|
|
252
|
+
receivedPackages = null;
|
|
253
|
+
let uracDriver = new UracDriver({"soajs": networkSoajs, "oauth": networkOauth});
|
|
254
|
+
|
|
255
|
+
uracDriver.init((error, uracProfile) => {
|
|
256
|
+
// Verify getPackagesData was called with the overridden package
|
|
257
|
+
assert.ok(receivedPackages, "getPackagesData should have been called");
|
|
258
|
+
assert.deepStrictEqual(receivedPackages, ["AVAPP_ALTRN"], "Package should be overridden from AVAPP_EXMPL to AVAPP_ALTRN");
|
|
259
|
+
done();
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
it("test resolveACL without network - should NOT replace package", (done) => {
|
|
264
|
+
receivedPackages = null;
|
|
265
|
+
let soajsNoNetwork = JSON.parse(JSON.stringify(networkSoajs));
|
|
266
|
+
soajsNoNetwork.registry.custom = {};
|
|
267
|
+
soajsNoNetwork.log = {debug: (msg) => console.log(msg)};
|
|
268
|
+
|
|
269
|
+
let uracDriver = new UracDriver({"soajs": soajsNoNetwork, "oauth": networkOauth});
|
|
270
|
+
|
|
271
|
+
uracDriver.init((error, uracProfile) => {
|
|
272
|
+
// Verify getPackagesData was called with the original package
|
|
273
|
+
assert.ok(receivedPackages, "getPackagesData should have been called");
|
|
274
|
+
assert.deepStrictEqual(receivedPackages, ["AVAPP_EXMPL"], "Package should NOT be overridden");
|
|
275
|
+
done();
|
|
276
|
+
});
|
|
277
|
+
});
|
|
278
|
+
|
|
279
|
+
it("test resolveACL with different network - should NOT replace package", (done) => {
|
|
280
|
+
receivedPackages = null;
|
|
281
|
+
let soajsDiffNetwork = JSON.parse(JSON.stringify(networkSoajs));
|
|
282
|
+
soajsDiffNetwork.registry.custom.gateway.value.lastSeen.network = "other";
|
|
283
|
+
soajsDiffNetwork.log = {debug: (msg) => console.log(msg)};
|
|
284
|
+
|
|
285
|
+
let uracDriver = new UracDriver({"soajs": soajsDiffNetwork, "oauth": networkOauth});
|
|
286
|
+
|
|
287
|
+
uracDriver.init((error, uracProfile) => {
|
|
288
|
+
// Verify getPackagesData was called with the original package (different network)
|
|
289
|
+
assert.ok(receivedPackages, "getPackagesData should have been called");
|
|
290
|
+
assert.deepStrictEqual(receivedPackages, ["AVAPP_EXMPL"], "Package should NOT be overridden for different network");
|
|
291
|
+
done();
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
it("test resolveACL with no user mapping for package - should NOT replace package", (done) => {
|
|
296
|
+
receivedPackages = null;
|
|
297
|
+
let oauthDiffPackage = JSON.parse(JSON.stringify(networkOauth));
|
|
298
|
+
oauthDiffPackage.bearerToken.user.groupsConfig.allowedPackages.AVAPP = ["AVAPP_OTHER"];
|
|
299
|
+
|
|
300
|
+
let uracDriver = new UracDriver({"soajs": networkSoajs, "oauth": oauthDiffPackage});
|
|
301
|
+
|
|
302
|
+
uracDriver.init((error, uracProfile) => {
|
|
303
|
+
// Verify getPackagesData was called with original package (no mapping exists)
|
|
304
|
+
assert.ok(receivedPackages, "getPackagesData should have been called");
|
|
305
|
+
assert.deepStrictEqual(receivedPackages, ["AVAPP_OTHER"], "Package should NOT be overridden when no mapping exists");
|
|
306
|
+
done();
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
});
|
|
157
310
|
});
|
package/.travis.yml
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
dist: focal
|
|
2
|
-
language: node_js
|
|
3
|
-
node_js: 20
|
|
4
|
-
|
|
5
|
-
jobs:
|
|
6
|
-
include:
|
|
7
|
-
|
|
8
|
-
- stage: install, check code style and coverage
|
|
9
|
-
if: tag IS blank
|
|
10
|
-
services:
|
|
11
|
-
- mongodb
|
|
12
|
-
addons:
|
|
13
|
-
hosts:
|
|
14
|
-
- localhost
|
|
15
|
-
before_script:
|
|
16
|
-
- npm install -g grunt-cli
|
|
17
|
-
- sleep 10
|
|
18
|
-
script:
|
|
19
|
-
- grunt
|
|
20
|
-
- if [ "$TRAVIS_BRANCH" != "master" ]; then grunt test; fi
|
|
21
|
-
- if [ "$TRAVIS_BRANCH" = "master" ]; then grunt coverage; fi
|
|
22
|
-
|
|
23
|
-
# - stage: Publish to npm
|
|
24
|
-
# if: branch =~ /(release)/
|
|
25
|
-
# script:
|
|
26
|
-
# - echo "PUBLISH npm"
|
|
27
|
-
# deploy:
|
|
28
|
-
# skip_cleanup: true
|
|
29
|
-
# provider: npm
|
|
30
|
-
# email: $NPM_EMAIL
|
|
31
|
-
# api_key: $NPM_TOKEN
|
|
32
|
-
# on:
|
|
33
|
-
# all_branches: true
|
|
34
|
-
# condition: $TRAVIS_BRANCH =~ ^(release)*
|
|
35
|
-
|
|
36
|
-
- stage: Publish to docker registry
|
|
37
|
-
if: branch =~ /(release)/
|
|
38
|
-
script:
|
|
39
|
-
- echo "PUBLISH docker"
|
|
40
|
-
- export PACKAGE_VERSION=$(cat package.json | grep version | head -1 | awk -Fn '{ print $2 }' | sed 's/[n:",]//g' | tr -d '[[:space:]]')
|
|
41
|
-
- export MAJOR_VERSION=$(echo ${PACKAGE_VERSION} | awk -F. '{ print $1 }')
|
|
42
|
-
- echo Package version ${PACKAGE_VERSION}
|
|
43
|
-
- echo Major version ${MAJOR_VERSION}
|
|
44
|
-
|
|
45
|
-
- git config --local user.name ${GIT_USER}
|
|
46
|
-
- git config --local user.email ${GIT_EMAIL}
|
|
47
|
-
- git tag ${PACKAGE_VERSION}
|
|
48
|
-
|
|
49
|
-
- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
|
|
50
|
-
|
|
51
|
-
- docker build -t soajsorg/gateway . --platform linux/amd64
|
|
52
|
-
|
|
53
|
-
- docker images
|
|
54
|
-
|
|
55
|
-
- docker tag soajsorg/gateway:latest soajsorg/gateway:${PACKAGE_VERSION}
|
|
56
|
-
- docker tag soajsorg/gateway:latest soajsorg/gateway:${MAJOR_VERSION}.x
|
|
57
|
-
|
|
58
|
-
- docker push soajsorg/gateway
|
|
59
|
-
- docker push soajsorg/gateway:${PACKAGE_VERSION}
|
|
60
|
-
- docker push soajsorg/gateway:${MAJOR_VERSION}.x
|
|
61
|
-
before_deploy:
|
|
62
|
-
- yes | gem update --system --force
|
|
63
|
-
- gem install bundler
|
|
64
|
-
- gem install faraday-net_http -v '3.3.0'
|
|
65
|
-
- gem install uri
|
|
66
|
-
- gem install logger
|
|
67
|
-
deploy:
|
|
68
|
-
on:
|
|
69
|
-
all_branches: true
|
|
70
|
-
provider: releases
|
|
71
|
-
api_key: ${GIT_TOKEN}
|
|
72
|
-
skip_cleanup: true
|