make.yml 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. ---
  2. name: Make
  3. on:
  4. schedule:
  5. - cron: '0 0 1 * *'
  6. push:
  7. branches:
  8. - "**"
  9. pull_request:
  10. branches:
  11. - master
  12. - main
  13. concurrency:
  14. group: ${{ github.workflow }}-${{ github.ref }}
  15. cancel-in-progress: true
  16. jobs:
  17. build:
  18. runs-on: ${{ matrix.os }}
  19. timeout-minutes: 120
  20. strategy:
  21. matrix:
  22. os:
  23. - ubuntu-latest
  24. - windows-latest
  25. - macos-latest
  26. steps:
  27. - name: Checkout
  28. uses: actions/checkout@v4
  29. with:
  30. submodules: true
  31. - name: Build on Linux
  32. if: runner.os == 'Linux'
  33. shell: bash
  34. run: |
  35. set -xeuo pipefail
  36. sudo bash -c 'apt-get update; apt-get install -y lazarus cppcheck pylint shellcheck' >/dev/null
  37. declare -rx INSTANTFPCOPTIONS=-Fu/usr/lib/lazarus/*/components/lazutils
  38. instantfpc '.github/workflows/make.pas' build
  39. - name: Build
  40. if: runner.os == 'Macos'
  41. shell: python
  42. run: |
  43. """https://macappstore.org/lazarus"""
  44. import os
  45. import sys
  46. import subprocess
  47. subprocess.run(
  48. "openssl version -d".split(),
  49. check=True,
  50. capture_output=True,
  51. )
  52. OPENSSL=subprocess.run(
  53. "brew --prefix [email protected]".split(),
  54. check=True,
  55. capture_output=True,
  56. ).stdout.decode().strip("\n")
  57. os.environ["PATH"] += f":{OPENSSL}/bin"
  58. os.environ["DYLD_LIBRARY_PATH"] = f"{OPENSSL}/lib"
  59. subprocess.run(
  60. "brew install --cask lazarus".split(),
  61. check=True,
  62. capture_output=True,
  63. )
  64. os.environ["INSTANTFPCOPTIONS"] = "-Fu/Applications/Lazarus/components/lazutils"
  65. os.environ["PATH"] += ":/Applications/Lazarus"
  66. subprocess.run(
  67. "lazbuild -v".split(),
  68. check=True,
  69. capture_output=True,
  70. )
  71. os.environ["INSTANTFPCOPTIONS"] = "-Fu/Applications/Lazarus/components/lazutils"
  72. sys.exit(subprocess.run(
  73. "instantfpc .github/workflows/make.pas build".split(),
  74. ).returncode)
  75. - name: Build on Windows
  76. if: runner.os == 'Windows'
  77. shell: powershell
  78. run: |
  79. New-Variable -Option Constant -Name VAR -Value @{
  80. Uri = 'http://consume.o2switch.net/lazarus/lazarus-4.0-fpc-3.2.2-win64.exe'
  81. OutFile = (New-TemporaryFile).FullName + '.exe'
  82. }
  83. Invoke-WebRequest @VAR
  84. & $VAR.OutFile.Replace('Temp', 'Temp\.') /SP- /VERYSILENT /SUPPRESSMSGBOXES /NORESTART | Out-Null
  85. $Env:PATH+=';C:\Lazarus'
  86. $Env:PATH+=';C:\Lazarus\fpc\3.2.2\bin\x86_64-win64'
  87. (Get-Command 'lazbuild').Source | Out-Host
  88. (Get-Command 'instantfpc').Source | Out-Host
  89. $Env:INSTANTFPCOPTIONS='-FuC:\Lazarus\components\lazutils'
  90. instantfpc '.github\workflows\make.pas' build