Skip to content

Commit 5a9cae1

Browse files
maheshganjiSncgangadhara-ginnenitin-parasharCascade Bot
authored
GitHub Release version v6.1.0 (#53)
* STRY59283893: Updated outputs in the action file (#47) * Added outputs in the action.yml file * version changes * Def0651896 (#50) avoid polling when piepeline is not tracked * STRY59283893: Updated outputs in the action file (#47) (#48) * Added outputs in the action.yml file * version changes * DEF0651896:avoid polling when piepeline is not tracked? * Update create-change.js * DEF0651896:added log * DEF0651896:removing log * DEF0651896:addressing pr comment about logging messages --------- Co-authored-by: maheshganjiSnc <mahesh.ganji@servicenow.com> * STRY60681188:Enhance Error Logging in Change Creation API Calls * STRY60681188:Clean up logging * STRY60681188:add method to display error message * STRY60681188:add method to display error message * STRY60681188: Add missing [ * Updated Versions to 6.1.0 --------- Co-authored-by: gangadhara-ginne <gangadhara.ginne@servicenow.com> Co-authored-by: Nitin Parashar <nitin.parashar@servicenow.com> Co-authored-by: Cascade Bot <cascade@example.com>
1 parent a970f84 commit 5a9cae1

File tree

6 files changed

+66
-43
lines changed

6 files changed

+66
-43
lines changed

.github/workflows/test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434

3535
steps:
3636
- name: ServiceNow Change Approval
37-
uses: ServiceNow/servicenow-devops-change@v6.0.0
37+
uses: ServiceNow/servicenow-devops-change@v6.1.0
3838
id: create
3939
with:
4040
devops-integration-user-name: ${{ secrets.SN_DEVOPS_USER }}

.github/workflows/workflowToken.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434

3535
steps:
3636
- name: ServiceNow Change Approval
37-
uses: ServiceNow/servicenow-devops-change@v6.0.0
37+
uses: ServiceNow/servicenow-devops-change@v6.1.0
3838
id: create
3939
with:
4040
devops-integration-token: ${{ secrets.SN_DEVOPS_INTEGRATION_TOKEN }}

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ deploy:
3535
runs-on: ubuntu-latest
3636
steps:
3737
- name: ServiceNow Change
38-
uses: ServiceNow/servicenow-devops-change@v6.0.0
38+
uses: ServiceNow/servicenow-devops-change@v6.1.0
3939
id: create
4040
with:
4141
devops-integration-token: ${{ secrets.SN_DEVOPS_INTEGRATION_TOKEN }}
@@ -62,7 +62,7 @@ deploy:
6262
runs-on: ubuntu-latest
6363
steps:
6464
- name: ServiceNow Change
65-
uses: ServiceNow/servicenow-devops-change@v6.0.0
65+
uses: ServiceNow/servicenow-devops-change@v6.1.0
6666
with:
6767
devops-integration-user-name: ${{ secrets.SN_DEVOPS_USER }}
6868
devops-integration-user-password: ${{ secrets.SN_DEVOPS_PASSWORD }}

dist/index.js

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -27994,35 +27994,34 @@ async function createChange({
2799427994
deploymentGateStr
2799527995
}) {
2799627996

27997-
console.log('Calling Change Control API to create change....');
27997+
console.log('[ServiceNow DevOps] Calling Change Control API to create change....');
2799827998

2799927999
let changeRequestDetails;
2800028000
let deploymentGateDetails;
2800128001
let githubContext;
2800228002
let payload;
2800328003
let postendpoint = '';
2800428004
let response;
28005-
let status = false;
2800628005

2800728006
try {
2800828007
changeRequestDetails = JSON.parse(changeRequestDetailsStr);
2800928008
} catch (e) {
28010-
console.log(`Error occured with message ${e}`);
28009+
displayErrorMsg(`[ServiceNow DevOps] Error occured with message ${e}`);
2801128010
throw new Error("Failed parsing changeRequestDetails");
2801228011
}
2801328012

2801428013
try {
2801528014
if (deploymentGateStr)
2801628015
deploymentGateDetails = JSON.parse(deploymentGateStr);
2801728016
} catch (e) {
28018-
console.log(`Error occured with message ${e}`);
28017+
displayErrorMsg(`[ServiceNow DevOps] Error occured with message ${e}`);
2801928018
throw new Error("Failed parsing deploymentGateDetails");
2802028019
}
2802128020

2802228021
try {
2802328022
githubContext = JSON.parse(githubContextStr);
2802428023
} catch (e) {
28025-
console.log(`Error occured with message ${e}`);
28024+
displayErrorMsg(`[ServiceNow DevOps] Error occured with message ${e}`);
2802628025
throw new Error("Exception parsing github context");
2802728026
}
2802828027

@@ -28043,7 +28042,7 @@ async function createChange({
2804328042
payload.deploymentGateDetails = deploymentGateDetails;
2804428043
}
2804528044
} catch (err) {
28046-
console.log(`Error occured with message ${err}`);
28045+
console.log(`[ServiceNow DevOps] Error occured with message ${err}`);
2804728046
throw new Error("Exception preparing payload");
2804828047
}
2804928048

@@ -28074,12 +28073,12 @@ async function createChange({
2807428073
else {
2807528074
throw new Error('For Basic Auth, Username and Password is mandatory for integration user authentication');
2807628075
}
28077-
28078-
core.debug("[ServiceNow DevOps], Sending Request for Create Change, Request Header :" + JSON.stringify(httpHeaders) + ", Payload :" + JSON.stringify(payload) + "\n");
28076+
core.debug("[ServiceNow DevOps] Sending Request for Create Change, Request Header :" + JSON.stringify(httpHeaders) + ", Payload :" + JSON.stringify(payload) + "\n");
2807928077
try {
2808028078
response = await axios.post(postendpoint, JSON.stringify(payload), httpHeaders);
28081-
status = true;
2808228079
} catch (err) {
28080+
core.debug("[ServiceNow DevOps] Detailed error information:"+ JSON.stringify(err, null, 2));
28081+
displayErrorMsg(`[ServiceNow DevOps] Error occurred with create change call - Code: ${err.code}, Message: ${err.message}`);
2808328082
if (err.code === 'ECONNABORTED') {
2808428083
throw new Error(`change creation timeout after ${err.config.timeout}s`);
2808528084
}
@@ -28126,18 +28125,17 @@ async function createChange({
2812628125
throw new Error(errMsg);
2812728126
}
2812828127
}
28129-
if (status) {
28130-
var result = response.data.result;
28131-
if (result && result.status == "Success") {
28132-
if(result.message)
28133-
console.log('\n \x1b[1m\x1b[36m' + result.message + '\x1b[0m\x1b[0m');
28134-
else
28135-
console.log('\n \x1b[1m\x1b[36m' + "The job is under change control. A callback request is created and polling has been started to retrieve the change info." + '\x1b[0m\x1b[0m');
28136-
}
28137-
}
28128+
return response
2813828129
}
28130+
28131+
function displayErrorMsg(errMsg) {
28132+
console.error('\n\x1b[31m' + errMsg + '\x1b[31m');
28133+
core.setFailed(errMsg);
28134+
}
28135+
2813928136
module.exports = { createChange };
2814028137

28138+
2814128139
/***/ }),
2814228140

2814328141
/***/ 1597:
@@ -35178,10 +35176,24 @@ const main = async() => {
3517835176
}
3517935177
}
3518035178

35181-
if (deploymentGateStr)
35179+
if (deploymentGateStr) {
3518235180
status = false; //do not poll to check for deployment gate feature
35181+
}
3518335182

3518435183
if (status) {
35184+
var result = response.data.result;
35185+
if (result && result.pipelineTracked === 'false') {
35186+
console.log("Change request cannot be created as pipeline is configured to NOT track in the servicenow instance");
35187+
return;
35188+
}
35189+
35190+
if (result && result.status == "Success") {
35191+
if(result.message)
35192+
console.log('\n \x1b[1m\x1b[36m' + result.message + '\x1b[0m\x1b[0m');
35193+
else
35194+
console.log('\n \x1b[1m\x1b[36m' + "The job is under change control. A callback request is created and polling has been started to retrieve the change info." + '\x1b[0m\x1b[0m');
35195+
}
35196+
3518535197
let timeout = parseInt(core.getInput('timeout') || 3600);
3518635198
let interval = parseInt(core.getInput('interval') || 100);
3518735199

src/lib/create-change.js

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,35 +13,34 @@ async function createChange({
1313
deploymentGateStr
1414
}) {
1515

16-
console.log('Calling Change Control API to create change....');
16+
console.log('[ServiceNow DevOps] Calling Change Control API to create change....');
1717

1818
let changeRequestDetails;
1919
let deploymentGateDetails;
2020
let githubContext;
2121
let payload;
2222
let postendpoint = '';
2323
let response;
24-
let status = false;
2524

2625
try {
2726
changeRequestDetails = JSON.parse(changeRequestDetailsStr);
2827
} catch (e) {
29-
console.log(`Error occured with message ${e}`);
28+
displayErrorMsg(`[ServiceNow DevOps] Error occured with message ${e}`);
3029
throw new Error("Failed parsing changeRequestDetails");
3130
}
3231

3332
try {
3433
if (deploymentGateStr)
3534
deploymentGateDetails = JSON.parse(deploymentGateStr);
3635
} catch (e) {
37-
console.log(`Error occured with message ${e}`);
36+
displayErrorMsg(`[ServiceNow DevOps] Error occured with message ${e}`);
3837
throw new Error("Failed parsing deploymentGateDetails");
3938
}
4039

4140
try {
4241
githubContext = JSON.parse(githubContextStr);
4342
} catch (e) {
44-
console.log(`Error occured with message ${e}`);
43+
displayErrorMsg(`[ServiceNow DevOps] Error occured with message ${e}`);
4544
throw new Error("Exception parsing github context");
4645
}
4746

@@ -62,7 +61,7 @@ async function createChange({
6261
payload.deploymentGateDetails = deploymentGateDetails;
6362
}
6463
} catch (err) {
65-
console.log(`Error occured with message ${err}`);
64+
console.log(`[ServiceNow DevOps] Error occured with message ${err}`);
6665
throw new Error("Exception preparing payload");
6766
}
6867

@@ -93,12 +92,12 @@ async function createChange({
9392
else {
9493
throw new Error('For Basic Auth, Username and Password is mandatory for integration user authentication');
9594
}
96-
97-
core.debug("[ServiceNow DevOps], Sending Request for Create Change, Request Header :" + JSON.stringify(httpHeaders) + ", Payload :" + JSON.stringify(payload) + "\n");
95+
core.debug("[ServiceNow DevOps] Sending Request for Create Change, Request Header :" + JSON.stringify(httpHeaders) + ", Payload :" + JSON.stringify(payload) + "\n");
9896
try {
9997
response = await axios.post(postendpoint, JSON.stringify(payload), httpHeaders);
100-
status = true;
10198
} catch (err) {
99+
core.debug("[ServiceNow DevOps] Detailed error information:"+ JSON.stringify(err, null, 2));
100+
displayErrorMsg(`[ServiceNow DevOps] Error occurred with create change call - Code: ${err.code}, Message: ${err.message}`);
102101
if (err.code === 'ECONNABORTED') {
103102
throw new Error(`change creation timeout after ${err.config.timeout}s`);
104103
}
@@ -145,14 +144,12 @@ async function createChange({
145144
throw new Error(errMsg);
146145
}
147146
}
148-
if (status) {
149-
var result = response.data.result;
150-
if (result && result.status == "Success") {
151-
if(result.message)
152-
console.log('\n \x1b[1m\x1b[36m' + result.message + '\x1b[0m\x1b[0m');
153-
else
154-
console.log('\n \x1b[1m\x1b[36m' + "The job is under change control. A callback request is created and polling has been started to retrieve the change info." + '\x1b[0m\x1b[0m');
155-
}
156-
}
147+
return response
157148
}
158-
module.exports = { createChange };
149+
150+
function displayErrorMsg(errMsg) {
151+
console.error('\n\x1b[31m' + errMsg + '\x1b[31m');
152+
core.setFailed(errMsg);
153+
}
154+
155+
module.exports = { createChange };

src/main.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,24 @@ const main = async() => {
5454
}
5555
}
5656

57-
if (deploymentGateStr)
57+
if (deploymentGateStr) {
5858
status = false; //do not poll to check for deployment gate feature
59+
}
5960

6061
if (status) {
62+
var result = response.data.result;
63+
if (result && result.pipelineTracked === 'false') {
64+
console.log("Change request cannot be created as pipeline is configured to NOT track in the servicenow instance");
65+
return;
66+
}
67+
68+
if (result && result.status == "Success") {
69+
if(result.message)
70+
console.log('\n \x1b[1m\x1b[36m' + result.message + '\x1b[0m\x1b[0m');
71+
else
72+
console.log('\n \x1b[1m\x1b[36m' + "The job is under change control. A callback request is created and polling has been started to retrieve the change info." + '\x1b[0m\x1b[0m');
73+
}
74+
6175
let timeout = parseInt(core.getInput('timeout') || 3600);
6276
let interval = parseInt(core.getInput('interval') || 100);
6377

0 commit comments

Comments
 (0)