tidy-html5/.github/workflows/publish_linux+windows.yml
Jim Derry 3bec3ea1f1 Updated automated build tools.
- The macOS package wasn't working, so remove it from the matrix build.

- Provide a macOS dedicated build script which builds a nice DMG and notarizes
  it.

- Binaries can be added to any existing tag, thus avoiding the issue of deleting
  and recreating a tag, which is a bad thing to do. Note that existing binaries
  won't be overridden, so delete whatever's already there first if you need to
  add new binaries.
2021-07-21 13:21:54 -04:00

212 lines
7.8 KiB
YAML

################################################################################
# Build Release Packages for Major Platforms
#
# - Builds release packages on multiple operating systems.
#
# - Some packages may have to be supplemented with manually-built releases
# to account for code-signing and/or notarization requirements.
#
################################################################################
name: Publish Linux+Windows
on:
release:
types: [published]
workflow_dispatch:
inputs:
tag:
required: true
description: "Specify a ref (tag, branch, or sha) to build. If you specify a tag and a release exists, then artifacts will be attached to it."
jobs:
publish_packages:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
############################################################
# Ubuntu latest is a normal build.
# Package building requires rpm in order to generate
# .rpm packages. The runner already includes this by
# default.
############################################################
- os: ubuntu-latest
name: Standard
cmake_command: "cmake ../.. -DCMAKE_BUILD_TYPE=Release"
build_command: "cmake --build . --config Release --target package"
sha_command: "sha256sum"
stat_command: "stat"
artifacts: "tidy-%s-Linux-64bit.deb tidy-%s-Linux-64bit.rpm"
############################################################
# We won't actually build macOS, because CMake is broken.
# We have a separate build script for macOS that's better
# than CMake's results anyway.
############################################################
#- os: macOS-latest
# name: X86_64 & Arm64
# cmake_command: "cmake ../.. -DCMAKE_BUILD_TYPE=Release '-DCMAKE_OSX_ARCHITECTURES=x86_64;arm64'"
# build_command: "cmake --build . --config Release --target package"
# sha_command: "shasum -a 256"
# stat_command: "gstat"
# artifacts: "tidy-%s-macOS-x86_64+arm64.pkg"
############################################################
# The standard Windows build is using MSVC 19 as of now.
# Package building requires nsis and wixtoolset, both of
# which can be installed via choco, which is already
# installed. Note: looks like wixtoolset is already
# installed.
############################################################
- os: windows-latest
name: MSVC
cmake_command: "cmake ../.. -DCMAKE_BUILD_TYPE=Release"
build_command: "cmake --build . --config Release --target package"
sha_command: "sha256sum"
stat_command: "stat"
artifacts: "tidy-%s-win64.exe tidy-%s-win64.msi tidy-%s-win64.zip"
steps:
############################################################
# Install Windows Pre-Requisites
############################################################
- name: Install Windows Requirements
if: ${{matrix.os == 'windows-latest'}}
run: |
choco install nsis -y
############################################################
# Install macOS Pre-Requisites
############################################################
- name: Install macOS Requirements
if: ${{matrix.os == 'macOS-latest'}}
run: |
brew install coreutils
############################################################
# Checkput the repository.
############################################################
- name: Checkout Self
uses: actions/checkout@v2
############################################################
# Get the version number. The output isn't available until
# we exit this step.
############################################################
- name: Get Tidy Version
id: getversion
working-directory: ${{github.workspace}}
shell: bash
run: |
echo "::set-output name=version::$(head -1 version.txt)"
############################################################
# Print the version number, which is now available from
# the previous step.
############################################################
- name: Print Tidy Version
shell: bash
run: |
echo "Tidy version is ${{ steps.getversion.outputs.version }}."
############################################################
# Configure and Build
############################################################
- name: Configure and Build
working-directory: ${{github.workspace}}/build/cmake
shell: bash
run: |
${{matrix.cmake_command}}
${{matrix.build_command}}
############################################################
# Move Files and Make Checksums
############################################################
- name: Move Files and Make Checksums
working-directory: ${{github.workspace}}/build/cmake
shell: bash
run: |
ls -al
mkdir artifacts
array="${{matrix.artifacts}}"
for i in ${array[@]}; do
filename=$(printf "$i\n" ${{ steps.getversion.outputs.version }})
${{matrix.sha_command}} "$filename" > "artifacts/${filename}.sha256"
mv "$filename" "artifacts/"
done
############################################################
# Build Manifest Partials for binaries.html-tidy.org
############################################################
- name: Build Manifest Partials
working-directory: ${{github.workspace}}/build/cmake/artifacts
shell: bash
run: |
ls -al
manifest="../binaries-partial.yml"
touch "${manifest}"
for filename in *.*[^sha256]; do
filesize=$(numfmt --to=si --suffix=B $(wc -c < ${filename}))
modified=$(${{matrix.stat_command}} -c %y "${filename}" | cut -d'.' -f1)
modified="${modified//-//}"
sha256=$(${{matrix.sha_command}} "${filename}" | awk '{print $1}')
echo " - filename: ${filename}" >> "${manifest}"
echo " filesize: ${filesize}" >> "${manifest}"
echo " modified: ${modified}" >> "${manifest}"
echo " describe: ''" >> "${manifest}"
echo " sha256: ${sha256}" >> "${manifest}"
echo "" >> "${manifest}"
done;
cat "${manifest}"
############################################################
# Release the artifacts (existing tag specified)
############################################################
- name: Release to Existing Tag
if: ${{github.event.inputs.tag}}
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: "${{github.event.inputs.tag}}"
files: "${{github.workspace}}/build/cmake/artifacts/*"
############################################################
# Release the artifacts (done via release)
############################################################
- name: Release via Publish Release
if: ${{!github.event.inputs.tag}}
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
files: "${{github.workspace}}/build/cmake/artifacts/*"
############################################################
# Post the manifest to the run results.
############################################################
- name: Post the Manifest
uses: actions/upload-artifact@v2
with:
name: "partials_for_website-${{matrix.os}}.yml"
path: ${{github.workspace}}/build/cmake/binaries-partial.yml