Skip to content

Commit ba059bb

Browse files
authored
fix: Circle url update (#1089)
* fix: support updated circleci job url * fix: add correct trailing part of url * fix: globby base path means we have double slashes on screenshot/videos * chore: use our url builder to allow for trailing/leading slashes
1 parent 780ea50 commit ba059bb

File tree

4 files changed

+62
-58
lines changed

4 files changed

+62
-58
lines changed

.circleci/config.yml

+28-28
Original file line numberDiff line numberDiff line change
@@ -54,38 +54,38 @@ jobs:
5454
path: cypress/videos
5555
- store_artifacts:
5656
path: cypress/screenshots
57-
- run:
58-
when: always
59-
name: Slack Custom Reporting via typeScript source File
60-
command: yarn run slack-ts
57+
# - run:
58+
# when: always
59+
# name: Slack Custom Reporting via typeScript source File
60+
# command: yarn run slack-ts
6161
- run:
6262
when: always
6363
name: Slack Custom Reporting via JavaScript Compiled File
6464
command: yarn run slack-js
65-
- run:
66-
when: always
67-
name: Slack Custom Reporting via typeScript source File with opts
68-
command: yarn run slack-ts-opts
69-
- run:
70-
when: always
71-
name: Slack Custom Reporting via JavaScript Compiled File with opts
72-
command: yarn run slack-js-opts
73-
- run:
74-
when: always
75-
name: Generate Test Passing Slack Alert
76-
command: yarn run slack-js-opts-test-passed
77-
- run:
78-
when: always
79-
name: Generate Test Failing Slack Alert
80-
command: yarn run slack-js-opts-test-failed
81-
- run:
82-
when: always
83-
name: Generate Build Failure Slack Alert
84-
command: yarn run slack-js-opts-build-failed
85-
- run:
86-
when: always
87-
name: Run the CLI Cypress Runner
88-
command: yarn run cli
65+
# - run:
66+
# when: always
67+
# name: Slack Custom Reporting via typeScript source File with opts
68+
# command: yarn run slack-ts-opts
69+
# - run:
70+
# when: always
71+
# name: Slack Custom Reporting via JavaScript Compiled File with opts
72+
# command: yarn run slack-js-opts
73+
# - run:
74+
# when: always
75+
# name: Generate Test Passing Slack Alert
76+
# command: yarn run slack-js-opts-test-passed
77+
# - run:
78+
# when: always
79+
# name: Generate Test Failing Slack Alert
80+
# command: yarn run slack-js-opts-test-failed
81+
# - run:
82+
# when: always
83+
# name: Generate Build Failure Slack Alert
84+
# command: yarn run slack-js-opts-build-failed
85+
# - run:
86+
# when: always
87+
# name: Run the CLI Cypress Runner
88+
# command: yarn run cli
8989
- store_artifacts:
9090
path: src/slack/test
9191
- store_artifacts:

config.env.test.circleci

+1
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,4 @@ LOG_LEVEL=debug
1717
CIRCLE_JOB=jobName
1818
ENV_SUT=envsut
1919
CIRCLE_PROJECT_ID=177880476
20+
CIRCLE_WORKFLOW_JOB_ID=177880476

src/slack/slack-alert.ts

+29-28
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ export interface CiEnvVars {
4848
CI_PROJECT_USERNAME: string | undefined;
4949
JOB_NAME: string | undefined;
5050
CIRCLE_PROJECT_ID: string | undefined;
51+
CIRCLE_WORKFLOW_JOB_ID: string | undefined;
5152
}
5253

5354
interface ReportStatistics {
@@ -113,14 +114,13 @@ export const slackRunner = async ({
113114
});
114115
const SLACK_WEBHOOK_URL = process.env.SLACK_WEBHOOK_URL;
115116

116-
if (!SLACK_WEBHOOK_URL){
117-
throw new Error('no SLACK_WEBHOOK_URL env var set')
117+
if (!SLACK_WEBHOOK_URL) {
118+
throw new Error("no SLACK_WEBHOOK_URL env var set");
118119
}
119120

120121
switch (reportStatistics.status) {
121122
case "failed": {
122-
const slackWebhookFailedUrl = process.env
123-
.SLACK_WEBHOOK_FAILED_URL;
123+
const slackWebhookFailedUrl = process.env.SLACK_WEBHOOK_FAILED_URL;
124124
const slackWebhookUrls = slackWebhookFailedUrl
125125
? slackWebhookFailedUrl.split(",")
126126
: SLACK_WEBHOOK_URL.split(",");
@@ -147,7 +147,7 @@ export const slackRunner = async ({
147147
"Slack message sent successfully"
148148
);
149149
return result;
150-
} catch (e) {
150+
} catch (e: any) {
151151
e.code
152152
? log.error(
153153
{
@@ -198,7 +198,7 @@ export const slackRunner = async ({
198198
"Slack message sent successfully"
199199
);
200200
return result;
201-
} catch (e) {
201+
} catch (e: any) {
202202
e.code
203203
? log.error(
204204
{
@@ -220,8 +220,7 @@ export const slackRunner = async ({
220220
);
221221
}
222222
default: {
223-
const slackWebhookErrorUrl = process.env
224-
.SLACK_WEBHOOK_ERROR_URL;
223+
const slackWebhookErrorUrl = process.env.SLACK_WEBHOOK_ERROR_URL;
225224
const slackWebhookUrls = slackWebhookErrorUrl
226225
? slackWebhookErrorUrl.split(",")
227226
: SLACK_WEBHOOK_URL.split(",");
@@ -244,7 +243,7 @@ export const slackRunner = async ({
244243
);
245244

246245
return result;
247-
} catch (e) {
246+
} catch (e: any) {
248247
e.code
249248
? log.error(
250249
{
@@ -267,7 +266,7 @@ export const slackRunner = async ({
267266
}
268267
}
269268
}
270-
} catch (e) {
269+
} catch (e: any) {
271270
throw new Error(e);
272271
}
273272
};
@@ -600,9 +599,11 @@ const getVideoLinks = async ({
600599
const videoLinks = await Promise.all(
601600
videos.map((videoObject) => {
602601
const trimmedVideoFilename = path.basename(videoObject);
603-
return `<${videosURL}/${videosDir}/${path.relative(
602+
603+
return `<${buildUrl(
604+
videosURL,
604605
videosDir,
605-
videoObject
606+
path.relative(videosDir, videoObject)
606607
)}|Video:- ${trimmedVideoFilename}>\n`;
607608
})
608609
);
@@ -640,9 +641,11 @@ const getScreenshotLinks = async ({
640641
const screenshotLinks = await Promise.all(
641642
screenshots.map((screenshotObject) => {
642643
const trimmedScreenshotFilename = path.basename(screenshotObject);
643-
return `<${screenshotURL}/${screenshotDir}/${path.relative(
644+
645+
return `<${buildUrl(
646+
screenshotURL,
644647
screenshotDir,
645-
screenshotObject
648+
path.relative(screenshotDir, screenshotObject)
646649
)}|Screenshot:- ${trimmedScreenshotFilename}>\n`;
647650
})
648651
);
@@ -676,15 +679,7 @@ const getArtefactUrl = async ({
676679
if (customUrl) {
677680
return customUrl;
678681
} else if (ciProvider === "circleci") {
679-
switch (vcsRoot) {
680-
case "github":
681-
return `https://${ciEnvVars.CI_BUILD_NUM}-${ciEnvVars.CIRCLE_PROJECT_ID}-gh.circle-artifacts.com/0/`;
682-
case "bitbucket":
683-
return `https://${ciEnvVars.CI_BUILD_NUM}-${ciEnvVars.CIRCLE_PROJECT_ID}-bb.circle-artifacts.com/0/`;
684-
default: {
685-
return "";
686-
}
687-
}
682+
return `https://output.circle-artifacts.com/output/job/${ciEnvVars.CIRCLE_WORKFLOW_JOB_ID}/artifacts/0/`;
688683
}
689684
return "";
690685
};
@@ -717,6 +712,7 @@ const resolveCIProvider = async (ciProvider?: string): Promise<CiEnvVars> => {
717712
CI_PROJECT_USERNAME,
718713
JOB_NAME,
719714
CIRCLE_PROJECT_ID,
715+
CIRCLE_WORKFLOW_JOB_ID,
720716
} = process.env;
721717

722718
if (!ciProvider && process.env.CIRCLE_SHA1) {
@@ -739,20 +735,24 @@ const resolveCIProvider = async (ciProvider?: string): Promise<CiEnvVars> => {
739735
(CI_PROJECT_USERNAME = process.env.CIRCLE_PROJECT_USERNAME),
740736
(JOB_NAME = process.env.CIRCLE_JOB);
741737
CIRCLE_PROJECT_ID = process.env.CIRCLE_PROJECT_ID;
738+
CIRCLE_WORKFLOW_JOB_ID = process.env.CIRCLE_WORKFLOW_JOB_ID;
742739
}
743740
break;
744741
case "github":
745742
{
746743
(CI_SHA1 = process.env.GITHUB_SHA),
747-
(CI_BRANCH = process.env.GITHUB_BASE_REF||process.env.GITHUB_HEAD_REF),
744+
(CI_BRANCH =
745+
process.env.GITHUB_BASE_REF || process.env.GITHUB_HEAD_REF),
748746
(CI_USERNAME = process.env.GITHUB_ACTOR),
749-
(CI_BUILD_URL = process.env.CIRCLE_BUILD_URL|| 'CI_BUILD_URL'),
750-
(CI_BUILD_NUM = process.env.CIRCLE_BUILD_NUM|| 'CIRCLE_BUILD_NUM'),
751-
(CI_PULL_REQUEST = process.env.CIRCLE_PULL_REQUEST|| 'CIRCLE_PULL_REQUEST'),
747+
(CI_BUILD_URL = process.env.CIRCLE_BUILD_URL || "CI_BUILD_URL"),
748+
(CI_BUILD_NUM = process.env.CIRCLE_BUILD_NUM || "CIRCLE_BUILD_NUM"),
749+
(CI_PULL_REQUEST =
750+
process.env.CIRCLE_PULL_REQUEST || "CIRCLE_PULL_REQUEST"),
752751
(CI_PROJECT_REPONAME = process.env.GITHUB_REPOSITORY), // The owner and repository name. For example, octocat/Hello-World.
753752
(CI_PROJECT_USERNAME = process.env.GITHUB_REPOSITORY_OWNER),
754753
(JOB_NAME = process.env.GITHUB_ACTION);
755-
CIRCLE_PROJECT_ID = process.env.CIRCLE_PROJECT_ID|| 'CIRCLE_PROJECT_ID';
754+
CIRCLE_PROJECT_ID =
755+
process.env.CIRCLE_PROJECT_ID || "CIRCLE_PROJECT_ID";
756756
}
757757
break;
758758
case "jenkins":
@@ -799,6 +799,7 @@ const resolveCIProvider = async (ciProvider?: string): Promise<CiEnvVars> => {
799799
CI_PROJECT_USERNAME,
800800
JOB_NAME,
801801
CIRCLE_PROJECT_ID,
802+
CIRCLE_WORKFLOW_JOB_ID,
802803
};
803804
};
804805

src/slack/test/slack-alert.test.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import { MessageAttachment } from "@slack/types";
44
import "jest";
55
import * as path from "path";
6+
import { env } from "process";
67
import { testables } from "../slack-alert";
78
const {
89
buildHTMLReportURL,
@@ -30,6 +31,7 @@ const envVars = {
3031
CI_PROJECT_USERNAME: "123",
3132
JOB_NAME: "123",
3233
CIRCLE_PROJECT_ID: "123",
34+
CIRCLE_WORKFLOW_JOB_ID: "123",
3335
};
3436
describe("webhookInitialArgs tester", () => {
3537
test("it returns the test status in the title", async () => {
@@ -102,7 +104,7 @@ describe("Video Link Checker", () => {
102104
videosDir: dir,
103105
});
104106
expect(s).toContain(
105-
`<http://sometesturl.com/${dir}/small.mp4|Video:- small.mp4>`
107+
`<http://sometesturl.com${dir}/small.mp4|Video:- small.mp4>`
106108
);
107109
});
108110

@@ -153,7 +155,7 @@ describe("Screenshot Link Checker", () => {
153155
screenshotDir: dir,
154156
});
155157
expect(s).toContain(
156-
`<http://sometesturl.com/${dir}/pnggrad16rgb.png|Screenshot:- pnggrad16rgb.png>`
158+
`<http://sometesturl.com${dir}/pnggrad16rgb.png|Screenshot:- pnggrad16rgb.png>`
157159
);
158160
});
159161
});

0 commit comments

Comments
 (0)