summaryrefslogtreecommitdiff
path: root/azure-pipelines/templates/release.yml
blob: 7628d3c91ed77839bd1231c3b7ce22111006c3a2 (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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
parameters:
  # If this is false, not all targets are triggered. For example:
  # The NSIS installer for Windows and the creation of debs only work for
  # releases. Not for any other type of binary. So they are skilled if this
  # is set to false.
  IsStableRelease: false

jobs:
- job: source
  displayName: 'Source'
  pool:
    vmImage: 'ubuntu-16.04'

  steps:
  - template: release-prepare-source.yml
  - script: |
      set -ex

      # Rename the folder to openttd-NNN-source
      mkdir openttd-$(Build.BuildNumber)
      find . -maxdepth 1 -not -name . -not -name openttd-$(Build.BuildNumber) -exec mv {} openttd-$(Build.BuildNumber)/ \;
      # Copy back release_date, as it is needed for the template 'release-bundles'
      cp openttd-$(Build.BuildNumber)/.release_date .release_date

      mkdir bundles
      tar --xz -cf bundles/openttd-$(Build.BuildNumber)-source.tar.xz openttd-$(Build.BuildNumber)
      zip -9 -r -q bundles/openttd-$(Build.BuildNumber)-source.zip openttd-$(Build.BuildNumber)
    displayName: 'Create bundle'
  - template: release-bundles.yml

- job: meta
  displayName: 'Metadata'
  pool:
    vmImage: 'ubuntu-16.04'
  dependsOn: source

  steps:
  - template: release-fetch-source.yml
  - script: |
      set -ex

      mkdir -p bundles
      cp .changelog bundles/changelog.txt
      cp .release_date bundles/released.txt
      cp README.md bundles/README.md
    displayName: 'Copy meta files'
  - template: release-bundles.yml
    parameters:
      CalculateChecksums: false

- job: docs
  displayName: 'Docs'
  pool:
    vmImage: 'ubuntu-16.04'
  dependsOn: source

  steps:
    - template: release-fetch-source.yml
    - template: linux-build.yml
      parameters:
        Image: compile-farm
        ContainerCommand: '$(Build.BuildNumber)'
        Tag: docs
    - template: linux-claim-bundles.yml
    - template: release-bundles.yml

- job: windows
  displayName: 'Windows'
  pool:
    vmImage: 'VS2017-Win2016'
  dependsOn: source

  strategy:
    matrix:
      Win32:
        BuildPlatform: 'Win32'
        BundlePlatform: 'win32'
      Win64:
        BuildPlatform: 'x64'
        BundlePlatform: 'win64'

  steps:
  - template: release-fetch-source.yml
  - template: windows-dependencies.yml
  - template: windows-dependency-zip.yml
  - ${{ if eq(parameters.IsStableRelease, true) }}:
    - template: windows-dependency-nsis.yml
  - template: windows-build.yml
    parameters:
      BuildPlatform: $(BuildPlatform)
  - bash: |
      set -ex
      make -f Makefile.msvc bundle_pdb bundle_zip PLATFORM=$(BundlePlatform) BUNDLE_NAME=openttd-$(Build.BuildNumber)-windows-$(BundlePlatform)
    displayName: 'Create bundles'
  - ${{ if eq(parameters.IsStableRelease, true) }}:
    - bash: |
        set -ex
        # NSIS will be part of the Hosted image in the next update. Till then, we set the PATH ourself
        export PATH="${PATH}:/c/Program Files (x86)/NSIS"
        make -f Makefile.msvc bundle_exe PLATFORM=$(BundlePlatform) BUNDLE_NAME=openttd-$(Build.BuildNumber)-windows-$(BundlePlatform)
      displayName: 'Create installer bundle'
  - template: release-bundles.yml

- ${{ if eq(parameters.IsStableRelease, true) }}:
  - job: linux_stable
    displayName: 'Linux'
    pool:
      vmImage: 'ubuntu-16.04'
    dependsOn: source

    strategy:
      matrix:
        linux-ubuntu-xenial-i386-gcc: {}
        linux-ubuntu-xenial-amd64-gcc: {}
        linux-ubuntu-bionic-i386-gcc: {}
        linux-ubuntu-bionic-amd64-gcc: {}
        linux-debian-jessie-i386-gcc: {}
        linux-debian-jessie-amd64-gcc: {}
        linux-debian-stretch-i386-gcc: {}
        linux-debian-stretch-amd64-gcc: {}

    steps:
    - template: release-fetch-source.yml
    - template: linux-build.yml
      parameters:
        Image: compile-farm
        ContainerCommand: '$(Build.BuildNumber)'
        Tag: $(Agent.JobName)
    - template: linux-claim-bundles.yml
    - template: release-bundles.yml

- job: macos
  displayName: 'MacOS'
  pool:
    vmImage: 'macOS-10.13'
  dependsOn: source

  variables:
    MACOSX_DEPLOYMENT_TARGET: 10.9

  steps:
  - template: release-fetch-source.yml
  - template: osx-dependencies.yml
  - template: osx-build.yml
  - script: 'make bundle_zip bundle_dmg BUNDLE_NAME=openttd-$(Build.BuildNumber)-macosx'
    displayName: 'Create bundles'
  - template: release-bundles.yml

- job: manifest
  displayName: 'Manifest'
  pool:
    vmImage: 'ubuntu-16.04'
  dependsOn:
  - source
  - docs
  - windows
  - ${{ if eq(parameters.IsStableRelease, true) }}:
    - linux_stable
  - macos
  # "Skipped" is not a status, and is not succeeded. So it seems to be
  # considered failed. So we trigger if all the earlier jobs are done (which
  # might be succeeded, failed, or skipped), and run this job. This is not
  # optimal, but given the rules, it is the only way to get this to work (as
  # some jobs might be skipped).
  condition: succeededOrFailed()

  steps:
  - template: release-fetch-source.yml
  - template: release-manifest.yml
    ${{ if eq(parameters.IsStableRelease, true) }}:
      parameters:
        IsStableRelease: true
  - template: release-bundles.yml
    parameters:
      CalculateChecksums: false