Merge pull request #560 from ndw/iss-558 #236
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build DocBook xslTNG | |
on: push | |
jobs: | |
check_branch: | |
runs-on: ubuntu-latest | |
outputs: | |
branch: ${{ steps.check_step.outputs.branch }} | |
reponame: ${{ steps.check_step.outputs.reponame }} | |
tag: ${{ steps.check_step.outputs.tag }} | |
guideversion: ${{ steps.check_step.outputs.guideversion }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Get branch name, etc. | |
id: check_step | |
run: | | |
raw=${{ github.repository }} | |
reponame=${raw##*/} | |
echo "reponame=$reponame" >> $GITHUB_OUTPUT | |
raw=$(git branch -r --contains ${{ github.ref }}) | |
branch=${raw##*/} | |
echo "branch=$branch" >> $GITHUB_OUTPUT | |
tag="" | |
if [ ${{ github.ref_type }} = "tag" ]; then | |
tag=${{ github.ref_name }} | |
echo "Running in $reponame on $branch for $tag" | |
else | |
echo "Running in $reponame on $branch" | |
fi | |
echo "tag=$tag" >> $GITHUB_OUTPUT | |
raw=`cat properties.gradle | grep guideVersion | sed "s#[ '\"]##g"` | |
guideversion=${raw##*=} | |
echo "guideversion=${raw##*=}" >> $GITHUB_OUTPUT | |
build-and-deploy: | |
name: Build xslTNG on ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
needs: check_branch | |
env: | |
HAVE_ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN != '' }} | |
HAVE_GPGKEYURI: ${{ secrets.ACCESS_TOKEN != '' && secrets.GPGKEYURI != '' }} | |
HAVE_SAXON_EE: ${{ secrets.SAXON_PASSPHRASE != '' }} | |
CIWORKFLOW: yes | |
CI_SHA1: ${{ github.sha }} | |
CI_BUILD_NUM: ${{ github.run_number }} | |
CI_PROJECT_USERNAME: ${{ github.repository_owner }} | |
CI_PROJECT_REPONAME: ${{ needs.check_branch.outputs.reponame }} | |
CI_BRANCH: ${{ needs.check_branch.outputs.branch }} | |
CI_TAG: ${{ needs.check_branch.outputs.tag }} | |
GUIDE_VERSION: ${{ needs.check_branch.outputs.guideversion }} | |
strategy: | |
matrix: | |
os: [ubuntu-20.04] | |
steps: | |
- name: Report guide version | |
run: | | |
echo "Building guide version ::${GUIDE_VERSION}::" | |
- name: Install platform-independent Python modules | |
run: | | |
python3 -m pip install pygments==2.14.0 click cython python-dateutil | |
# Test the build on Mac | |
- name: Install dependencies on Mac | |
if: matrix.os == 'macos-11' | |
run: | | |
brew install rsync libxml2 libxslt sass/sass/sass | |
python3 -m pip install saxonche | |
python3 -m pip install --no-binary lxml html5-parser | |
- name: Checkout the main branch on Mac | |
if: matrix.os == 'macos-11' | |
uses: actions/checkout@v4 | |
- name: Get the latest releases (authenticated request on mac) | |
if: ${{ matrix.os == 'macos-11' && env.HAVE_ACCESS_TOKEN == 'true' }} | |
run: | | |
mkdir -p build | |
# Don’t attempt to use continuation lines here because Windows | |
curl --request GET --url https://api.github.com/repos/${{ github.repository }}/releases --header 'authorization: Bearer ${{ secrets.ACCESS_TOKEN }}' -o build/releases.json | |
- name: Build on Mac | |
if: matrix.os == 'macos-11' | |
run: | | |
ls build | |
./gradlew --stacktrace -PrequireCompileSuccess=true dist | |
# Test the build on Windows | |
- name: Install dependencies on Windows | |
if: matrix.os == 'windows-2019' | |
uses: crazy-max/ghaction-chocolatey@v3 | |
with: | |
args: install sass | |
- name: Checkout the main branch on Windows | |
if: matrix.os == 'windows-2019' | |
uses: actions/checkout@v4 | |
- name: Get the latest releases (authenticated request on Windows) | |
if: ${{ matrix.os == 'windows-2019' && env.HAVE_ACCESS_TOKEN == 'true' }} | |
run: | | |
mkdir -p build | |
# Don’t attempt to use continuation lines here because Windows | |
curl --request GET --url https://api.github.com/repos/${{ github.repository }}/releases --header 'authorization: Bearer ${{ secrets.ACCESS_TOKEN }}' -o build/releases.json | |
- name: Build on Windows | |
if: matrix.os == 'windows-2019' | |
env: | |
JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 | |
run: | | |
./gradlew --stacktrace -PrequireCompileSuccess=true -PrequireTestSuccess=false dist | |
# Test the build on Linux | |
- name: Install dependencies on Linux | |
if: matrix.os == 'ubuntu-20.04' | |
run: | | |
sudo apt-get update | |
sudo apt-get install epubcheck rsync libxml2-dev libxslt-dev | |
curl -o /tmp/dart.tar.gz -L https://github.com/sass/dart-sass/releases/download/1.56.0/dart-sass-1.56.0-linux-x64.tar.gz | |
cd /tmp && tar zxf dart.tar.gz && sudo mv dart-sass/sass /usr/local/bin | |
python3 -m pip install saxonche | |
python3 -m pip install --no-binary lxml html5-parser | |
- name: Checkout the gh-pages branch on Linux | |
if: matrix.os == 'ubuntu-20.04' | |
uses: actions/checkout@v4 | |
with: | |
ref: 'gh-pages' | |
- name: Save EPUB and PDFs | |
if: matrix.os == 'ubuntu-20.04' | |
run: tar cf - epub pdf | gzip > /tmp/save-epub-pdf.tar.gz | |
- name: Save the current version(s) of the guide | |
if: matrix.os == 'ubuntu-20.04' | |
run: | | |
mkdir /tmp/guide | |
rsync -ar guide/ /tmp/guide/ | |
rm -rf /tmp/guide/$GUIDE_VERSION | |
- name: Checkout the main branch on Linux | |
if: matrix.os == 'ubuntu-20.04' | |
uses: actions/checkout@v4 | |
- name: Setup SaxonEE on Linux | |
if: ${{ matrix.os == 'ubuntu-20.04' && env.HAVE_SAXON_EE == 'true' }} | |
run: gpg --batch --yes --passphrase ${{ secrets.SAXON_PASSPHRASE }} -d tools/saxon.enc | tar zxf - | |
- name: Get the latest releases (authenticated request on Windows) | |
if: ${{ matrix.os == 'ubuntu-20.04' && env.HAVE_ACCESS_TOKEN == 'true' }} | |
run: | | |
mkdir -p build | |
# Don’t attempt to use continuation lines here because Windows | |
curl --request GET --url https://api.github.com/repos/${{ github.repository }}/releases --header 'authorization: Bearer ${{ secrets.ACCESS_TOKEN }}' -o build/releases.json | |
- name: Build on Linux | |
if: matrix.os == 'ubuntu-20.04' | |
run: | | |
./gradlew --stacktrace -PrequireCompileSuccess=true dist | |
- name: Cleanup SaxonEE | |
if: ${{ matrix.os == 'ubuntu-20.04' && env.HAVE_SAXON_EE == 'true' }} | |
run: rm -rf lib | |
- name: Restore EPUB and PDFs | |
if: matrix.os == 'ubuntu-20.04' | |
run: cd build/website && tar zxf /tmp/save-epub-pdf.tar.gz | |
- name: Restore previous version(s) of the guide | |
if: matrix.os == 'ubuntu-20.04' | |
run: | | |
rsync -ar --exclude index.html /tmp/guide/ build/website/guide/ | |
if [ ! -f build/website/guide/index.html ]; then \ | |
mv /tmp/guide/index.html build/website/guide/; \ | |
fi | |
- name: Deploy main to gh-pages | |
if: ${{ matrix.os == 'ubuntu-20.04' && env.HAVE_ACCESS_TOKEN == 'true' && env.CI_BRANCH == 'main' }} | |
uses: JamesIves/[email protected] | |
with: | |
folder: build/website | |
token: ${{ secrets.ACCESS_TOKEN }} | |
branch: gh-pages | |
target-folder: / | |
- name: Deploy tagged release to CDN as ${{ env.CI_TAG }} | |
if: ${{ matrix.os == 'ubuntu-20.04' && env.HAVE_ACCESS_TOKEN == 'true' && env.CI_BRANCH == 'main' && env.CI_TAG != '' }} | |
uses: JamesIves/[email protected] | |
with: | |
folder: build/release | |
token: ${{ secrets.ACCESS_TOKEN }} | |
repository-name: ${{ github.repository_owner}}/cdn | |
branch: master | |
target-folder: /release/xsltng/${{ env.CI_TAG }} | |
- name: Deploy tagged release to CDN as current | |
if: ${{ matrix.os == 'ubuntu-20.04' && env.HAVE_ACCESS_TOKEN == 'true' && env.CI_BRANCH == 'main' && env.CI_TAG != '' }} | |
uses: JamesIves/[email protected] | |
with: | |
folder: build/release | |
token: ${{ secrets.ACCESS_TOKEN }} | |
repository-name: ${{ github.repository_owner}}/cdn | |
branch: master | |
target-folder: /release/xsltng/current | |
- name: Publish release | |
uses: softprops/action-gh-release@v2 | |
if: ${{ matrix.os == 'ubuntu-20.04' && env.HAVE_ACCESS_TOKEN == 'true' && env.CI_BRANCH == 'main' && env.CI_TAG != '' }} | |
with: | |
draft: false | |
prerelease: false | |
fail_on_unmatched_files: true | |
files: | | |
build/distributions/docbook-xslTNG-${{ env.CI_TAG }}.zip | |
build/distributions/docbook-xslTNG-nosaxon-${{ env.CI_TAG }}.zip | |
- name: Publish to Sonatype | |
if: ${{ matrix.os == 'ubuntu-20.04' && env.HAVE_GPGKEYURI == 'true' && env.CI_BRANCH == 'main' && env.CI_TAG != '' }} | |
run: | | |
curl -s -o secret.gpg ${{ secrets.GPGKEYURI }} | |
./gradlew -PsonatypeUsername=${{ secrets.SONATYPEUSER }} \ | |
-PsonatypePassword="${{ secrets.SONATYPEPASS }}" \ | |
-Psigning.keyId="${{ secrets.SIGNKEY }}" \ | |
-Psigning.password="${{ secrets.SIGNPSW }}" \ | |
-Psigning.secretKeyRingFile=./secret.gpg \ | |
publish | |
rm -f secret.gpg | |
- name: Checkout the CDN | |
uses: actions/checkout@v4 | |
if: ${{ matrix.os == 'ubuntu-20.04' && env.HAVE_ACCESS_TOKEN == 'true' && env.CI_BRANCH == 'main' && env.CI_TAG != '' }} | |
with: | |
repository: ${{ github.repository_owner}}/cdn | |
token: ${{ secrets.ACCESS_TOKEN }} | |
fetch-depth: 0 | |
ref: 'master' | |
- name: Rebuild the CDN indexes | |
if: ${{ matrix.os == 'ubuntu-20.04' && env.HAVE_ACCESS_TOKEN == 'true' && env.CI_BRANCH == 'main' && env.CI_TAG != '' }} | |
run: bin/git-index-html | |
- name: Deploy the indexes back to the CDN | |
uses: JamesIves/[email protected] | |
if: ${{ matrix.os == 'ubuntu-20.04' && env.HAVE_ACCESS_TOKEN == 'true' && env.CI_BRANCH == 'main' && env.CI_TAG != '' }} | |
with: | |
folder: . | |
token: ${{ secrets.ACCESS_TOKEN }} | |
repository-name: ${{ github.repository_owner}}/cdn | |
branch: master | |
target-folder: / |