-
Notifications
You must be signed in to change notification settings - Fork 2
102 lines (91 loc) · 5.3 KB
/
build-windows.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# https://github.com/sqlitebrowser/sqlitebrowser/wiki/Win64-setup-%E2%80%94-Compiling-SQLCipher
name: Build - Windows
on:
workflow_dispatch:
push:
branches:
- master
paths:
- ".github/workflows/build-windows.yml"
jobs:
build:
name: Build
runs-on: ${{ matrix.os }}
permissions:
contents: write
strategy:
fail-fast: false
matrix:
os: [windows-2022]
arch: ["Win32", "Win64"]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup OpenSSL
if: matrix.arch == 'Win32'
# https://github.com/actions/runner-images/blob/main/images/windows/scripts/build/Install-OpenSSL.ps1 & Win32OpenSSL.exe /? & Win32OpenSSL.exe /LOG="a.log" /SAVEINF="inf.inf"
run: |
$url = "https://slproweb.com/download/Win32OpenSSL-1_1_1w.exe"
$path = "C:\temp\Win32OpenSSL.exe"
Invoke-WebRequest -Uri $url -OutFile $path
Start-Process -FilePath $path -ArgumentList "/silent","/sp-","/suppressmsgboxes","/DIR=`"$env:ProgramFiles\OpenSSL`"","/TASKS=copytobin" -Wait
- name: Setup MSVC
uses: ilammy/msvc-dev-cmd@v1
with:
arch: ${{ matrix.arch == 'Win32' && 'amd64_x86' || matrix.arch == 'Win64' && 'amd64'}}
- name: Clear SQLite and temp files
continue-on-error: true
run: |
mkdir -p C:\temp\${{ matrix.arch }}\
mkdir -p C:\dev
- name: Install SQLite
run: |
$htmlContent = Invoke-WebRequest -Uri "https://sqlite.org/download.html" | Select-Object -ExpandProperty Content
$regex = [regex]::new('PRODUCT,(\d+\.\d+\.\d+),(\d+/sqlite-amalgamation-\d+\.zip),\d+,(.+)')
$match = $regex.Match($htmlContent)
$relativeUrl = $match.Groups[2].Value
$downloadLink = "https://sqlite.org/$relativeUrl"
Invoke-WebRequest -Uri $downloadLink -OutFile 'C:\temp\${{ matrix.arch }}\sqlite.zip'
Expand-Archive -Path C:\temp\${{ matrix.arch }}\sqlite.zip -DestinationPath C:\temp\${{ matrix.arch }}
Move-Item -Path C:\temp\${{ matrix.arch }}\sqlite-amalgamation-* C:\dev\SQLite-${{ matrix.arch }}
cd C:\dev\SQLite-${{ matrix.arch }}
cl sqlite3.c -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_STAT4 -DSQLITE_SOUNDEX -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_GEOPOLY -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_MATH_FUNCTIONS -DSQLITE_MAX_ATTACHED=125 -DSQLITE_API="__declspec(dllexport)" -link -dll -out:sqlite3.dll
- name: Install SQLite Extensions
run: |
cp .\src\extensions\extension-formats.c C:\dev\SQLite-${{ matrix.arch}}\
cp .\src\extensions\extension-formats.def C:\dev\SQLite-${{ matrix.arch}}\
cp .\src\extensions\extension-functions.c C:\dev\SQLite-${{ matrix.arch}}\
cp .\src\extensions\extension-functions.def C:\dev\SQLite-${{ matrix.arch}}\
cd C:\dev\SQLite-${{ matrix.arch}}\
cl /MD extension-formats.c -link -dll -def:extension-formats.def -out:formats.dll
cl /MD extension-functions.c -link -dll -def:extension-functions.def -out:math.dll
# FIXME: Disable building the 'fileio' extension for now (#3488)
# If this issue is resolved, be sure to delete the related patch for WiX
# curl -L -o fileio.c "https://sqlite.org/src/raw?filename=ext/misc/fileio.c&ci=trunk"
# curl -L -o test_windirent.c "https://sqlite.org/src/raw?filename=src/test_windirent.c&ci=trunk"
# curl -L -o test_windirent.h "https://sqlite.org/src/raw?filename=src/test_windirent.h&ci=trunk"
# cl /MD fileio.c test_windirent.c -link sqlite3.lib -dll -out:fileio.dll
- name: Install SQLCipher
# ref: https://github.com/actions/runner-images/blob/main/images/windows/scripts/build/Install-OpenSSL.ps1#L12
run: |
mkdir -p C:\dev\SQLCipher-${{ matrix.arch }}
cd C:\dev\SQLCipher-${{ matrix.arch }}
git clone -q https://github.com/sqlcipher/sqlcipher.git .
git reset --hard $(git describe --tags --abbrev=0)
nmake /f Makefile.msc USE_AMALGAMATION=1 NO_TCL=1 SQLITE3DLL=sqlcipher.dll SQLITE3LIB=sqlcipher.lib SQLITE3EXE=sqlcipher.exe LTLINKOPTS="`"$env:ProgramFiles\OpenSSL\lib\libcrypto.lib`"" OPT_FEATURE_FLAGS="-DSQLITE_TEMP_STORE=2 -DSQLITE_HAS_CODEC=1 -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS5=1 -DSQLITE_ENABLE_FTS3_PARENTHESIS=1 -DSQLITE_ENABLE_STAT4=1 -DSQLITE_SOUNDEX=1 -DSQLITE_ENABLE_JSON1=1 -DSQLITE_ENABLE_GEOPOLY=1 -DSQLITE_ENABLE_RTREE=1 -DSQLCIPHER_CRYPTO_OPENSSL=1 -DSQLITE_MAX_ATTACHED=125 `"-I$env:ProgramFiles\OpenSSL\include`""
mkdir sqlcipher
copy sqlite3.c,sqlite3.h,sqlcipher.dll,sqlcipher.lib,sqlcipher.exe,"$env:ProgramFiles\OpenSSL\libcrypto-*" sqlcipher
- name: Prepare artifacts
run: |
Compress-Archive -Path C:\dev\SQLCipher-${{ matrix.arch }}\sqlcipher -DestinationPath build-artifacts-${{ matrix.arch }}.zip
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: build-artifacts-${{ matrix.os }}-${{ matrix.arch }}
path: build-artifacts-${{ matrix.arch }}.zip
retention-days: 7
- name: Release
uses: softprops/action-gh-release@v2
with:
tag_name: latest
files: build-artifacts-${{ matrix.arch }}.zip