build.yml 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. name: build
  2. on:
  3. push:
  4. workflow_dispatch:
  5. env:
  6. HOME: "${{github.workspace}}\\home"
  7. jobs:
  8. build:
  9. # Only set the topic `has-issrc-build-env` if the secrets are available
  10. if: contains(github.event.repository.topics, 'has-issrc-build-env')
  11. runs-on: windows-latest
  12. steps:
  13. - uses: actions/checkout@v3
  14. with:
  15. submodules: true
  16. - name: Initialize build environment
  17. env:
  18. ISSRC_BUILD_ENV_ZIP_PASSWORD: ${{ secrets.ISSRC_BUILD_ENV_ZIP_PASSWORD }}
  19. ISSRC_BUILD_ENV_ZIP_URL: ${{ secrets.ISSRC_BUILD_ENV_ZIP_URL }}
  20. run: |
  21. (New-Object Net.WebClient).DownloadFile($env:ISSRC_BUILD_ENV_ZIP_URL, "issrc-build-env.zip")
  22. & "C:\\Program Files\\7-Zip\\7z.exe" x -oissrc-build-env -p"$env:ISSRC_BUILD_ENV_ZIP_PASSWORD" issrc-build-env.zip
  23. if (!(Test-Path issrc-build-env\bin\dcc32.exe)) {
  24. Write-Host "Failed to extract dcc32.exe"
  25. Exit 1
  26. }
  27. Remove-Item issrc-build-env.zip
  28. $DELPHIXEROOT = (Get-Item .\issrc-build-env).FullName
  29. "DELPHIXEROOT=$DELPHIXEROOT" | Out-File -NoNewLine -Encoding ascii -Append "$env:GITHUB_ENV"
  30. - name: Build issrc
  31. run: |
  32. "set DELPHIXEROOT=$env:DELPHIXEROOT" | Out-File -Encoding ascii compilesettings.bat
  33. "set ISSIGTOOL_KEY_FILE=${{github.workspace}}\mykey.isprivatekey" | Out-File -NoNewline -Encoding ascii -Append compilesettings.bat
  34. "set DELPHIXEROOT=$env:DELPHIXEROOT" | Out-File -NoNewline -Encoding ascii ISHelp\ISHelpGen\compilesettings.bat
  35. "set HHCEXE=%ProgramFiles(x86)%\HTML Help Workshop\hhc.exe" | Out-File -NoNewline -Encoding ascii ISHelp\compilesettings.bat
  36. .\build.bat
  37. - name: Clean up temporary files
  38. if: always()
  39. shell: bash
  40. run: rm -rf mykey.isprivatekey
  41. - name: Copy license.txt into all artifacts
  42. run: |
  43. copy license.txt Files
  44. copy license.txt Output
  45. copy license.txt ISHelp/Staging
  46. - name: Upload Files/
  47. uses: actions/upload-artifact@v4
  48. with:
  49. name: Files
  50. path: Files/
  51. - name: Upload Output/
  52. uses: actions/upload-artifact@v4
  53. with:
  54. name: Output
  55. path: Output/
  56. - name: Upload ISHelp/
  57. uses: actions/upload-artifact@v4
  58. with:
  59. name: ISHelp
  60. path: |
  61. ISHelp/Staging/
  62. ISHelp/Staging-dark/
  63. - name: Find mt.exe
  64. if: contains(github.event.repository.topics, 'issrc-build-verify')
  65. shell: bash
  66. run: |
  67. set -x &&
  68. mt=$(ls -t /c/Program\ Files*/Windows\ Kits/10/bin/*/x64/mt.exe) &&
  69. test -n "$mt" &&
  70. echo "${mt%%/mt.exe*}" >>$GITHUB_PATH
  71. - name: Verify installer
  72. if: contains(github.event.repository.topics, 'issrc-build-verify')
  73. shell: bash
  74. run: |
  75. set -x &&
  76. ver="$(sed -n 's/^set VER=//p' <build.bat)" &&
  77. mt '-inputresource:Output\innosetup-'$ver.exe -out:innosetup-$ver.manifest &&
  78. cat innosetup-$ver.manifest &&
  79. mkdir -p Output/innosetup-$ver.exe.Local &&
  80. cp -R "$(cygpath -au "$SYSTEMROOT")"/WinSxS/x86_microsoft.windows.common-controls_* Output/innosetup-$ver.exe.Local/ &&
  81. mkdir Output/innosetup-$ver.en-US &&
  82. mkdir Output/innosetup-$ver.en &&
  83. mkdir Output/innosetup-$ver.ENU &&
  84. mkdir -p trace &&
  85. echo "$ver" >trace/ver &&
  86. curl -LO https://download.sysinternals.com/files/ProcessMonitor.zip &&
  87. unzip ProcessMonitor.zip &&
  88. # Need to start the background process via PowerShell because it would
  89. # block for some reason if started as a Bash background process.
  90. powershell -command 'start-process -NoNewWindow -FilePath .\Procmon.exe -ArgumentList "-AcceptEula -Quiet -BackingFile trace/procmon.pml -RunTime 60"' &&
  91. test $? = 0 &&
  92. ps -W &&
  93. ./Procmon.exe -AcceptEula -WaitForIdle &&
  94. ./Output/innosetup-$ver.exe //verysilent //dir=InnoSetup //noicons \
  95. //tasks= //portable=1 &&
  96. test -x InnoSetup/ISCC.exe &&
  97. ./Procmon.exe -Terminate -Quiet &&
  98. powershell -command 'start-process -NoNewWindow -Wait -FilePath .\Procmon.exe -ArgumentList "-OpenLog trace\procmon.pml -SaveAs trace\procmon.csv"'
  99. - name: Upload trace
  100. if: contains(github.event.repository.topics, 'issrc-build-verify')
  101. uses: actions/upload-artifact@v4
  102. with:
  103. name: trace
  104. path: trace/
  105. - name: Check trace
  106. if: contains(github.event.repository.topics, 'issrc-build-verify')
  107. shell: bash
  108. run: |
  109. set -x &&
  110. curdir="$(cygpath -aw Output | sed 's/\\/&&/g')" &&
  111. ver="$(sed 's/\./\\&/g' <trace/ver)" &&
  112. sed -ne '/"'$curdir'\\innosetup-'$ver'\.\(exe\|exe\.Config\|en-US\|en\|ENU\|EN\)"/d' -e '/"'$curdir'\\/p' \
  113. trace/procmon.csv >trace/filtered.csv &&
  114. if test -s trace/filtered.csv
  115. then
  116. echo ":error:Unexpected filesystem access" >&2
  117. cat trace/filtered.csv >&2
  118. exit 1
  119. fi