Skip to content

Commit e967678

Browse files
Add Azure Pipelines Windows Pipeline (#2)
* Add an Azure Pipelines Pipeline * Extend pipeline to publish the raw binaries * Exclude sample files
1 parent b3b4d77 commit e967678

3 files changed

Lines changed: 317 additions & 0 deletions

File tree

.github/azdo/windows.yml

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
name: GitHub-mosquitto-windows-$(Date:yyyyMMdd)$(Rev:.r)
2+
3+
trigger:
4+
branches:
5+
include:
6+
- master
7+
- fixes
8+
- develop
9+
- release/*
10+
tags:
11+
include:
12+
- v[0-9]+.*
13+
pr:
14+
branches:
15+
include:
16+
- master
17+
- fixes
18+
- develop
19+
- release/*
20+
21+
variables:
22+
BUILD_TYPE: Release
23+
VCPKG_ROOT: $(Build.SourcesDirectory)\vcpkg
24+
VCPKG_TRIPLET: x64-windows-release
25+
VCPKG_BINARY_CACHE: $(Pipeline.Workspace)\vcpkg-binary-cache
26+
BUILD_EXE_INSTALLER: true
27+
BUILD_EXCLUDE_DEVELOPMENT_FILES: true
28+
29+
stages:
30+
- stage: build_windows
31+
displayName: Build Windows
32+
jobs:
33+
- job: mosquitto
34+
displayName: Build Mosquitto
35+
36+
pool:
37+
vmImage: windows-2022
38+
39+
steps:
40+
- checkout: self
41+
42+
- powershell: |
43+
choco install cmake --version=3.31.6 -y --installargs 'ADD_CMAKE_TO_PATH=System'
44+
45+
$cmakeBin = 'C:\Program Files\CMake\bin'
46+
if (-not (Test-Path -LiteralPath $cmakeBin)) {
47+
throw "CMake installation not found at $cmakeBin"
48+
}
49+
50+
Write-Host "##vso[task.prependpath]$cmakeBin"
51+
& (Join-Path $cmakeBin 'cmake.exe') --version
52+
displayName: pin cmake to 3.x series
53+
54+
- task: Cache@2
55+
displayName: Cache vcpkg binary artifacts
56+
inputs:
57+
key: 'vcpkg | "$(Agent.OS)" | "$(VCPKG_TRIPLET)" | $(Build.SourcesDirectory)\vcpkg.json'
58+
restoreKeys: |
59+
vcpkg | "$(Agent.OS)" | "$(VCPKG_TRIPLET)"
60+
path: $(VCPKG_BINARY_CACHE)
61+
62+
- powershell: |
63+
git clone --depth 1 https://github.com/microsoft/vcpkg.git "$(VCPKG_ROOT)"
64+
& "$(VCPKG_ROOT)\bootstrap-vcpkg.bat" -disableMetrics
65+
displayName: set up vcpkg
66+
67+
- powershell: |
68+
New-Item -ItemType Directory -Path '$(VCPKG_BINARY_CACHE)' -Force | Out-Null
69+
$env:VCPKG_DEFAULT_BINARY_CACHE = '$(VCPKG_BINARY_CACHE)'
70+
& "$(VCPKG_ROOT)\vcpkg.exe" install `
71+
--triplet "$(VCPKG_TRIPLET)" `
72+
--x-manifest-root "$(Build.SourcesDirectory)" `
73+
--x-install-root "$(Build.SourcesDirectory)\build64\vcpkg_installed"
74+
displayName: vcpkg build
75+
76+
- powershell: |
77+
cmake -B "$(Build.SourcesDirectory)/build64" `
78+
-DCMAKE_BUILD_TYPE=$(BUILD_TYPE) `
79+
-DWITH_WEBSOCKETS=ON `
80+
-DWITH_TESTS=OFF `
81+
-DCMAKE_GENERATOR_PLATFORM=x64 `
82+
-DCMAKE_TOOLCHAIN_FILE="$(VCPKG_ROOT)/scripts/buildsystems/vcpkg.cmake" `
83+
-DVCPKG_TARGET_TRIPLET=$(VCPKG_TRIPLET) `
84+
-DVCPKG_MANIFEST_MODE=ON `
85+
-DVCPKG_INSTALLED_DIR="$(Build.SourcesDirectory)/build64/vcpkg_installed" `
86+
-DWITH_HTTP_API=ON `
87+
-DHTTP_API_DIR="C:\Program Files\Mosquitto\dashboard"
88+
displayName: Configure CMake
89+
90+
- powershell: |
91+
cmake --build "$(Build.SourcesDirectory)/build64" --config $(BUILD_TYPE)
92+
displayName: Build
93+
94+
- powershell: |
95+
Invoke-WebRequest `
96+
-Uri 'https://aka.ms/vs/17/release/vc_redist.x64.exe' `
97+
-OutFile "$(Build.SourcesDirectory)\installer\VC_redist.x64.exe"
98+
displayName: Download VC redistributable
99+
condition: eq(variables['BUILD_EXE_INSTALLER'], 'true')
100+
101+
- powershell: |
102+
$makensis = Get-Command makensis.exe -ErrorAction SilentlyContinue
103+
if (-not $makensis) {
104+
$makensis = Get-Item -LiteralPath 'C:\Program Files (x86)\NSIS\makensis.exe'
105+
}
106+
107+
& $makensis.Source "$(Build.SourcesDirectory)\installer\mosquitto64.nsi"
108+
displayName: Build EXE installer
109+
condition: eq(variables['BUILD_EXE_INSTALLER'], 'true')
110+
111+
- powershell: |
112+
& "$(Build.SourcesDirectory)\.github\scripts\pack-windows-binaries.ps1" `
113+
-SourceRoot "$(Build.SourcesDirectory)" `
114+
-StagingDir "$(Build.ArtifactStagingDirectory)\binaries-windows-x64" `
115+
-ExcludeDev
116+
condition: eq(variables['BUILD_EXCLUDE_DEVELOPMENT_FILES'], 'true')
117+
displayName: Stage binaries (exclude dev)
118+
119+
- powershell: |
120+
& "$(Build.SourcesDirectory)\.github\scripts\pack-windows-binaries.ps1" `
121+
-SourceRoot "$(Build.SourcesDirectory)" `
122+
-StagingDir "$(Build.ArtifactStagingDirectory)\binaries-windows-x64"
123+
condition: eq(variables['BUILD_EXCLUDE_DEVELOPMENT_FILES'], 'false')
124+
displayName: Stage binaries
125+
126+
- powershell: |
127+
$artifactDir = '$(Build.ArtifactStagingDirectory)\installer'
128+
New-Item -ItemType Directory -Path $artifactDir -Force | Out-Null
129+
Copy-Item -Path '$(Build.SourcesDirectory)\installer\mosquitto*.exe' -Destination $artifactDir -Force
130+
displayName: Stage EXE installer artifact
131+
condition: eq(variables['BUILD_EXE_INSTALLER'], 'true')
132+
133+
- task: PublishPipelineArtifact@1
134+
displayName: Upload installer
135+
inputs:
136+
targetPath: $(Build.ArtifactStagingDirectory)\installer
137+
artifact: installer
138+
139+
- task: PublishPipelineArtifact@1
140+
displayName: Upload binaries
141+
inputs:
142+
targetPath: $(Build.ArtifactStagingDirectory)\binaries-windows-x64
143+
artifact: binaries-windows-x64
Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
param(
2+
[Parameter(Mandatory = $true)]
3+
[string]$SourceRoot,
4+
5+
[Parameter(Mandatory = $true)]
6+
[string]$StagingDir,
7+
8+
[switch]$ExcludeDev
9+
)
10+
11+
function Copy-StagedFiles {
12+
param(
13+
[Parameter(Mandatory = $true)]
14+
[string]$Destination,
15+
16+
[Parameter(Mandatory = $true)]
17+
[string[]]$Files
18+
)
19+
20+
$targetDir = if ([string]::IsNullOrEmpty($Destination)) {
21+
$StagingDir
22+
} else {
23+
Join-Path $StagingDir $Destination
24+
}
25+
26+
New-Item -ItemType Directory -Path $targetDir -Force | Out-Null
27+
28+
foreach ($file in $Files) {
29+
$sourcePath = Join-Path $SourceRoot $file
30+
if (-not (Test-Path -LiteralPath $sourcePath)) {
31+
throw "Missing staged file: $file"
32+
}
33+
34+
Copy-Item -LiteralPath $sourcePath -Destination $targetDir -Force
35+
}
36+
}
37+
38+
Set-StrictMode -Version Latest
39+
$ErrorActionPreference = 'Stop'
40+
41+
if (Test-Path -LiteralPath $StagingDir) {
42+
Remove-Item -LiteralPath $StagingDir -Recurse -Force
43+
}
44+
45+
New-Item -ItemType Directory -Path $StagingDir -Force | Out-Null
46+
47+
Copy-StagedFiles '.' @(
48+
'logo/mosquitto.ico',
49+
'build64/src/Release/mosquitto.exe',
50+
'build64/apps/db_dump/Release/mosquitto_db_dump.exe',
51+
'build64/apps/mosquitto_ctrl/Release/mosquitto_ctrl.exe',
52+
'build64/apps/mosquitto_passwd/Release/mosquitto_passwd.exe',
53+
'build64/apps/mosquitto_signal/Release/mosquitto_signal.exe',
54+
'build64/client/Release/mosquitto_pub.exe',
55+
'build64/client/Release/mosquitto_sub.exe',
56+
'build64/client/Release/mosquitto_rr.exe',
57+
'build64/libcommon/Release/mosquitto_common.dll',
58+
'build64/lib/Release/mosquitto.dll',
59+
'build64/lib/cpp/Release/mosquittopp.dll',
60+
'build64/plugins/acl-file/Release/mosquitto_acl_file.dll',
61+
'build64/plugins/dynamic-security/Release/mosquitto_dynamic_security.dll',
62+
'build64/plugins/password-file/Release/mosquitto_password_file.dll',
63+
'build64/plugins/persist-sqlite/Release/mosquitto_persist_sqlite.dll',
64+
'build64/plugins/sparkplug-aware/Release/mosquitto_sparkplug_aware.dll',
65+
# 'aclfile.example',
66+
'ChangeLog.txt',
67+
'NOTICE.md',
68+
# 'pskfile.example',
69+
# 'pwfile.example',
70+
# 'README.md',
71+
# 'README-windows.txt',
72+
# 'README-letsencrypt.md',
73+
# 'SECURITY.md',
74+
'edl-v10',
75+
'epl-v20',
76+
'mosquitto.conf',
77+
'build64/vcpkg_installed/x64-windows-release/bin/cjson.dll',
78+
'build64/vcpkg_installed/x64-windows-release/bin/libcrypto-3-x64.dll',
79+
'build64/vcpkg_installed/x64-windows-release/bin/libmicrohttpd-dll.dll',
80+
'build64/vcpkg_installed/x64-windows-release/bin/libssl-3-x64.dll',
81+
'build64/vcpkg_installed/x64-windows-release/bin/pthreadVC3.dll',
82+
'build64/vcpkg_installed/x64-windows-release/bin/sqlite3.dll'
83+
)
84+
85+
if (-not $ExcludeDev) {
86+
Copy-StagedFiles 'devel' @(
87+
'build64/lib/Release/mosquitto.lib',
88+
'build64/lib/cpp/Release/mosquittopp.lib',
89+
'build64/src/Release/mosquitto_broker.lib',
90+
'include/mosquitto.h',
91+
'include/mosquitto_broker.h',
92+
'include/mosquitto_plugin.h',
93+
'include/mosquittopp.h',
94+
'include/mqtt_protocol.h'
95+
)
96+
97+
Copy-StagedFiles 'devel/mosquitto' @(
98+
'include/mosquitto/broker.h',
99+
'include/mosquitto/broker_control.h',
100+
'include/mosquitto/broker_plugin.h',
101+
'include/mosquitto/defs.h',
102+
'include/mosquitto/libcommon.h',
103+
'include/mosquitto/libcommon_base64.h',
104+
'include/mosquitto/libcommon_cjson.h',
105+
'include/mosquitto/libcommon_file.h',
106+
'include/mosquitto/libcommon_memory.h',
107+
'include/mosquitto/libcommon_password.h',
108+
'include/mosquitto/libcommon_properties.h',
109+
'include/mosquitto/libcommon_random.h',
110+
'include/mosquitto/libcommon_string.h',
111+
'include/mosquitto/libcommon_time.h',
112+
'include/mosquitto/libcommon_topic.h',
113+
'include/mosquitto/libcommon_utf8.h',
114+
'include/mosquitto/libmosquitto.h',
115+
'include/mosquitto/libmosquitto_auth.h',
116+
'include/mosquitto/libmosquitto_callbacks.h',
117+
'include/mosquitto/libmosquitto_connect.h',
118+
'include/mosquitto/libmosquitto_create_delete.h',
119+
'include/mosquitto/libmosquitto_helpers.h',
120+
'include/mosquitto/libmosquitto_loop.h',
121+
'include/mosquitto/libmosquitto_message.h',
122+
'include/mosquitto/libmosquitto_options.h',
123+
'include/mosquitto/libmosquitto_publish.h',
124+
'include/mosquitto/libmosquitto_socks.h',
125+
'include/mosquitto/libmosquitto_subscribe.h',
126+
'include/mosquitto/libmosquitto_tls.h',
127+
'include/mosquitto/libmosquitto_unsubscribe.h',
128+
'include/mosquitto/libmosquitto_will.h',
129+
'include/mosquitto/libmosquittopp.h',
130+
'include/mosquitto/mqtt_protocol.h'
131+
)
132+
}
133+
134+
Copy-StagedFiles 'dashboard' @(
135+
'dashboard/src/index.html',
136+
'dashboard/src/listeners.html'
137+
)
138+
139+
Copy-StagedFiles 'dashboard/app' @(
140+
'dashboard/src/app/consts.js',
141+
'dashboard/src/app/dashboard.js',
142+
'dashboard/src/app/index.js',
143+
'dashboard/src/app/listeners.js',
144+
'dashboard/src/app/sidebar.js'
145+
)
146+
147+
Copy-StagedFiles 'dashboard/css' @(
148+
'dashboard/src/css/styles.css'
149+
)
150+
151+
Copy-StagedFiles 'dashboard/lib' @(
152+
'dashboard/src/lib/chart.umd.js',
153+
'dashboard/src/lib/chartjs-plugin-zoom.min.js',
154+
'dashboard/src/lib/hammer.min.js'
155+
)
156+
157+
Copy-StagedFiles 'dashboard/media' @(
158+
'dashboard/src/media/banner.svg',
159+
'dashboard/src/media/favicon-16x16.png',
160+
'dashboard/src/media/favicon-32x32.png',
161+
'dashboard/src/media/mosquitto-logo.png'
162+
)
163+
164+
Copy-StagedFiles 'dashboard/tailwind' @(
165+
'dashboard/src/tailwind.config.js',
166+
'dashboard/src/tailwind/styles.css'
167+
)
168+
169+
Copy-StagedFiles 'dashboard/utils' @(
170+
'dashboard/src/utils/assert.js',
171+
'dashboard/src/utils/queue.js',
172+
'dashboard/src/utils/utils.js'
173+
)

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,3 +174,4 @@ obj-*/
174174
# Others
175175
tmp/
176176
failed-tests.json
177+
.vs/

0 commit comments

Comments
 (0)