Skip to content

Commit 4500418

Browse files
feliciojakubgs
andauthored
set up Jenkins for apps/wallet (#662)
* set up Jenkins for `apps/wallet` * generalize Jenkinsfile to be usable for multiple apps Signed-off-by: Jakub Sokołowski <[email protected]> * add `getBuildDir` * update `husky` * use `wasm-unsafe-eval` * add changesets --------- Signed-off-by: Jakub Sokołowski <[email protected]> Co-authored-by: Jakub Sokołowski <[email protected]>
1 parent 610315e commit 4500418

File tree

12 files changed

+193
-157
lines changed

12 files changed

+193
-157
lines changed

.changeset/lovely-dancers-tie.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'wallet': patch
3+
---
4+
5+
add build steps

.changeset/shy-garlics-breathe.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'connector': patch
3+
---
4+
5+
update build step

Jenkinsfile

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
#!/usr/bin/env groovy
2+
3+
4+
def changesDetected = false
5+
6+
pipeline {
7+
agent { label 'linux' }
8+
9+
options {
10+
timestamps()
11+
/* Prevent Jenkins jobs from running forever */
12+
timeout(time: 10, unit: 'MINUTES')
13+
/* manage how many builds we keep */
14+
buildDiscarder(logRotator(
15+
numToKeepStr: '20',
16+
daysToKeepStr: '30',
17+
))
18+
disableConcurrentBuilds()
19+
}
20+
21+
parameters {
22+
choice(
23+
name: 'APP_NAME',
24+
description: 'Name of app from apps folder.',
25+
choices: choiceFromJobName(params.APP_NAME, ['connector', 'wallet']),
26+
)
27+
}
28+
29+
environment {
30+
PLATFORM = "${params.APP_NAME}"
31+
ZIP_NAME = utils.pkgFilename(
32+
type: 'Extension',
33+
version: 'none',
34+
arch: 'chrome',
35+
ext: 'zip',
36+
)
37+
}
38+
39+
stages {
40+
stage('Check Changed Files') {
41+
when {
42+
changeset(
43+
pattern: "apps/${params.APP_NAME}/**",
44+
comparator: "GLOB"
45+
)
46+
}
47+
steps {
48+
script {
49+
changesDetected = true
50+
}
51+
}
52+
}
53+
54+
stage('Install') {
55+
when { expression { changesDetected } }
56+
steps {
57+
dir("${env.WORKSPACE}/apps/${params.APP_NAME}") {
58+
script {
59+
nix.shell(
60+
'pnpm install --frozen-lockfile',
61+
pure: false,
62+
entryPoint: "${env.WORKSPACE}/apps/${params.APP_NAME}/shell.nix"
63+
)
64+
}
65+
}
66+
}
67+
}
68+
69+
stage('Build') {
70+
when { expression { changesDetected } }
71+
steps {
72+
dir("${env.WORKSPACE}") {
73+
script {
74+
nix.shell(
75+
"pnpm turbo run build --filter=${params.APP_NAME}",
76+
pure: false,
77+
entryPoint: "${env.WORKSPACE}/apps/${params.APP_NAME}/shell.nix"
78+
)
79+
}
80+
}
81+
}
82+
}
83+
84+
stage('Zip') {
85+
when { expression { changesDetected } }
86+
steps {
87+
dir("${env.WORKSPACE}/apps/${params.APP_NAME}") {
88+
zip(
89+
zipFile: env.ZIP_NAME,
90+
dir: getBuildDir(params.APP_NAME),
91+
archive: false,
92+
)
93+
}
94+
}
95+
}
96+
97+
stage('Archive') {
98+
when { expression { changesDetected } }
99+
steps {
100+
dir("${env.WORKSPACE}/apps/${params.APP_NAME}") {
101+
archiveArtifacts(
102+
artifacts: env.ZIP_NAME,
103+
fingerprint: true,
104+
)
105+
}
106+
}
107+
}
108+
109+
stage('Upload') {
110+
when { expression { changesDetected } }
111+
steps {
112+
dir("${env.WORKSPACE}/apps/${params.APP_NAME}") {
113+
script {
114+
env.PKG_URL = s5cmd.upload(env.ZIP_NAME)
115+
}
116+
}
117+
}
118+
}
119+
}
120+
121+
post {
122+
success { script { if(changesDetected) { github.notifyPR(true) } } }
123+
failure { script { if(changesDetected) { github.notifyPR(false) } } }
124+
cleanup { cleanWs() }
125+
}
126+
}
127+
128+
List<String> moveToStart(List<String> original, String input) {
129+
original.split {it.equals(input)}.flatten()
130+
}
131+
132+
/* If job name contains one of choices make that the default(first). */
133+
def choiceFromJobName(String previousChoice, List defaultChoices) {
134+
if (previousChoice != null) {
135+
return moveToStart(defaultChoices, previousChoice)
136+
}
137+
def tokens = env.JOB_NAME.split('/')
138+
for (choice in defaultChoices) {
139+
if (tokens.contains(choice)) {
140+
return moveToStart(defaultChoices, choice)
141+
}
142+
}
143+
return defaultChoices
144+
}
145+
146+
def getBuildDir(String appName) {
147+
switch(appName) {
148+
case 'connector':
149+
return 'build/chrome-mv3-prod'
150+
case 'wallet':
151+
return '.output/chrome-mv3'
152+
default:
153+
error("Unknown app: ${appName}.")
154+
}
155+
}

apps/connector/Jenkinsfile

Lines changed: 0 additions & 137 deletions
This file was deleted.

apps/connector/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@
4545
"@types/react": "18.2.48",
4646
"@types/react-dom": "18.2.18",
4747
"autoprefixer": "^10.4.19",
48-
"husky": "^8.0.3",
4948
"postcss": "^8.4.38",
5049
"prettier": "3.2.4",
5150
"prettier-plugin-tailwindcss": "^0.6.1",

apps/connector/shell.nix

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
}:
88

