mirror of
https://github.com/netwide-assembler/nasm
synced 2026-08-26 16:23:04 -04:00
Install NSIS via choco (not preinstalled on windows-latest), Ghostscript via choco, and the Roboto/Roboto Mono fonts (matching the exact versions Fedora's google-roboto-fonts and google-roboto-mono-fonts packages ship, dropped straight into %windir%\Fonts, which doc/findfont.ph's directory-scan fallback picks up without needing font registration). Then run 'nmake docs' (builds nasmdoc.pdf via NASM's own Perl-based doc toolchain, which needs exactly those tools -- see doc/source.src) followed by 'nmake nsis' to produce the installer via nsis/nasm.nsi, and upload it as a workflow artifact. Ghostscript is located by doc/pspdf.pl via the Windows registry keys the official installer creates, not via PATH, so no PATH setup is needed for it. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
147 lines
5.1 KiB
YAML
147 lines
5.1 KiB
YAML
name: NASM CI/CD
|
|
|
|
on:
|
|
push:
|
|
branches: [ "*" ]
|
|
pull_request:
|
|
branches: [ "*" ]
|
|
|
|
jobs:
|
|
build:
|
|
name: Build and test
|
|
runs-on: ubuntu-latest
|
|
|
|
container:
|
|
image: ubuntu:24.04
|
|
|
|
steps:
|
|
- name: Install dependencies
|
|
run: |
|
|
apt-get update && apt-get install -y automake perl python3 build-essential
|
|
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Prepare build system
|
|
run: |
|
|
sh autogen.sh
|
|
sh configure
|
|
|
|
- name: Build
|
|
run: |
|
|
make
|
|
./nasm --version
|
|
|
|
- name: Run travis tests
|
|
run: |
|
|
make travis
|
|
|
|
- name: Upload travis.log
|
|
if: always()
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: travis-log
|
|
path: travis.log
|
|
if-no-files-found: warn
|
|
|
|
build-msvc:
|
|
name: Build with MSVC (Windows)
|
|
runs-on: windows-latest
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Set up MSVC developer environment
|
|
# step-security/msvc-dev-cmd is a StepSecurity-maintained,
|
|
# actively updated (Node 24) drop-in replacement for
|
|
# ilammy/msvc-dev-cmd@v1, which is Node 20 and has no newer
|
|
# release addressing that.
|
|
uses: step-security/msvc-dev-cmd@v1
|
|
with:
|
|
arch: x64
|
|
|
|
- name: Install NSIS
|
|
# Needed to build the Windows installer (nsis/nasm.nsi) via the
|
|
# "nsis" nmake target below. Not preinstalled on windows-latest.
|
|
# choco updates the machine PATH, but that doesn't propagate to
|
|
# the already-running Actions Runner process (and thus not to
|
|
# later steps), so add makensis's directory to $GITHUB_PATH
|
|
# explicitly.
|
|
run: |
|
|
choco install nsis --no-progress -y
|
|
Get-Item "${env:ProgramFiles(x86)}\NSIS", "$env:ProgramFiles\NSIS" -ErrorAction SilentlyContinue |
|
|
Select-Object -First 1 -ExpandProperty FullName |
|
|
Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
|
|
|
- name: Install Perl CPAN modules for doc build
|
|
# doc/genps.pl's font-metrics computation needs Font::TTF, and
|
|
# the wider doc toolchain needs a handful of other non-core
|
|
# CPAN modules; see doc/perlbreq.src (generated from
|
|
# doc/source.src's requirements list by tools/genperlbreq.pl)
|
|
# for the authoritative list. windows-latest ships Strawberry
|
|
# Perl, which bundles cpanm.
|
|
shell: cmd
|
|
run: cpanm --notest Font::TTF JSON Sort::Versions Compress::Zlib Win32::TieRegistry
|
|
|
|
- name: Install Ghostscript and doc-build fonts
|
|
# nasmdoc.pdf (packaged into the installer) is built via
|
|
# doc/pspdf.pl, which shells out to Ghostscript, and
|
|
# doc/genps.pl, which needs the Roboto and Roboto Mono font
|
|
# files to compute glyph metrics (see doc/source.src, "Optional
|
|
# Build Tools"). Neither is preinstalled on windows-latest.
|
|
#
|
|
# Font versions match what Fedora's google-roboto-fonts (from
|
|
# github.com/google/roboto, release v2.138) and
|
|
# google-roboto-mono-fonts (from github.com/googlefonts/RobotoMono)
|
|
# packages ship, which is known-good: only Bold/BoldItalic/
|
|
# Italic/Regular of Roboto and Bold/Medium/Regular of Roboto
|
|
# Mono are actually used by doc/psfonts.ph. Dropping the .ttf
|
|
# files straight into %windir%\Fonts is sufficient: findfont.ph
|
|
# falls back to scanning that directory directly and identifies
|
|
# faces from each file's own name table, no font-registration
|
|
# step required.
|
|
shell: pwsh
|
|
run: |
|
|
choco install ghostscript --no-progress -y
|
|
|
|
$fontsDir = "$env:windir\Fonts"
|
|
|
|
Invoke-WebRequest -Uri "https://github.com/google/roboto/releases/download/v2.138/roboto-unhinted.zip" -OutFile roboto.zip
|
|
Expand-Archive -Path roboto.zip -DestinationPath roboto-unhinted
|
|
foreach ($f in "Regular", "Bold", "Italic", "BoldItalic") {
|
|
Copy-Item "roboto-unhinted\Roboto-$f.ttf" $fontsDir
|
|
}
|
|
|
|
foreach ($f in "Regular", "Bold", "Medium") {
|
|
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/googlefonts/RobotoMono/main/fonts/ttf/RobotoMono-$f.ttf" -OutFile "$fontsDir\RobotoMono-$f.ttf"
|
|
}
|
|
|
|
- name: Build with nmake/cl.exe
|
|
shell: cmd
|
|
run: |
|
|
nmake /f Mkfiles\msvc.mak
|
|
|
|
- name: Smoke-test the resulting binaries
|
|
shell: cmd
|
|
run: |
|
|
nasm.exe --version
|
|
ndisasm.exe --version
|
|
echo mov eax, 1 > smoke.asm
|
|
echo ret >> smoke.asm
|
|
nasm.exe -f bin smoke.asm -o smoke.bin
|
|
ndisasm.exe -b 64 smoke.bin
|
|
nasm.exe -f win64 smoke.asm -o smoke.obj
|
|
|
|
- name: Build documentation and NSIS installer
|
|
shell: cmd
|
|
run: |
|
|
nmake /f Mkfiles\msvc.mak docs
|
|
nmake /f Mkfiles\msvc.mak nsis
|
|
|
|
- name: Upload installer artifact
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: nasm-windows-installer
|
|
path: nasm-*-installer-*.exe
|
|
if-no-files-found: error
|