From a16497d8cce3acda089d1886305f9347a3745a57 Mon Sep 17 00:00:00 2001 From: Kevin Broch Date: Wed, 7 Feb 2024 12:49:20 -0800 Subject: [PATCH] refactor to pull in latest from docs-specs-template relates to #28 Did the following: * pre-commit * updated readme.adoc * source docs moved to src * build happens in build directory * add html output * update to latest for docs-resource submodule * move imagesoutdir to Makefile since docker build can't deal with ../build for wavedrom output Signed-off-by: Kevin Broch --- .github/workflows/build-pdf.yml | 93 +++++++++++---------- .github/workflows/pre-commit.yml | 15 ++++ .gitignore | 3 +- .pre-commit-config.yaml | 26 ++++++ CONTRIBUTING.md | 2 +- LICENSE | 3 +- Makefile | 57 +++++++++---- docs-resources | 2 +- images/risc-v_logo.png | Bin 32482 -> 0 bytes readme.adoc | 76 +++++++++++++---- header.adoc => src/riscv-zabha.adoc | 17 ++-- zabha.adoc => src/zabha.adoc | 4 +- zabha.bib => src/zabha.bib | 0 zabha_biblio.adoc => src/zabha_biblio.adoc | 0 14 files changed, 208 insertions(+), 90 deletions(-) create mode 100644 .github/workflows/pre-commit.yml create mode 100644 .pre-commit-config.yaml delete mode 100755 images/risc-v_logo.png rename header.adoc => src/riscv-zabha.adoc (91%) rename zabha.adoc => src/zabha.adoc (97%) rename zabha.bib => src/zabha.bib (100%) rename zabha_biblio.adoc => src/zabha_biblio.adoc (100%) diff --git a/.github/workflows/build-pdf.yml b/.github/workflows/build-pdf.yml index b7be4dd..a5752ac 100644 --- a/.github/workflows/build-pdf.yml +++ b/.github/workflows/build-pdf.yml @@ -1,3 +1,4 @@ +--- name: Create Specification Document # The workflow is triggered by pull request, push to main, and manual dispatch. @@ -8,18 +9,22 @@ on: 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' + revision_mark: + description: 'Set revision mark as Draft, Release or Stable:' + required: true + type: choice + options: + - Draft + - Release + - Stable + default: Draft prerelease: - description: 'Tag as a pre-release?' + description: Tag as a pre-release? required: false type: boolean default: true draft: - description: 'Create release as a draft?' + description: Create release as a draft? required: false type: boolean default: false @@ -33,41 +38,45 @@ jobs: runs-on: ubuntu-latest steps: - # Step 1: Checkout the repository - - name: Checkout repository - uses: actions/checkout@v3 - with: - submodules: 'recursive' + # Checkout the repository + - name: Checkout repository + uses: actions/checkout@v4 + with: + submodules: recursive + + # Pull the latest RISC-V Docs container image + - name: Pull Container + run: docker pull riscvintl/riscv-docs-base-container-image:latest + + # Override VERSION and REVMARK for manual workflow dispatch + - name: Update environment variables + run: | + echo "VERSION=v${{ github.event.inputs.version }}" >> "$GITHUB_ENV" + echo "REVMARK=${{ github.event.inputs.revision_mark }}" >> "$GITHUB_ENV" + if: github.event_name == 'workflow_dispatch' - # Step 2: Pull the latest RISC-V Docs container image - - name: Pull Container - run: docker pull riscvintl/riscv-docs-base-container-image:latest + # Build Files + - name: Build Files + run: make - # Step 3: Build Files - - name: Build Files - run: make - env: - VERSION: v${{ github.event.inputs.version }} - REVMARK: ${{ github.event.inputs.revision_mark }} + # Upload the built PDF files as a single artifact + - name: Upload Build Artifacts + uses: actions/upload-artifact@v4 + with: + name: Build Artifacts + path: ${{ github.workspace }}/build/*.pdf + retention-days: 30 - # Step 4: Upload the built PDF files as a single artifact - - name: Upload Build Artifacts - uses: actions/upload-artifact@v3 - with: - name: Build Artifacts - path: ${{ github.workspace }}/*.pdf - retention-days: 30 - - # Create Release - - name: Create Release - uses: softprops/action-gh-release@v1 - with: - 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.GHTOKEN }} - if: github.event_name == 'workflow_dispatch' - # This condition ensures this step only runs for workflow_dispatch events. + # Create Release + - name: Create Release + uses: softprops/action-gh-release@v1 + with: + files: ${{ github.workspace }}/build/*.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.GHTOKEN }} + if: github.event_name == 'workflow_dispatch' + # This condition ensures this step only runs for workflow_dispatch events. diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml new file mode 100644 index 0000000..74b9ec3 --- /dev/null +++ b/.github/workflows/pre-commit.yml @@ -0,0 +1,15 @@ +--- +name: pre-commit + +on: + pull_request: + push: + branches: [main] + +jobs: + pre-commit: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + - uses: pre-commit/action@v3.0.0 diff --git a/.gitignore b/.gitignore index bd98a73..d9b4f01 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ -*.pdf - +/build/* diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..63fae1b --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,26 @@ +--- +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.5.0 + hooks: + - id: check-json + - id: check-symlinks + - id: check-yaml + - id: end-of-file-fixer + - id: trailing-whitespace + args: [--markdown-linebreak-ext=md] + + - repo: local + hooks: + - id: forbidden-file-extensions + name: forbidden-file-extensions + entry: disallow these file extensions + language: fail + # Disallow other asciidoc extensions except .adoc + files: .*\.(asciidoc|asc)$ + + - repo: https://github.com/jumanjihouse/pre-commit-hook-yamlfmt + rev: 0.2.3 + hooks: + - id: yamlfmt + args: [--mapping, '2', --sequence, '4', --offset, '2'] diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3c79557..1d98c72 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -55,4 +55,4 @@ You can manually add the DCO text to your commit body or include either -s or -- Note: -Ensure that the name and email address associated with your GitHub account match the name and email address in the Signed-off-by line of your commit message. \ No newline at end of file +Ensure that the name and email address associated with your GitHub account match the name and email address in the Signed-off-by line of your commit message. diff --git a/LICENSE b/LICENSE index 53883b1..2f244ac 100644 --- a/LICENSE +++ b/LICENSE @@ -49,7 +49,7 @@ exhaustive, and do not form part of our licenses. such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More_considerations - for the public: + for the public: wiki.creativecommons.org/Considerations_for_licensees ======================================================================= @@ -393,4 +393,3 @@ the avoidance of doubt, this paragraph does not form part of the public licenses. Creative Commons may be contacted at creativecommons.org. - diff --git a/Makefile b/Makefile index 3c30712..4991f57 100644 --- a/Makefile +++ b/Makefile @@ -8,20 +8,36 @@ # SPDX-License-Identifier: CC-BY-SA-4.0 # # Description: -# -# This Makefile is designed to automate the process of building and packaging +# +# 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) +DOCS := \ + riscv-zabha.adoc VERSION ?= v0.9.1 REVMARK ?= Stable -DOCKER_RUN := docker run --rm -v ${PWD}:/build -w /build \ -riscvintl/riscv-docs-base-container-image:latest -HEADER_SOURCE := header.adoc -PDF_RESULT := riscv-zabha.pdf +############################################################################### +# Changes below should be considered for https://github.com/riscv/docs-spec-template +############################################################################### + +DATE ?= $(shell date +%Y-%m-%d) +ifneq ($(SKIP_DOCKER),true) + DOCKER_CMD := docker run --rm -v ${PWD}:/build -w /build \ + riscvintl/riscv-docs-base-container-image:latest \ + /bin/sh -c + DOCKER_QUOTE := " +endif + +SRC_DIR := src +BUILD_DIR := build +DOCS_PDF := $(DOCS:%.adoc=%.pdf) +DOCS_HTML := $(DOCS:%.adoc=%.html) + +XTRA_ADOC_OPTS := ASCIIDOCTOR_PDF := asciidoctor-pdf +ASCIIDOCTOR_HTML := asciidoctor OPTIONS := --trace \ -a compress \ -a mathematical-format=svg \ @@ -29,19 +45,32 @@ OPTIONS := --trace \ -a revremark=${REVMARK} \ -a revdate=${DATE} \ -a pdf-fontsdir=docs-resources/fonts \ - -a pdf-style=docs-resources/themes/riscv-pdf.yml \ + -a pdf-theme=docs-resources/themes/riscv-pdf.yml \ + -a imagesoutdir=$(BUILD_DIR)/images \ + $(XTRA_ADOC_OPTS) \ + -D build \ --failure-level=ERROR REQUIRES := --require=asciidoctor-bibtex \ --require=asciidoctor-diagram \ --require=asciidoctor-mathematical -.PHONY: all build clean build-container build-no-container +.PHONY: all build clean build-container build-no-container build-docs all: build -build: +build-docs: $(DOCS_PDF) $(DOCS_HTML) + +vpath %.adoc $(SRC_DIR) + +%.pdf: %.adoc + $(DOCKER_CMD) $(DOCKER_QUOTE) $(ASCIIDOCTOR_PDF) $(OPTIONS) $(REQUIRES) $< $(DOCKER_QUOTE) + +%.html: %.adoc + $(DOCKER_CMD) $(DOCKER_QUOTE) $(ASCIIDOCTOR_HTML) $(OPTIONS) $(REQUIRES) $< $(DOCKER_QUOTE) + +build: @echo "Checking if Docker is available..." - @if command -v docker &> /dev/null ; then \ + @if command -v docker >/dev/null 2>&1 ; then \ echo "Docker is available, building inside Docker container..."; \ $(MAKE) build-container; \ else \ @@ -51,15 +80,15 @@ build: build-container: @echo "Starting build inside Docker container..." - $(DOCKER_RUN) /bin/sh -c "$(ASCIIDOCTOR_PDF) $(OPTIONS) $(REQUIRES) --out-file=$(PDF_RESULT) $(HEADER_SOURCE)" + $(MAKE) build-docs @echo "Build completed successfully inside Docker container." build-no-container: @echo "Starting build..." - $(ASCIIDOCTOR_PDF) $(OPTIONS) $(REQUIRES) --out-file=$(PDF_RESULT) $(HEADER_SOURCE) + $(MAKE) SKIP_DOCKER=true build-docs @echo "Build completed successfully." clean: @echo "Cleaning up generated files..." - rm -f $(PDF_RESULT) + rm -rf $(BUILD_DIR) @echo "Cleanup completed." diff --git a/docs-resources b/docs-resources index 6a2d5b1..79e585b 160000 --- a/docs-resources +++ b/docs-resources @@ -1 +1 @@ -Subproject commit 6a2d5b1f929e0e25df0c832b522ed1fc0c78e325 +Subproject commit 79e585baa1fa201d20fd330f5563d9ab2c287f3a diff --git a/images/risc-v_logo.png b/images/risc-v_logo.png deleted file mode 100755 index 4e826b2d2ff2e5ed8a5f8e6305618684aa79470e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32482 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