📕 Make Book #612
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: 📕 Make Book | |
on: | |
push: | |
schedule: | |
- cron: "0 0 * * 1" # every monday | |
workflow_dispatch: | |
inputs: | |
draft-release: | |
description: 'Draft an actual release (instead of creating a pre-release)' | |
type: boolean | |
required: false | |
default: false | |
squeak-versions: | |
description: 'List of Squeak versions to test (JSON array)' | |
type: string | |
required: false | |
default: '["Trunk", "6.0"]' | |
scale-factor: | |
description: 'Scale factor for screenshots' | |
type: number | |
required: false | |
default: '2.5' | |
# not yet implemented: https://gh.neting.ccmunity/t/how-to-set-and-access-a-workflow-variable/17335/6?u=linqlover | |
# --- | |
#env: | |
# os: ubuntu-latest | |
# fail-fast: false | |
# smalltalks: "[Trunk, '6.0']" | |
#--- | |
jobs: | |
args: | |
name: 📦 Prepare arguments | |
runs-on: ubuntu-latest | |
outputs: | |
draft-release: ${{ steps.prepare.outputs.draft-release }} | |
squeak-versions: ${{ steps.prepare.outputs.squeak-versions }} | |
scale-factor: ${{ steps.prepare.outputs.scale-factor }} | |
steps: | |
- name: Prepare | |
id: prepare | |
run: | | |
echo "draft-release=${{ inputs.draft-release && true || false }}" >> $GITHUB_OUTPUT | |
echo 'squeak-versions<<EOF | |
${{ toJson(fromJson(inputs.squeak-versions || '["Trunk", "6.0"]')) }} | |
EOF' >> $GITHUB_OUTPUT | |
echo "scale-factor=${{ inputs.scale-factor || '2.5' }}" >> $GITHUB_OUTPUT | |
tests: | |
name: 🐞 Internal tests [${{ matrix.smalltalk }}] | |
needs: [args] | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
smalltalk: ${{ fromJson(needs.args.outputs.squeak-versions) }} | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: hpi-swa/setup-smalltalkCI@v1 | |
with: | |
smalltalk-image: Squeak64-${{ matrix.smalltalk }} | |
- name: Run SmalltalkSources tests | |
run: smalltalkci -s Squeak64-${{ matrix.smalltalk }} SBE-Tests.smalltalk.ston | |
timeout-minutes: 15 | |
env: | |
GITHUB_TOKEN: ${{ github.token }} # for coverage reports | |
tex-assertions: | |
name: 🧪 @TEST assertions [${{ matrix.smalltalk }}] | |
needs: [args] | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
smalltalk: ${{ fromJson(needs.args.outputs.squeak-versions) }} | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: hpi-swa/setup-smalltalkCI@v1 | |
with: | |
smalltalk-image: Squeak64-${{ matrix.smalltalk }} | |
- name: Run TEX assertions | |
run: smalltalkci -s Squeak64-${{ matrix.smalltalk }} SBE-Testing.smalltalk.ston | |
timeout-minutes: 15 | |
listings: | |
name: 📄 Collect listings from SmalltalkSources | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- run: make listings | |
- name: 💾 Store listings | |
uses: actions/upload-artifact@master | |
with: | |
name: listings | |
path: ListingSources | |
build: | |
name: 📖 Build book [${{ matrix.smalltalk }}] | |
needs: [args, listings] | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
smalltalk: ${{ fromJson(needs.args.outputs.squeak-versions) }} | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: hpi-swa/setup-smalltalkCI@v1 | |
with: | |
smalltalk-image: Squeak64-${{ matrix.smalltalk }} | |
- id: figures | |
name: 🖼 Build Squeak figures | |
run: smalltalkci -s Squeak64-${{ matrix.smalltalk }} SBE-Extract.smalltalk.ston | |
timeout-minutes: 30 | |
continue-on-error: true | |
env: | |
SBE_SCALE_FACTOR: ${{ needs.args.outputs.scale-factor }} | |
- if: (steps.figures.outcome == 'failure') | |
name: Configure DEBUG_FIGURES | |
run: | | |
echo ::warning::jobs.figures has failed, compiling PDF with missing figures | |
echo "DEBUG_FIGURES=true" >> $GITHUB_ENV | |
- name: Load listings | |
uses: actions/download-artifact@master | |
with: | |
name: listings | |
path: ListingSources | |
- name: ⚙ Compile PDF | |
uses: xu-cheng/texlive-action/full@v1 | |
with: | |
run: | | |
apk add make | |
make | |
env: | |
SQUEAK_VERSION: ${{ matrix.smalltalk }} | |
BASH_V5: true | |
- name: Rename PDF | |
run: mv SBE.pdf SBE-${{ matrix.smalltalk }}.pdf | |
env: | |
SQUEAK_VERSION: ${{ matrix.smalltalk }} | |
- name: 💾 Upload artifact | |
uses: actions/upload-artifact@master | |
with: | |
name: book-${{ matrix.smalltalk }} | |
path: SBE-${{ matrix.smalltalk }}.pdf | |
- if: (steps.figures.outcome == 'failure') | |
name: Check DEBUG_FIGURES | |
run: | | |
echo ::error::jobs.figures has failed, so the compiled PDF might miss some figures! | |
echo "DEBUG_FIGURES=true" >> $GITHUB_ENV | |
exit 1 | |
release: | |
name: Create release | |
needs: [args, tests, tex-assertions, build] | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Load artifacts | |
uses: actions/download-artifact@master | |
with: | |
path: . | |
- uses: thedoctor0/zip-release@master | |
with: | |
filename: ListingSources.zip | |
path: listings | |
- uses: benjlevesque/short-sha@v1.2 | |
id: short-sha | |
- name: 📣 ${{ fromJson(needs.args.outputs.draft-release) && 'Draft release' || 'Create pre-release' }} | |
id: create_release | |
uses: softprops/action-gh-release@v1 | |
with: | |
tag_name: untagged-${{ steps.short-sha.outputs.sha }} | |
body: ${{ github.event.head_commit.message }} | |
files: | | |
book-*/SBE-*.pdf | |
ListingSources.zip | |
prerelease: ${{ !fromJson(needs.args.outputs.draft-release) }} | |
draft: ${{ fromJson(needs.args.outputs.draft-release) }} | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
- name: Delete older pre-releases | |
uses: dev-drprasad/delete-older-releases@v0.2.0 | |
if: ${{ !fromJson(needs.args.outputs.draft-release) }} | |
with: | |
delete_tag_pattern: untagged- | |
keep_latest: 1 | |
delete_tags: true | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
notify: | |
name: 📣 Notify community on failure | |
needs: [tests, tex-assertions, build] | |
if: always() | |
runs-on: ubuntu-latest | |
steps: | |
- if: | | |
github.event_name == 'schedule' && ( | |
needs.tests.result == 'failure' | |
|| needs.build.result == 'failure' | |
|| needs.tex-assertions.result == 'failure') | |
uses: rtCamp/action-slack-notify@v2 | |
env: | |
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} | |
SLACK_USERNAME: "GitHub Actions" | |
SLACK_COLOR: danger | |
SLACK_ICON: https://avatars1.githubusercontent.com/u/65916846?v=4 | |
SLACK_TITLE: "Build failed!" | |
SLACK_MESSAGE: "Oh no, the latest scheduled CI build for SqueakByExample failed! 😱" |