Added wix file and build step to create msi (#1153)

This commit is contained in:
James Bebbington 2020-07-07 23:34:49 +10:00 committed by GitHub
parent add8f61d15
commit db02bc3d41
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 159 additions and 3 deletions

View File

@ -84,7 +84,7 @@ workflows:
only: /^v([0-9])+.([0-9])+.([0-9])+.*/
- cross-compile:
requires:
- build
- setup-and-lint
filters:
tags:
only: /^v([0-9])+.([0-9])+.([0-9])+.*/
@ -112,6 +112,12 @@ workflows:
filters:
tags:
only: /^v([0-9])+.([0-9])+.([0-9])+.*/
- windows-msi:
requires:
- cross-compile
filters:
tags:
only: /^v([0-9])+.([0-9])+.([0-9])+.*/
- publish-stable:
requires:
- cross-compile
@ -120,6 +126,7 @@ workflows:
- gosec
- coverage
- windows-test
- windows-msi
filters:
branches:
ignore: /.*/
@ -133,6 +140,7 @@ workflows:
- gosec
- coverage
- windows-test
- windows-msi
filters:
branches:
only: master
@ -305,3 +313,24 @@ jobs:
popd
export NODE_PATH=$HOME/node_modules
bash .circleci/check-links/check-links.sh
windows-msi:
executor:
name: win/default
shell: powershell.exe
steps:
- attach_to_workspace
- run:
name: Install Wix Toolset
command: .\packaging\msi\make.ps1 Install-Tools
- run:
name: Build MSI
command: |
$Version = if ($env:CIRCLE_TAG -match '^v(\d+\.\d+\.\d+)') { $Matches[1] } else { "0.0.1" }
.\packaging\msi\make.ps1 New-MSI -Version $Version
- run:
name: Validate MSI
command: .\packaging\msi\make.ps1 Confirm-MSI
- persist_to_workspace:
root: ~/
paths: project/bin

4
.gitignore vendored
View File

@ -21,3 +21,7 @@ coverage.txt
coverage_all.txt
coverage_old.txt
coverage.html
# Wix
*.wixobj
*.wixpdb

View File

@ -147,7 +147,7 @@ install-tools:
.PHONY: otelcol
otelcol:
GO111MODULE=on CGO_ENABLED=0 go build -o ./bin/otelcol_$(GOOS)_$(GOARCH) $(BUILD_INFO) ./cmd/otelcol
GO111MODULE=on CGO_ENABLED=0 go build -o ./bin/otelcol_$(GOOS)_$(GOARCH)$(EXTENSION) $(BUILD_INFO) ./cmd/otelcol
.PHONY: run
run:
@ -202,7 +202,7 @@ binaries-linux_arm64:
.PHONY: binaries-windows_amd64
binaries-windows_amd64:
GOOS=windows GOARCH=amd64 $(MAKE) binaries
GOOS=windows GOARCH=amd64 EXTENSION=.exe $(MAKE) binaries
# Definitions for ProtoBuf generation.

67
packaging/msi/make.ps1 Normal file
View File

@ -0,0 +1,67 @@
# Copyright The OpenTelemetry Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
<#
.SYNOPSIS
Makefile like build commands for the Collector on Windows.
Usage: .\make.ps1 <Command> [-<Param> <Value> ...]
Example: .\make.ps1 New-MSI -Config "./my-config.yaml"
.PARAMETER Target
Build target to run (Install-Tools, New-MSI)
#>
Param(
[Parameter(Mandatory=$true, ValueFromRemainingArguments=$true)][string]$Target
)
$ErrorActionPreference = "Stop"
function Install-Tools {
choco install wixtoolset -y
setx /m PATH "%PATH%;C:\Program Files (x86)\WiX Toolset v3.11\bin"
refreshenv
}
function New-MSI(
[string]$Version="0.0.1",
[string]$Config="./examples/otel-local-config.yaml"
) {
candle -arch x64 -dVersion="$Version" -dConfig="$Config" packaging/msi/opentelemetry-collector.wxs
light opentelemetry-collector.wixobj
Move-Item -Force opentelemetry-collector.msi bin/opentelemetry-collector.msi
}
function Confirm-MSI {
# ensure system32 is in Path so we can use executables like msiexec & sc
$env:Path += ";C:\Windows\System32"
# install msi, validate service is installed & running
Start-Process -Wait msiexec "/i `"$pwd\bin\opentelemetry-collector.msi`" /qn"
sc.exe query state=all | findstr "otelcol" | Out-Null
if ($LASTEXITCODE -ne 0) { Throw "otelcol service failed to install" }
# stop service
Stop-Service otelcol
# start service
Start-Service otelcol
# uninstall msi, validate service is uninstalled
Start-Process -Wait msiexec "/x `"$pwd\bin\opentelemetry-collector.msi`" /qn"
sc.exe query state=all | findstr "otelcol" | Out-Null
if ($LASTEXITCODE -ne 1) { Throw "otelcol service failed to uninstall" }
}
$sb = [scriptblock]::create("$Target")
Invoke-Command -ScriptBlock $sb

View File

@ -0,0 +1,56 @@
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" UpgradeCode="B7C263DD-95A5-436A-A025-DCA5200C2BE3" Name="OpenTelemetry Collector" Version="$(var.Version)" Manufacturer="OpenTelemetry" Language="1033">
<Package InstallerVersion="200" Compressed="yes" Comments="Windows Installer Package"/>
<Media Id="1" Cabinet="product.cab" EmbedCab="yes"/>
<Icon Id="ProductIcon" SourceFile="./packaging/msi/opentelemetry.ico"/>
<Property Id="ARPPRODUCTICON" Value="ProductIcon"/>
<Property Id="ARPHELPLINK" Value="https://opentelemetry.io/"/>
<Property Id="ARPURLINFOABOUT" Value="https://opentelemetry.io/"/>
<Property Id="ARPNOREPAIR" Value="1"/>
<Property Id="ARPNOMODIFY" Value="1"/>
<Feature Id="Feature" Level="1">
<ComponentRef Id="ApplicationComponent"/>
</Feature>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFiles64Folder">
<Directory Id="INSTALLDIR" Name="OpenTelemetry Collector">
<Component Id="ApplicationComponent" Guid="1207C3C4-1830-4DC8-8A7B-2BD7DBE45BC3">
<!-- Files to include -->
<File Id="ExecutableFile" Name="otelcol.exe" KeyPath="yes" Source="./bin/otelcol_windows_amd64.exe"/>
<File Id="DefaultConfigFile" Name="config.yaml" Source="$(var.Config)" />
<!-- Since we may have overwritten the config file (see below), we need to explicitly remove it on uninstall -->
<RemoveFile Id="RemoveConfigFile" Name="config.yaml" On="uninstall" />
<ServiceInstall
Id="Sevice"
Name="otelcol"
DisplayName="OpenTelemetry Collector"
Description="Collects, processes, and exports telemetry from various configurable sources."
Type="ownProcess"
Vital="yes"
Start="auto"
Account="LocalSystem"
ErrorControl="normal"
Arguments=" --config=&quot;[INSTALLDIR]config.yaml&quot;"
Interactive="no" />
<ServiceControl
Id="StartStopRemoveService"
Name="otelcol"
Start="install"
Stop="both"
Remove="uninstall"
Wait="yes" />
</Component>
</Directory>
</Directory>
</Directory>
<!-- If CONFIG is supplied as a custom argument when installing, overwrite config.yaml with the specified file -->
<CustomAction Id="CopyConfig" ExeCommand="xcopy /y &quot;[CONFIG]&quot; &quot;[INSTALLDIR]config.yaml*&quot;" Directory="INSTALLDIR" Impersonate="no" Execute="deferred" Return="check" />
<InstallExecuteSequence>
<Custom Action="CopyConfig" After="InstallFiles">CONFIG AND NOT Installed</Custom>
</InstallExecuteSequence>
</Product>
</Wix>

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 KiB