Skip to content

Commit ba66f8d

Browse files
authored
ci: use key locker to sign neuron for windows (nervosnetwork#2913)
1 parent f3cc18a commit ba66f8d

4 files changed

Lines changed: 86 additions & 15 deletions

File tree

.github/workflows/package.yml

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,39 @@ jobs:
5151
env:
5252
ACTIONS_ALLOW_UNSECURE_COMMANDS: "true"
5353

54+
- name: Setup Certificate
55+
if: matrix.os == 'windows-2019'
56+
run: |
57+
echo "${{ secrets.SM_CLIENT_CERT_FILE_BASE64 }}" | base64 --decode > /d/Certificate_pkcs12.p12
58+
shell: bash
59+
60+
- name: Set variables
61+
if: matrix.os == 'windows-2019'
62+
run: |
63+
echo "SM_KEYPAIR_NAME=${{ secrets.SM_KEYPAIR_ALIAS }}" >> "$GITHUB_ENV"
64+
echo "SM_HOST=${{ secrets.SM_HOST }}" >> "$GITHUB_ENV"
65+
echo "SM_API_KEY=${{ secrets.SM_API_KEY }}" >> "$GITHUB_ENV"
66+
echo "SM_CLIENT_CERT_FILE=D:\\Certificate_pkcs12.p12" >> "$GITHUB_ENV"
67+
echo "SM_CLIENT_CERT_PASSWORD=${{ secrets.SM_CLIENT_CERT_PASSWORD }}" >> "$GITHUB_ENV"
68+
echo "C:\Program Files (x86)\Windows Kits\10\App Certification Kit" >> $GITHUB_PATH
69+
echo "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools" >> $GITHUB_PATH
70+
echo "C:\Program Files\DigiCert\DigiCert One Signing Manager Tools" >> $GITHUB_PATH
71+
shell: bash
72+
73+
- name: Setting up the client tools
74+
if: ${{ matrix.os == 'windows-2019' && env.SM_API_KEY != '' }}
75+
run: |
76+
curl -X GET https://one.digicert.com/signingmanager/api-ui/v1/releases/smtools-windows-x64.msi/download -H "x-api-key:%SM_API_KEY%" -o smtools-windows-x64.msi
77+
msiexec /i smtools-windows-x64.msi /quiet /qn
78+
C:\Windows\System32\certutil.exe -csp "DigiCert Signing Manager KSP" -key -user
79+
shell: cmd
80+
81+
- name: Certificates Sync
82+
if: ${{ matrix.os == 'windows-2019' && env.SM_API_KEY != '' }}
83+
run: |
84+
smctl windows certsync
85+
shell: cmd
86+
5487
- name: Install libudev
5588
if: matrix.os == 'ubuntu-20.04'
5689
run: |
@@ -88,8 +121,6 @@ jobs:
88121
bash ./scripts/release.sh win
89122
env:
90123
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
91-
CSC_LINK: ${{ secrets.WIN_CERTIFICATE_BASE64 }}
92-
CSC_KEY_PASSWORD: ${{ secrets.WIN_CERTIFICATE_PASSWORD }}
93124

94125
- name: Package for Linux
95126
if: matrix.os == 'ubuntu-20.04'

.github/workflows/package_for_test.yml

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,39 @@ jobs:
6262
env:
6363
ACTIONS_ALLOW_UNSECURE_COMMANDS: "true"
6464

65+
- name: Setup Certificate
66+
if: matrix.os == 'windows-2019'
67+
run: |
68+
echo "${{ secrets.SM_CLIENT_CERT_FILE_BASE64 }}" | base64 --decode > /d/Certificate_pkcs12.p12
69+
shell: bash
70+
71+
- name: Set variables
72+
if: matrix.os == 'windows-2019'
73+
run: |
74+
echo "SM_KEYPAIR_NAME=${{ secrets.SM_KEYPAIR_ALIAS }}" >> "$GITHUB_ENV"
75+
echo "SM_HOST=${{ secrets.SM_HOST }}" >> "$GITHUB_ENV"
76+
echo "SM_API_KEY=${{ secrets.SM_API_KEY }}" >> "$GITHUB_ENV"
77+
echo "SM_CLIENT_CERT_FILE=D:\\Certificate_pkcs12.p12" >> "$GITHUB_ENV"
78+
echo "SM_CLIENT_CERT_PASSWORD=${{ secrets.SM_CLIENT_CERT_PASSWORD }}" >> "$GITHUB_ENV"
79+
echo "C:\Program Files (x86)\Windows Kits\10\App Certification Kit" >> $GITHUB_PATH
80+
echo "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools" >> $GITHUB_PATH
81+
echo "C:\Program Files\DigiCert\DigiCert One Signing Manager Tools" >> $GITHUB_PATH
82+
shell: bash
83+
84+
- name: Setting up the client tools
85+
if: ${{ matrix.os == 'windows-2019' && env.SM_API_KEY != '' }}
86+
run: |
87+
curl -X GET https://one.digicert.com/signingmanager/api-ui/v1/releases/smtools-windows-x64.msi/download -H "x-api-key:%SM_API_KEY%" -o smtools-windows-x64.msi
88+
msiexec /i smtools-windows-x64.msi /quiet /qn
89+
C:\Windows\System32\certutil.exe -csp "DigiCert Signing Manager KSP" -key -user
90+
shell: cmd
91+
92+
- name: Certificates Sync
93+
if: ${{ matrix.os == 'windows-2019' && env.SM_API_KEY != '' }}
94+
run: |
95+
smctl windows certsync
96+
shell: cmd
97+
6598
- name: Install libudev
6699
if: matrix.os == 'ubuntu-20.04'
67100
run: |
@@ -101,19 +134,7 @@ jobs:
101134
SKIP_NOTARIZE: true
102135

103136
- name: Package for Windows
104-
if: ${{ matrix.os == 'windows-2019' && env.WIN_CERTIFICATE_BASE64 != '' }}
105-
run: |
106-
bash ./scripts/download-ckb.sh win
107-
yarn build
108-
bash ./scripts/copy-ui-files.sh
109-
bash ./scripts/package-for-test.sh win
110-
env:
111-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
112-
CSC_LINK: ${{ secrets.WIN_CERTIFICATE_BASE64 }}
113-
CSC_KEY_PASSWORD: ${{ secrets.WIN_CERTIFICATE_PASSWORD }}
114-
115-
- name: Package for Windows for skip code sign
116-
if: ${{ matrix.os == 'windows-2019' && env.WIN_CERTIFICATE_BASE64 == '' }}
137+
if: matrix.os == 'windows-2019'
117138
run: |
118139
bash ./scripts/download-ckb.sh win
119140
yarn build

packages/neuron-wallet/electron-builder.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ win:
4949
- target: nsis
5050
arch:
5151
- x64
52+
sign: scripts/customSign.js
53+
signingHashAlgorithms:
54+
- sha256
5255

5356
mac:
5457
artifactName: "${productName}-v${version}-${os}-${arch}.${ext}"
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
const { execSync } = require('node:child_process')
2+
3+
exports.default = async configuration => {
4+
if (!process.env.SM_API_KEY) {
5+
console.info(`Skip signing because SM_API_KEY and not configured`)
6+
return
7+
}
8+
9+
if (!configuration.path) {
10+
throw new Error(`Path of application is not found`)
11+
}
12+
13+
execSync(`smctl sign --keypair-alias="${process.env.SM_KEYPAIR_NAME}" --input "${String(configuration.path)}"`, {
14+
stdio: 'inherit',
15+
})
16+
}

0 commit comments

Comments
 (0)