From e11fba438dc128a191e5729c0fb4cd80e240cf72 Mon Sep 17 00:00:00 2001 From: Rafael Sene Date: Wed, 2 Aug 2023 18:05:17 -0300 Subject: [PATCH] Upgrade GH Actions to build using the containerized solution Signed-off-by: Rafael Sene --- .github/workflows/build-pdf.yml | 125 ++++++++++++++------------------ Makefile | 68 ++++++++++++++--- 2 files changed, 111 insertions(+), 82 deletions(-) diff --git a/.github/workflows/build-pdf.yml b/.github/workflows/build-pdf.yml index 9db86b9..9a66d98 100644 --- a/.github/workflows/build-pdf.yml +++ b/.github/workflows/build-pdf.yml @@ -1,88 +1,73 @@ -# This workflow installs dependencies for PDF generation, generates the PDF, -# and uploads the PDF as an artifact. - -name: Build Document PDF +name: Create Specification Document +# The workflow is triggered by pull request, push to main, and manual dispatch. on: - push: - branches: - - main - pull_request: - branches: - - main workflow_dispatch: inputs: + version: + description: 'Release version, e.g. X.Y.Z:' + required: true + type: string + revision_mark: + description: 'Set revision mark as Draft, Release or Stable:' + required: true + type: string + default: 'Draft' prerelease: - description: 'Generate a pre-release.' - required: false + description: 'Tag as a pre-release?' + required: false + type: boolean + default: true + draft: + description: 'Create release as a draft?' + required: false type: boolean + default: false + pull_request: + push: + branches: + - main jobs: build: runs-on: ubuntu-latest - env: - APT_PACKAGES_FILE: ${{ github.workspace }}/dependencies/apt_packages.txt - BUNDLE_GEMFILE: ${{ github.workspace }}/dependencies/Gemfile - BUNDLE_BIN: ${{ github.workspace }}/bin - NPM_PACKAGE_FOLDER: ${{ github.workspace }}/dependencies steps: + # Step 1: Checkout the repository - name: Checkout repository - uses: actions/checkout@v2 - with: - submodules: 'true' - - name: Install Ubuntu packages - run: | - sudo apt-get update - grep -vE '^#' ${APT_PACKAGES_FILE} | xargs sudo apt-get install --yes --no-install-recommends - # Ruby for asciidoctor - - name: Setup Ruby and Gemfile content - uses: ruby/setup-ruby@v1 - with: - ruby-version: "3.0" - bundler-cache: true - # Node.js for wavedrom - - uses: actions/cache@v2 + uses: actions/checkout@v3 with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - - name: Setup Node.js - uses: actions/setup-node@v2 - with: - node-version: '14' - - name: Install Node.js dependencies - run: npm install ${NPM_PACKAGE_FOLDER} - - name: Generate PDF - run: | - PATH=${PATH}:${BUNDLE_BIN}:$(npm bin) \ - make - - name: Archive PDF result - uses: actions/upload-artifact@v2 + submodules: 'recursive' + + # Step 2: Pull the latest RISC-V Docs container image + - name: Pull Container + run: docker pull riscvintl/riscv-docs-base-container-image:latest + + # Step 3: Build Files + - name: Build Files + run: make + env: + VERSION: v${{ github.event.inputs.version }} + REVMARK: ${{ github.event.inputs.revision_mark }} + + # Step 4: Upload the built PDF files as a single artifact + - name: Upload Build Artifacts + uses: actions/upload-artifact@v3 with: - name: example-spec.pdf - path: example-spec.pdf - retention-days: 7 + name: Build Artifacts + path: ${{ github.workspace }}/*.pdf + retention-days: 30 + + # Create Release - name: Create Release - id: create_release - if: ${{ github.event.inputs.prerelease }} - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + uses: softprops/action-gh-release@v1 with: - tag_name: ${{ github.ref_name }} - release_name: Release ${{ github.ref_name }} - draft: false - prerelease: true - - name: Upload Release Asset - id: upload-release-asset - if: ${{ github.event.inputs.prerelease }} - uses: actions/upload-release-asset@v1 + files: ${{ github.workspace }}/*.pdf + tag_name: v${{ github.event.inputs.version }} + name: Release ${{ github.event.inputs.version }} + draft: ${{ github.event.inputs.draft }} + prerelease: ${{ github.event.inputs.prerelease }} env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: ./example-spec.pdf - asset_name: example-spec.pdf - asset_content_type: application/pdf + GITHUB_TOKEN: ${{ secrets.GHTOKEN }} + if: github.event_name == 'workflow_dispatch' + # This condition ensures this step only runs for workflow_dispatch events. \ No newline at end of file diff --git a/Makefile b/Makefile index 2de3208..1cf3e95 100644 --- a/Makefile +++ b/Makefile @@ -1,21 +1,65 @@ +# Makefile for RISC-V Doc Template +# +# This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 +# International License. To view a copy of this license, visit +# http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to +# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +# +# SPDX-License-Identifier: CC-BY-SA-4.0 +# +# Description: +# +# This Makefile is designed to automate the process of building and packaging +# the Doc Template for RISC-V Extensions. + +DATE ?= $(shell date +%Y-%m-%d) +VERSION ?= v0.0.0 +REVMARK ?= Draft +DOCKER_RUN := docker run --rm -v ${PWD}:/build -w /build \ +riscvintl/riscv-docs-base-container-image:latest + HEADER_SOURCE := header.adoc PDF_RESULT := riscv-brs-spec.pdf +ASCIIDOCTOR_PDF := asciidoctor-pdf +OPTIONS := --trace \ + -a compress \ + -a mathematical-format=svg \ + -a revnumber=${VERSION} \ + -a revremark=${REVMARK} \ + -a revdate=${DATE} \ + -a pdf-fontsdir=docs-resources/fonts \ + -a pdf-style=docs-resources/themes/riscv-pdf.yml \ + --failure-level=ERROR +REQUIRES := --require=asciidoctor-bibtex \ + --require=asciidoctor-diagram \ + --require=asciidoctor-mathematical + +.PHONY: all build clean build-container build-no-container + all: build -build: +build: + @echo "Checking if Docker is available..." + @if command -v docker &> /dev/null ; then \ + echo "Docker is available, building inside Docker container..."; \ + $(MAKE) build-container; \ + else \ + echo "Docker is not available, building without Docker..."; \ + $(MAKE) build-no-container; \ + fi + +build-container: + @echo "Starting build inside Docker container..." + $(DOCKER_RUN) /bin/sh -c "$(ASCIIDOCTOR_PDF) $(OPTIONS) $(REQUIRES) --out-file=$(PDF_RESULT) $(HEADER_SOURCE)" + @echo "Build completed successfully inside Docker container." - @echo "Building asciidoc" - asciidoctor-pdf \ - --attribute=mathematical-format=svg \ - --attribute=pdf-fontsdir=docs-resources/fonts \ - --attribute=pdf-style=docs-resources/themes/riscv-pdf.yml \ - --failure-level=ERROR \ - --require=asciidoctor-bibtex \ - --require=asciidoctor-diagram \ - --require=asciidoctor-mathematical \ - --out-file=$(PDF_RESULT) \ - $(HEADER_SOURCE) +build-no-container: + @echo "Starting build..." + $(ASCIIDOCTOR_PDF) $(OPTIONS) $(REQUIRES) --out-file=$(PDF_RESULT) $(HEADER_SOURCE) + @echo "Build completed successfully." clean: + @echo "Cleaning up generated files..." rm -f $(PDF_RESULT) + @echo "Cleanup completed."