Skip to content

Commit

Permalink
Added Azure Pipelines support for CI builds (#51)
Browse files Browse the repository at this point in the history
* Fixed script macros throwing warnings for armake
Used macros from ace3 repo

* Fixed armake throwing errors on Linux

* Git ignore unused files

* Changed editorconfig settings for yaml, makefile

* Added getArmake PowerShell tool
Stripped down version of BearMitUmlaut's make.ps1 from ace3

* Auto version

* Added Makefile

* Added yml for Azure Pipelines

* Fixed missing newline character
  • Loading branch information
CreepPork authored and mharis001 committed Jul 5, 2019
1 parent 8f6e6fd commit 8bb8a69
Show file tree
Hide file tree
Showing 10 changed files with 248 additions and 22 deletions.
8 changes: 8 additions & 0 deletions .editorconfig
Expand Up @@ -10,3 +10,11 @@ trim_trailing_whitespace = true

[*.md]
trim_trailing_whitespace = false

[*.yml]
indent_style = space
indent_size = 2

[Makefile]
indent_style = tab
indent_size = 4
4 changes: 4 additions & 0 deletions .gitignore
Expand Up @@ -10,3 +10,7 @@ Thumbs.db
CHANGELOG.md
.hephaestus.json
*.bisign
*.tar.gz
*.zip
@zen
tools/armake.exe
2 changes: 2 additions & 0 deletions AUTHORS.txt
Expand Up @@ -11,6 +11,7 @@ mharis001 <mhariszakar@gmail.com>
# CONTRIBUTORS
654wak654
Alganthe
BaerMitUmlaut
Beaumont
Brett
Dedmen
Expand All @@ -19,6 +20,7 @@ Dystopian
GitHawk
Glowbal
Jonpas
KoffeinFlummi
PabstMirror
SilentSpike
Tuupertunut
90 changes: 90 additions & 0 deletions Makefile
@@ -0,0 +1,90 @@
VERSION = $(shell cat "VERSION")
PREFIX = zen
BIN = @zen
ZIP = zen
FLAGS = -i include -w unquoted-string -w redefinition-wo-undef
VERSION_FILES = README.md mod.cpp

MAJOR = $(word 1, $(subst ., ,$(VERSION)))
MINOR = $(word 2, $(subst ., ,$(VERSION)))
PATCH = $(word 3, $(subst ., ,$(VERSION)))
BUILD = $(word 4, $(subst ., ,$(VERSION)))
VERSION_S = $(MAJOR).$(MINOR).$(PATCH)
VERSION_F = $(MAJOR).$(MINOR).$(PATCH).$(BUILD)
GIT_HASH = $(shell git log -1 --pretty=format:"%H" | head -c 8)

ifeq ($(OS), Windows_NT)
ARMAKE = ./tools/armake.exe # Downloaded via tools/getArmake.ps1
else
ARMAKE = armake
endif

$(BIN)/addons/$(PREFIX)_%.pbo: addons/%
@mkdir -p $(BIN)/addons
@echo " PBO $@"
@${ARMAKE} build ${FLAGS} -f -e "version=$(GIT_HASH)" $< $@

$(BIN)/optionals/$(PREFIX)_%.pbo: optionals/%
@mkdir -p $(BIN)/optionals
@echo " PBO $@"
@${ARMAKE} build ${FLAGS} -f -e "version=$(GIT_HASH)" $< $@

# Shortcut for building single addons (eg. "make <component>.pbo")
%.pbo:
"$(MAKE)" $(MAKEFLAGS) $(patsubst %, $(BIN)/addons/$(PREFIX)_%, $@)

all: $(patsubst addons/%, $(BIN)/addons/$(PREFIX)_%.pbo, $(wildcard addons/*)) \
$(patsubst optionals/%, $(BIN)/optionals/$(PREFIX)_%.pbo, $(wildcard optionals/*))

filepatching:
"$(MAKE)" $(MAKEFLAGS) FLAGS="-w unquoted-string -p"

$(BIN)/keys/%.biprivatekey:
@mkdir -p $(BIN)/keys
@echo " KEY $@"
@${ARMAKE} keygen -f $(patsubst $(BIN)/keys/%.biprivatekey, $(BIN)/keys/%, $@)

$(BIN)/addons/$(PREFIX)_%.pbo.$(PREFIX)_$(VERSION)-$(GIT_HASH).bisign: $(BIN)/addons/$(PREFIX)_%.pbo $(BIN)/keys/$(PREFIX)_$(VERSION).biprivatekey
@echo " SIG $@"
@${ARMAKE} sign -f -s $@ $(BIN)/keys/$(PREFIX)_$(VERSION).biprivatekey $<

$(BIN)/optionals/$(PREFIX)_%.pbo.$(PREFIX)_$(VERSION)-$(GIT_HASH).bisign: $(BIN)/optionals/$(PREFIX)_%.pbo $(BIN)/keys/$(PREFIX)_$(VERSION).biprivatekey
@echo " SIG $@"
@${ARMAKE} sign -f -s $@ $(BIN)/keys/$(PREFIX)_$(VERSION).biprivatekey $<

signatures: $(patsubst addons/%, $(BIN)/addons/$(PREFIX)_%.pbo.$(PREFIX)_$(VERSION)-$(GIT_HASH).bisign, $(wildcard addons/*)) \
$(patsubst optionals/%, $(BIN)/optionals/$(PREFIX)_%.pbo.$(PREFIX)_$(VERSION)-$(GIT_HASH).bisign, $(wildcard optionals/*))

version:
@echo " VER $(VERSION)"
$(shell sed -i -r -s 's/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/$(VERSION)/g' $(VERSION_FILES))
$(shell sed -i -r -s 's/[0-9]+\.[0-9]+\.[0-9]+/$(VERSION_S)/g' $(VERSION_FILES))
@printf "#define MAJOR $(MAJOR)%s\n#define MINOR $(MINOR)%s\n#define PATCHLVL $(PATCH)%s\n#define BUILD $(BUILD)%s\n" > "addons/main/script_version.hpp"

commit:
@echo " GIT commit release preparation"
@git add -A
@git diff-index --quiet HEAD || git commit -am "Prepare release $(VERSION_S)" -q

push: commit
@echo " GIT push release preparation"
@git push -q

release: clean version commit
@"$(MAKE)" $(MAKEFLAGS) signatures
@echo " ZIP $(ZIP)_$(VERSION_F)-$(GIT_HASH).zip"
@cp mod.cpp README.md AUTHORS.txt LICENSE logo_zen_ca.paa logo_zen_small_ca.paa $(BIN)
@zip -qr $(ZIP)_$(VERSION_F)-$(GIT_HASH).zip $(BIN)

releaseCI: clean version
@"$(MAKE)" $(MAKEFLAGS) signatures
@echo " TAR $(ZIP)_$(VERSION_F)-$(GIT_HASH).tar.gz"
@cp mod.cpp README.md AUTHORS.txt LICENSE logo_zen_ca.paa logo_zen_small_ca.paa $(BIN)
@tar -czf $(ZIP)_$(VERSION_F)-$(GIT_HASH).tar.gz $(BIN)
@ls

clean:
rm -rf $(BIN) $(ZIP)_*.zip
rm -rf $(BIN) $(ZIP)_*.tar.gz

.PHONY: all filepatching signatures version commit push release releaseCI clean
1 change: 1 addition & 0 deletions VERSION
@@ -0,0 +1 @@
1.1.0.4
2 changes: 1 addition & 1 deletion addons/common/defineResinclDesign.inc
@@ -1,4 +1,4 @@
#include "\A3\ui_f\hpp\defineResincl.inc"
#include "\a3\ui_f\hpp\defineResincl.inc"

//--- RscDisplayCurator
#define IDC_RSCDISPLAYCURATOR_CREATEBACKGROUND 15505
Expand Down
20 changes: 20 additions & 0 deletions azure-pipelines.yml
@@ -0,0 +1,20 @@
jobs:
- job: Build
pool:
vmImage: 'vs2017-win2016'
steps:
- powershell: |
./tools/getArmake.ps1
displayName: 'Install armake'
- bash: |
make releaseCI
displayName: 'Build with armake'
- powershell: |
ls *.tar.gz
mv (ls *.tar.gz).Name $(Build.ArtifactStagingDirectory)
ls $(Build.ArtifactStagingDirectory)
displayName: 'Move tar to Artifact Directory'
- task: PublishBuildArtifacts@1
inputs:
pathtoPublish: $(Build.ArtifactStagingDirectory)
artifactName: release
40 changes: 21 additions & 19 deletions include/x/cba/addons/main/script_macros_common.hpp
Expand Up @@ -478,8 +478,8 @@ Group: General

// *************************************
// Internal Functions
#define DOUBLES(var1,var2) ##var1##_##var2
#define TRIPLES(var1,var2,var3) ##var1##_##var2##_##var3
#define DOUBLES(var1,var2) var1##_##var2
#define TRIPLES(var1,var2,var3) var1##_##var2##_##var3
#define QUOTE(var1) #var1

#ifdef MODULAR
Expand Down Expand Up @@ -733,29 +733,29 @@ Macro: ISNILS()
Author:
Sickboy
------------------------------------------- */
#define ISNILS(VARIABLE,DEFAULT_VALUE) if (isNil #VARIABLE) then { ##VARIABLE = ##DEFAULT_VALUE }
#define ISNILS(VARIABLE,DEFAULT_VALUE) if (isNil #VARIABLE) then { VARIABLE = DEFAULT_VALUE }
#define ISNILS2(var1,var2,var3,var4) ISNILS(TRIPLES(var1,var2,var3),var4)
#define ISNILS3(var1,var2,var3) ISNILS(DOUBLES(var1,var2),var3)
#define ISNIL(var1,var2) ISNILS2(PREFIX,COMPONENT,var1,var2)
#define ISNILMAIN(var1,var2) ISNILS3(PREFIX,var1,var2)

#define CREATELOGICS(var1,var2) ##var1##_##var2## = ([sideLogic] call CBA_fnc_getSharedGroup) createUnit ["LOGIC", [0, 0, 0], [], 0, "NONE"]
#define CREATELOGICLOCALS(var1,var2) ##var1##_##var2## = "LOGIC" createVehicleLocal [0, 0, 0]
#define CREATELOGICGLOBALS(var1,var2) ##var1##_##var2## = ([sideLogic] call CBA_fnc_getSharedGroup) createUnit ["LOGIC", [0, 0, 0], [], 0, "NONE"]; publicVariable QUOTE(DOUBLES(var1,var2))
#define CREATELOGICGLOBALTESTS(var1,var2) ##var1##_##var2## = ([sideLogic] call CBA_fnc_getSharedGroup) createUnit [QUOTE(DOUBLES(ADDON,logic)), [0, 0, 0], [], 0, "NONE"]
#define CREATELOGICS(var1,var2) var1##_##var2 = ([sideLogic] call CBA_fnc_getSharedGroup) createUnit ["LOGIC", [0, 0, 0], [], 0, "NONE"]
#define CREATELOGICLOCALS(var1,var2) var1##_##var2 = "LOGIC" createVehicleLocal [0, 0, 0]
#define CREATELOGICGLOBALS(var1,var2) var1##_##var2 = ([sideLogic] call CBA_fnc_getSharedGroup) createUnit ["LOGIC", [0, 0, 0], [], 0, "NONE"]; publicVariable QUOTE(DOUBLES(var1,var2))
#define CREATELOGICGLOBALTESTS(var1,var2) var1##_##var2 = ([sideLogic] call CBA_fnc_getSharedGroup) createUnit [QUOTE(DOUBLES(ADDON,logic)), [0, 0, 0], [], 0, "NONE"]

#define GETVARS(var1,var2,var3) (##var1##_##var2 getVariable #var3)
#define GETVARS(var1,var2,var3) (var1##_##var2 getVariable #var3)
#define GETVARMAINS(var1,var2) GETVARS(var1,MAINLOGIC,var2)

#ifndef PATHTO_SYS
#define PATHTO_SYS(var1,var2,var3) \MAINPREFIX\##var1\SUBPREFIX\##var2\##var3.sqf
#define PATHTO_SYS(var1,var2,var3) \MAINPREFIX\var1\SUBPREFIX\var2\var3.sqf
#endif
#ifndef PATHTOF_SYS
#define PATHTOF_SYS(var1,var2,var3) \MAINPREFIX\##var1\SUBPREFIX\##var2\##var3
#define PATHTOF_SYS(var1,var2,var3) \MAINPREFIX\var1\SUBPREFIX\var2\var3
#endif

#ifndef PATHTOF2_SYS
#define PATHTOF2_SYS(var1,var2,var3) MAINPREFIX\##var1\SUBPREFIX\##var2\##var3
#define PATHTOF2_SYS(var1,var2,var3) MAINPREFIX\var1\SUBPREFIX\var2\var3
#endif

#define PATHTO_R(var1) PATHTOF2_SYS(PREFIX,COMPONENT_C,var1)
Expand All @@ -781,9 +781,9 @@ Macro: ISNILS()
#define COMPILE_FILE_SYS(var1,var2,var3) COMPILE_FILE2_SYS('PATHTO_SYS(var1,var2,var3)')
#define COMPILE_FILE_CFG_SYS(var1,var2,var3) COMPILE_FILE2_CFG_SYS('PATHTO_SYS(var1,var2,var3)')

#define SETVARS(var1,var2) ##var1##_##var2 setVariable
#define SETVARS(var1,var2) var1##_##var2 setVariable
#define SETVARMAINS(var1) SETVARS(var1,MAINLOGIC)
#define GVARMAINS(var1,var2) ##var1##_##var2##
#define GVARMAINS(var1,var2) var1##_##var2
#define CFGSETTINGSS(var1,var2) configFile >> "CfgSettings" >> #var1 >> #var2
//#define SETGVARS(var1,var2,var3) ##var1##_##var2##_##var3 =
//#define SETGVARMAINS(var1,var2) ##var1##_##var2 =
Expand All @@ -794,9 +794,9 @@ Macro: ISNILS()
// #define PREP_SYS2(var1,var2,var3,var4) ##var1##_##var2##_fnc_##var4 = { ##var1##_##var2##_fnc_##var4 = COMPILE_FILE_SYS(var1,var3,DOUBLES(fnc,var4)); if (isNil "_this") then { call ##var1##_##var2##_fnc_##var4 } else { _this call ##var1##_##var2##_fnc_##var4 } }

// Compile-Once, at Macro. As opposed to Compile-Once, on first use.
#define PREPMAIN_SYS(var1,var2,var3) ##var1##_fnc_##var3 = COMPILE_FILE_SYS(var1,var2,DOUBLES(fnc,var3))
#define PREP_SYS(var1,var2,var3) ##var1##_##var2##_fnc_##var3 = COMPILE_FILE_SYS(var1,var2,DOUBLES(fnc,var3))
#define PREP_SYS2(var1,var2,var3,var4) ##var1##_##var2##_fnc_##var4 = COMPILE_FILE_SYS(var1,var3,DOUBLES(fnc,var4))
#define PREPMAIN_SYS(var1,var2,var3) var1##_fnc_##var3 = COMPILE_FILE_SYS(var1,var2,DOUBLES(fnc,var3))
#define PREP_SYS(var1,var2,var3) var1##_##var2##_fnc_##var3 = COMPILE_FILE_SYS(var1,var2,DOUBLES(fnc,var3))
#define PREP_SYS2(var1,var2,var3,var4) var1##_##var2##_fnc_##var4 = COMPILE_FILE_SYS(var1,var3,DOUBLES(fnc,var4))

#define LSTR(var1) TRIPLES(ADDON,STR,var1)

Expand Down Expand Up @@ -888,7 +888,7 @@ Macro: GVARMAIN()
#define GETVAR(var1) GETVARS(PREFIX,COMPONENT,var1)
#define SETVAR SETVARS(PREFIX,COMPONENT)
#define SETVARMAIN SETVARMAINS(PREFIX)
#define IFCOUNT(var1,var2,var3) if (count ##var1 > ##var2) then { ##var3 = ##var1 select ##var2 };
#define IFCOUNT(var1,var2,var3) if (count var1 > var2) then { var3 = var1 select var2 };

//#define PREP(var1) PREP_SYS(PREFIX,COMPONENT_F,var1)

Expand Down Expand Up @@ -1707,7 +1707,8 @@ Macro: IS_ADMIN
Author:
commy2
------------------------------------------- */
#define IS_ADMIN serverCommandAvailable "#kick"
#define IS_ADMIN_SYS(x) x##kick
#define IS_ADMIN serverCommandAvailable 'IS_ADMIN_SYS(#)'

/* -------------------------------------------
Macro: IS_ADMIN_LOGGED
Expand All @@ -1727,7 +1728,8 @@ Macro: IS_ADMIN_LOGGED
Author:
commy2
------------------------------------------- */
#define IS_ADMIN_LOGGED serverCommandAvailable "#shutdown"
#define IS_ADMIN_LOGGED_SYS(x) x##shutdown
#define IS_ADMIN_LOGGED serverCommandAvailable 'IS_ADMIN_LOGGED_SYS(#)'

/* -------------------------------------------
Macro: FILE_EXISTS
Expand Down
4 changes: 2 additions & 2 deletions mod.cpp
@@ -1,8 +1,8 @@
name = "Zeus Enhanced 1.0.0";
name = "Zeus Enhanced 1.1.0";
picture = "logo_zen_ca.paa";
actionName = "GitHub";
action = "https://github.com/zen-mod/ZEN";
description = "Zeus Enhanced - Version 1.0.0";
description = "Zeus Enhanced - Version 1.1.0";
logo = "logo_zen_small_ca.paa";
logoOver = "logo_zen_small_ca.paa";
tooltip = "Zeus Enhanced";
Expand Down
99 changes: 99 additions & 0 deletions tools/getArmake.ps1
@@ -0,0 +1,99 @@
$projectRoot = Split-Path -Parent $PSScriptRoot
$releasePage = "https://github.com/KoffeinFlummi/armake/releases"
$downloadPage = "https://github.com/KoffeinFlummi/armake/releases/download/v{0}/armake_v{0}.zip"
$armake = "$projectRoot\tools\armake.exe"
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12


function Compare-VersionNewerThan {
param(
[Parameter(Mandatory=$True)]
$version1,

[Parameter(Mandatory=$True)]
$version2
)

$version1 = $version1.Split(".") | % {[int] $_}
$version2 = $version2.Split(".") | % {[int] $_}

$newer = $False
for ($i = 0; $i -lt $version1.Length; $i++) {
if ($version1[$i] -gt $version2[$i]) {
$newer = $True
break
}
}

$newer
}


function Get-InstalledArmakeVersion {
if (Test-Path $armake) {
$version = & $armake --version
$version = $version.Substring(1)
} else {
$version = "0.0.0"
}

$version
}


function Get-LatestArmakeVersion {
$client = New-Object Net.WebClient
$content = $client.DownloadString($releasePage)
$client.dispose()

$match = $content -match "<a href="".*?/releases/download/v(.*?)/.*?.zip"".*?>"
if (!$match) {
Write-Error "Failed to find valid armake download link."
$version = "0.0.0"
} else {
$version = $matches[1]
}

$version
}


function Update-Armake {
param(
[Parameter(Mandatory=$True)]
$url
)

New-Item "$PSScriptRoot\temp" -ItemType "directory" -Force | Out-Null

Write-Output "Downloading armake..."
$client = New-Object Net.WebClient
$client.DownloadFile($url, "$PSScriptRoot\temp\armake.zip")
$client.dispose()

Write-Output "Download complete, unpacking..."
Expand-Archive "$PSScriptRoot\temp\armake.zip" "$PSScriptRoot\temp\armake"
Remove-Item "$PSScriptRoot\temp\armake.zip"

if ([Environment]::Is64BitProcess) {
$binary = Get-ChildItem -Path "$PSScriptRoot\temp\armake" -Include "*.exe" -Recurse | Where-Object {$_.Name -match ".*w64.exe"}
} else {
$binary = Get-ChildItem -Path "$PSScriptRoot\temp\armake" -Include "*.exe" -Recurse | Where-Object {$_.Name -match ".*w64.exe"}
}
Move-Item $binary.FullName $armake -Force

Remove-Item "$PSScriptRoot\temp" -Recurse -Force
}

function Main {
$installed = Get-InstalledArmakeVersion
$latest = Get-LatestArmakeVersion

if (Compare-VersionNewerThan $latest $installed) {
Write-Output "Found newer version of armake:" " Installed: $installed" " Latest: $latest"
Update-Armake ($downloadPage -f $latest)
Write-Output "Update complete, armake up-to-date."
}
}

Main

0 comments on commit 8bb8a69

Please sign in to comment.