summaryrefslogtreecommitdiff
path: root/appveyor.yml
blob: dccb892e9112a7b273086655ee3be245e4b364f0 (plain)
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# Our solution file is currently set up for VS2015
image: Visual Studio 2015

init:
  # Construct a version number suitable for using as a release name
  - ps: >-
      if ($env:APPVEYOR_REPO_TAG -eq "true")
      {
        $env:SLANG_VERSION = "$($env:APPVEYOR_REPO_TAG_NAME.TrimStart("v"))"
      }
      else
      {
        $env:SLANG_VERSION = "dev-$($env:APPVEYOR_REPO_COMMIT.Substring(0, 7))"
      }
      
# The project uses a submodule for the "glslang" dependency,
# so we need to make sure to pull that before building.
install:
  - git submodule update --init --recursive
  - ps: git describe --tags | %{$_ -replace "^", "#define SLANG_TAG_VERSION """ -replace "$", """"} > slang-tag-version.h 

# We want to build the full matrix of platforms and configurations
# that we support on Windows.
#
# Put Release|x64 first since that is the target which runs the most tests.
platform:
  - x64
  - Win32

configuration:
  - Release
  - Debug

# In the interests of time, go ahead and immediately fail a build
# if any job fails, rather than keep on building to discover the
# full set of failures.
matrix:
  fast_finish: true

# MSBUILD should ideally be able to find our solution file
# automatically, but it seems to get confused, so we specify
# the file name to use here.
build:
  project: slang.sln
  parallel: true
  verbosity: minimal

# Testing

# We only run tests on the Release build for now, just to speed
# up the build process.
#
# TODO: We should really define different levels of tests, and
# at least run some "smoke" tests across all builds.

test_script:
  - ps: |
      if ($env:CONFIGURATION -eq "Debug")
      {
        $testCategory = "smoke"
      }
      elseif($env:PLATFORM -eq "x64")
      {
        $testCategory = "full"
      }
      else
      {
        $testCategory = "quick"
      }
      .\test.bat -platform %PLATFORM% -configuration %CONFIGURATION% -appveyor -category $testCategory

# Package up the stuff we want to deploy into a single .zip file

after_build:
  - ps: |
      if ($env:PLATFORM -eq "x64")
      {
        $env:SLANG_DEPLOY_PLATFORM = "win64"
      }
      else
      {
        $env:SLANG_DEPLOY_PLATFORM = "win32"
      }
      $env:SLANG_BINARY_ARCHIVE = "slang-$($env:SLANG_VERSION)-$($env:SLANG_DEPLOY_PLATFORM).zip"

      7z a "$env:SLANG_BINARY_ARCHIVE" slang.h
      7z a "$env:SLANG_BINARY_ARCHIVE" slang-com-helper.h
      7z a "$env:SLANG_BINARY_ARCHIVE" slang-com-ptr.h
      7z a "$env:SLANG_BINARY_ARCHIVE" slang-tag-version.h
      7z a "$env:SLANG_BINARY_ARCHIVE" prelude\*.h
      7z a "$env:SLANG_BINARY_ARCHIVE" bin\*\*\slang.dll
      7z a "$env:SLANG_BINARY_ARCHIVE" bin\*\*\slang.lib
      7z a "$env:SLANG_BINARY_ARCHIVE" bin\*\*\slang-glslang.dll
      7z a "$env:SLANG_BINARY_ARCHIVE" bin\*\*\slangc.exe
      7z a "$env:SLANG_BINARY_ARCHIVE" docs\*.md

      $env:SLANG_SOURCE_ARCHIVE = "slang-$($env:SLANG_VERSION)-source.zip"
      
      7z a "$env:SLANG_SOURCE_ARCHIVE" slang.h
      7z a "$env:SLANG_SOURCE_ARCHIVE" slang-com-helper.h
      7z a "$env:SLANG_SOURCE_ARCHIVE" slang-com-ptr.h
      7z a "$env:SLANG_SOURCE_ARCHIVE" slang-tag-version.h
      7z a "$env:SLANG_SOURCE_ARCHIVE" prelude\*.h
      7z a "$env:SLANG_SOURCE_ARCHIVE" source\*\*.h
      7z a "$env:SLANG_SOURCE_ARCHIVE" source\*\*.cpp
      7z a "$env:SLANG_SOURCE_ARCHIVE" docs\*.md
      7z a "$env:SLANG_SOURCE_ARCHIVE" README.md
      7z a "$env:SLANG_SOURCE_ARCHIVE" LICENSE

# Register the created .zip file as an artifact with AppVeyor

artifacts:
  - path: $(SLANG_BINARY_ARCHIVE)
    name: binary_archive
  - path: $(SLANG_SOURCE_ARCHIVE)
    name: source_archive

# On a successful build of a tag, push archices to GitHub releases

deploy:
  release: v$(SLANG_VERSION)
  description: 'Slang $(SLANG_VERSION)'
  provider: GitHub
  auth_token:
    secure: +FukP7TA9F+fofZRZnu2FSqPcrQ1u4r8r4pl+/83owiY6M1R4ykg+8RcSzXi2f63
  artifact: 'binary_archive,source_archive'
  draft: false
  prerelease: false
  force_update: false
  on:
    configuration: Release
    appveyor_repo_tag: true        # deploy on tag push only