aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/ci-windows.yml
blob: dc3a1a081edbc64f3325ff7335447ffee4e7b372 (about) (plain) (blame)
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
name: Windows CI
on:
  pull_request:
  push:
  release:
    types:
      - published
  schedule:
    - cron: 0 0 * * 0
jobs:
  build:
    if: "!contains(github.event.head_commit.message, '[skip windows ci]')"
    runs-on: windows-2025
    env:
      BUILD_PATH: ${{ github.workspace }}/win/build
      BUILD_TYPE: ${{ github.event_name == 'release' && 'Release' || 'Debug' }}
      CONAN_FILE: ${{ github.workspace }}/win/conanfile.txt
      CONAN_HOME: ${{ github.workspace }}/win/build/conan
    steps:
      - uses: actions/checkout@v7

      - name: Setup MSVC
        uses: TheMrMilchmann/setup-msvc-dev@v4
        with:
          arch: x64

      - name: Setup NSIS
        uses: negrutiu/nsis-install@v3
        with:
          distro: official

      - name: Setup Conan
        uses: turtlebrowser/get-conan@v1.2

      - name: Create Conan configuration
        run: |-
          conan profile detect
          (Get-Content ${{ env.CONAN_HOME }}/profiles/default).replace('build_type=Release', 'build_type=${{ env.BUILD_TYPE }}') | Set-Content ${{ env.CONAN_HOME }}/profiles/default
          (Get-Content ${{ env.CONAN_HOME }}/profiles/default).replace('compiler.cppstd=14', 'compiler.cppstd=17') | Set-Content ${{ env.CONAN_HOME }}/profiles/default

          Write-Output 'core.sources:download_urls=["origin", "https://c3i.jfrog.io/artifactory/conan-center-backup-sources/"]' | Out-File -Append ${{ env.CONAN_HOME }}/global.conf
          Write-Output 'tools.cmake.cmaketoolchain:generator=Ninja' | Out-File -Append ${{ env.CONAN_HOME }}/global.conf
          Write-Output 'user.openssl:windows_use_jom=True' | Out-File -Append ${{ env.CONAN_HOME }}/global.conf

      - name: Try to restore libraries from the cache
        if: github.event_name != 'release'
        uses: actions/cache/restore@v6
        id: library-cache
        with:
          key: Conan VS${{ env.VisualStudioVersion }} ${{ env.BUILD_TYPE }} ${{ hashFiles(env.CONAN_FILE) }}
          path: ${{ env.CONAN_HOME }}/p

      - name: Install libraries
        working-directory: ${{ env.BUILD_PATH }}
        run: |-
          (Get-Content ${{ env.CONAN_FILE }}).replace('##', '') | Set-Content ${{ env.CONAN_FILE }}
          conan install ${{ env.CONAN_FILE }} --build missing --deployer runtime_deploy --deployer-folder extradll --output-folder .
          conan cache clean "*"

      - name: Save libraries to the cache
        if: steps.library-cache.outputs.cache-hit != 'true' && github.event_name != 'release'
        uses: actions/cache/save@v6
        with:
          key:  ${{ steps.library-cache.outputs.cache-primary-key }}
          path: ${{ env.CONAN_HOME }}/p

      - name: Run CMake
        working-directory: ${{ env.BUILD_PATH }}
        run: |-
          cmake -D "CMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }}" `
                -D "CMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake" `
                -G "Ninja Multi-Config" `
                -S "${{ github.workspace }}/win" `
                -Wdeprecated `
                -Wdev

      - name: Build installer
        working-directory: ${{ env.BUILD_PATH }}
        run: |-
          ninja -f "build-${{ env.BUILD_TYPE }}.ninja" ${{ runner.debug == '1' && '-v' || '' }} package

      - name: Upload installer
        if: "${{ github.event_name == 'release' }}"
        working-directory: ${{ env.BUILD_PATH }}
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |-
          gh release upload ${{ github.event.release.tag_name }} $(Get-ChildItem InspIRCd-*.exe)