99
pkgs.mkShell {
10-
name = "browser-extension-shell";
10+
name = "connector-shell";
1111

1212
buildInputs = with pkgs; [
1313
nodejs_20

apps/portfolio/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,6 @@
156156
"eslint-plugin-tailwindcss": "^3.17.4",
157157
"ethereum-cryptography": "^3.0.0",
158158
"globals": "^15.12.0",
159-
"husky": "^8.0.3",
160159
"knip": "^5.30.2",
161160
"lint-staged": "^13.2.0",
162161
"mdast": "^3.0.0",

apps/wallet/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@
6868
"@wxt-dev/module-react": "^1.1.2",
6969
"autoprefixer": "^10.4.19",
7070
"globals": "^15.12.0",
71-
"husky": "^8.0.3",
7271
"postcss": "^8.4.38",
7372
"postcss-load-config": "^6.0.1",
7473
"prettier": "3.2.4",

apps/wallet/shell.nix

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
source ? builtins.fetchTarball {
3+
url = "https://github.com/NixOS/nixpkgs/archive/df27247e6f3e636c119e2610bf12d38b5e98cc79.tar.gz";
4+
sha256 = "sha256:0bbvimk7xb7akrx106mmsiwf9nzxnssisqmqffla03zz51d0kz2n";
5+
},
6+
pkgs ? import (source) {}
7+
}:
8+
9+
pkgs.mkShell {
10+
name = "wallet-shell";
11+
12+
buildInputs = with pkgs; [
13+
nodejs_20
14+
pnpm
15+
];
16+
}

apps/wallet/wxt.config.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ export default defineConfig({
2121
matches: ['<all_urls>'],
2222
},
2323
],
24+
content_security_policy: {
25+
extension_pages:
26+
"script-src 'self' 'wasm-unsafe-eval'; object-src 'self'",
27+
},
2428
},
2529
runner: {
2630
disabled: true,

0 commit comments

Comments
 (0)