From 4ffe4f84a226305de5005d8c56c885338137e428 Mon Sep 17 00:00:00 2001 From: Landon Curt Noll Date: Mon, 16 Jun 2025 19:26:42 -0700 Subject: [PATCH] improve tools as requirements of final judging rounds We moved the building of an initial entry `README.md` file functionality form `bin/cvt-submission.sh` to a new `bin/gen-readme.sh` tool. Add `bin/gen-readme.sh` VERSION "2.0.0 2025-06-16". Update `bin/cvt-submission.sh` to ignore while running `chkentry(1)`, any submission top level `REDAME.md` file. Removed unused template file `template/entry/README_md`. Changed `bin/cvt-submission.sh` allowed minimum `chkentry(1)` VERSION from "1.1.5" to "2.0.5". Changed `bin/cvt-submission.sh` VERSION from "2.0.5 2025-05-18" to "2.1.0 2025-06-16". Update sitemap. Tested the above via `make gen_top_html timestamp` on macOS. --- bin/README.md | 18 ++ bin/cvt-submission.sh | 82 +++++--- bin/gen-readme.sh | 364 ++++++++++++++++++++++++++++++++++ bin/index.html | 10 + sitemap.xml | 18 +- template/entry/README.md.head | 26 ++- template/entry/README.md.tail | 2 +- template/entry/README_md | 58 ------ 8 files changed, 481 insertions(+), 97 deletions(-) create mode 100755 bin/gen-readme.sh delete mode 100644 template/entry/README_md diff --git a/bin/README.md b/bin/README.md index 04202c20d..7dc18636f 100644 --- a/bin/README.md +++ b/bin/README.md @@ -573,6 +573,24 @@ We recommend that this tool be invoked via the top level `Makefile`: ``` +
+### [gen-readme.sh](%%REPO_URL%%/bin/gen-readme.sh) +
+ +Generate a `README.md` file a submission's `remarks.md` and the +template files in [template/entry/README.md.head](%%REPO_URL%%/template/entry/README.md.head) +and [template/entry/README.md.tail](%%REPO_URL%%/template/entry/README.md.tail). + +Usage: + +``` + bin/gen-readme.sh -v 1 YYYY template/entry/README.md.head YYYY/dir/remarks.md template/entry/README.md.tail YYYY/dir/README.md +``` + +While this tool is used by [cvt-submission](#cvt-submission), it may also +be used by hand by the [Judges](../judges.html) during the final judging rounds. + +
### [gen-sitemap.sh](%%REPO_URL%%/bin/gen-sitemap.sh)
diff --git a/bin/cvt-submission.sh b/bin/cvt-submission.sh index 8ff0035f6..47433babb 100755 --- a/bin/cvt-submission.sh +++ b/bin/cvt-submission.sh @@ -124,7 +124,7 @@ export LC_ALL="C" # set variables referenced in the usage message # -export VERSION="2.0.5 2025-05-18" +export VERSION="2.1.0 2025-06-16" NAME=$(basename "$0") export NAME export V_FLAG=0 @@ -139,6 +139,7 @@ status="$?" if [[ $status -eq 0 ]]; then TOPDIR=$("$GIT_TOOL" rev-parse --show-toplevel) fi +export TOPDIR # VERGE=$(type -P verge) export VERGE @@ -180,7 +181,7 @@ if [[ -z "$CHKENTRY_TOOL" ]]; then echo "$0: Notice: then if needed: make clobber all install" 1>&2 exit 5 fi -export MIN_CHKENTRY_VERSION="1.1.5" +export MIN_CHKENTRY_VERSION="2.0.5" CHKENTRY_VERSION=$("$CHKENTRY_TOOL" -V | head -1 | awk '{print $3;}') if ! "$VERGE" "$CHKENTRY_VERSION" "$MIN_CHKENTRY_VERSION"; then echo "$0: FATAL: chkentry version: $CHKENTRY_VERSION < minimum version: $MIN_CHKENTRY_VERSION" 1>&2 @@ -190,6 +191,7 @@ if ! "$VERGE" "$CHKENTRY_VERSION" "$MIN_CHKENTRY_VERSION"; then echo "$0: notice: then: cd jparse && sudo make install clobber" 1>&2 exit 5 fi +export GEN_README_TOOL="$TOPDIR/bin/gen-readme.sh" # GTAR_TOOL=$(type -P gtar) export GTAR_TOOL @@ -198,7 +200,6 @@ if [[ -z "$GIT_TOOL" ]]; then exit 5 fi # -export TOPDIR export REPO_TOP_URL="https://github.com/ioccc-src/winner" # GitHub puts individual files under the "blob/master" sub-directory. export REPO_URL="$REPO_TOP_URL/blob/master" @@ -230,7 +231,7 @@ export X_3="X""X""X" # usage # export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] - [-c chkentry] [-T tarball_dir] + [-c chkentry] [-g gen-readme.sh] [-T tarball_dir] [-i input_data] [-n] [-N] YYYY/dir -h print help message and exit @@ -239,6 +240,7 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] -d topdir set topdir (def: $TOPDIR) -c chkentry path to the chkentry tool (def: $CHKENTRY_TOOL) + -g gen-readme.sh path to the gen-readme.sh tool (def: $GEN_README_TOOL) -T tarball_dir where to form the compressed tarball of modified files (def: $TARBALL_DIR) @@ -789,7 +791,7 @@ function write_author_handle_file # parse command line # -while getopts :hv:Vd:c:i:T:nN flag; do +while getopts :hv:Vd:c:g:i:T:nN flag; do case "$flag" in h) echo "$USAGE" 1>&2 exit 2 @@ -803,6 +805,8 @@ while getopts :hv:Vd:c:i:T:nN flag; do ;; c) CHKENTRY_TOOL="$OPTARG" ;; + g) GEN_README_TOOL="$OPTARG" + ;; i) INPUT_DATA_FILE="$OPTARG" ;; T) TARBALL_DIR="$OPTARG" @@ -1129,6 +1133,7 @@ if [[ $V_FLAG -ge 3 ]]; then echo "$0: debug[3]: GIT_TOOL=$GIT_TOOL" 1>&2 echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2 echo "$0: debug[3]: CHKENTRY_TOOL=$CHKENTRY_TOOL" 1>&2 + echo "$0: debug[3]: GEN_README_TOOL=$GEN_README_TOOL" 1>&2 echo "$0: debug[3]: VERGE=$VERGE" 1>&2 echo "$0: debug[3]: JSTRDECODE=$JSTRDECODE" 1>&2 echo "$0: debug[3]: MIN_JSTRDECODE_VERSION=$MIN_JSTRDECODE_VERSION" 1>&2 @@ -1237,6 +1242,22 @@ if [[ ! -x $CHKENTRY_TOOL ]]; then fi +# firewall - verify gen-readme.sh tool +# +if [[ ! -e $GEN_README_TOOL ]]; then + echo "$0: ERROR: gen-readme.sh file does not exist: $GEN_README_TOOL" 1>&2 + exit 5 +fi +if [[ ! -f $GEN_README_TOOL ]]; then + echo "$0: ERROR: gen-readme.sh is not a file: $GEN_README_TOOL" 1>&2 + exit 5 +fi +if [[ ! -x $GEN_README_TOOL ]]; then + echo "$0: ERROR: cannot find an executable gen-readme.sh tool: $GEN_README_TOOL" 1>&2 + exit 5 +fi + + # verify that YEAR is already in .top # if ! grep -E -q "^$YEAR_DIR$" "$TOP_FILE"; then @@ -1429,22 +1450,24 @@ fi # if [[ $V_FLAG -ge 1 ]]; then echo "$0: debug[1]: about to run: $CHKENTRY_TOOL -v 1" \ - "-i .auth.json.xz -i .prev -i .submit.sh -i .txz -i .num.sh -i .orig -i .path" \ - "-- $YYYY_DIR" 1>&2 - "$CHKENTRY_TOOL" -v 1 -i .auth.json.xz -i .prev -i .submit.sh -i .txz -i .num.sh -i .orig -i .path -- "$YYYY_DIR" + "-i .auth.json.xz -i .prev -i .submit.sh -i .txz -i .num.sh -i .orig" \ + "-i .path -i README.md -- $YYYY_DIR" 1>&2 + "$CHKENTRY_TOOL" -v 1 -i .auth.json.xz -i .prev -i .submit.sh -i .txz -i .num.sh -i .orig \ + -i .path -i README.md -- "$YYYY_DIR" status="$?" if [[ $status -ne 0 ]]; then - echo "$0: ERROR: $CHKENTRY_TOOL -v 1 -i .auth.json.xz -i .prev -i .submit.sh -i .txz -i .num.sh -i .orig -i .path" \ - "-- $YYYY_DIR failed," \ + echo "$0: ERROR: $CHKENTRY_TOOL -v 1 -i .auth.json.xz -i .prev -i .submit.sh -i .txz -i .num.sh -i .orig" \ + "-i .path -i README.md -- $YYYY_DIR failed," \ "error code: $status" 1>&2 exit 7 fi else - "$CHKENTRY_TOOL" -i .auth.json.xz -i .prev -i .submit.sh -i .txz -i .num.sh -i .orig -i .path -- "$YYYY_DIR" + "$CHKENTRY_TOOL" -i .auth.json.xz -i .prev -i .submit.sh -i .txz -i .num.sh -i .orig \ + -i .path -i README.md -- "$YYYY_DIR" status="$?" if [[ $status -ne 0 ]]; then - echo "$0: $CHKENTRY_TOOL -i .auth.json.xz -i .prev -i .submit.sh -i .txz -i .num.sh -i .orig -i .path" \ - "-- $YYYY_DIR failed," \ + echo "$0: $CHKENTRY_TOOL -i .auth.json.xz -i .prev -i .submit.sh -i .txz -i .num.sh -i .orig" \ + "-i .path -i README.md -- $YYYY_DIR failed," \ "error code: $status" 1>&2 exit 7 fi @@ -2349,13 +2372,16 @@ if [[ -z $NOOP ]]; then if [[ $V_FLAG -ge 3 ]]; then echo "$0: debug[3]: forming README.md: $README_MD" fi - cat "$TEMPLATE_README_MD_HEAD" > "$README_MD" - if [[ -f $YYYY_DIR/remarks.md ]]; then - cat "$YYYY_DIR/remarks.md" >> "$README_MD" - else - echo "$X_3 - no remarks.md file was found" >> "$README_MD" + "$GEN_README_TOOL" "$YEAR_DIR" "$TEMPLATE_README_MD_HEAD" "$YYYY_DIR/remarks.md" "$TEMPLATE_README_MD_TAIL" "$README_MD" + status="$?" + if [[ $status -ne 0 ]]; then + echo "$0: ERROR: $GEN_README_TOOL $YEAR_DIR $TEMPLATE_README_MD_HEAD $YYYY_DIR/remarks.md" \ + "$TEMPLATE_README_MD_TAIL $README_MD failed," \ + "error code: $status" 1>&2 + exit 59 fi - sed -e "s/$X_3-YEAR-$X_3/$YEAR_DIR/" "$TEMPLATE_README_MD_TAIL" >> "$README_MD" + elif [[ $V_FLAG -ge 3 ]]; then + echo "$0: debug[3]: README.md file already exists, skipping forming: $README_MD" 1>&2 fi # write manifest csv line for README.md @@ -2379,7 +2405,7 @@ if [[ -z $NOOP ]]; then if [[ $status -ne 0 ]]; then echo "$0: ERROR: LC_ALL=C sort -t, -k2n -k1,1 -k3,6 $TMP_MANIFEST_CSV -o $TMP_MANIFEST_CSV failed," \ "error code: $status" 1>&2 - exit 59 + exit 60 elif [[ $V_FLAG -ge 3 ]]; then echo "$0: debug[3]: sorted temporary manifest csv file: $TMP_MANIFEST_CSV" 1>&2 fi @@ -2422,7 +2448,7 @@ if [[ -z $NOOP ]]; then if [[ $status -ne 0 ]]; then echo "$0: ERROR: $JPARSE_TOOL -q -- $TMP_ENTRY_JSON filed," \ "error code: $status" 1>&2 - exit 60 + exit 61 elif [[ $V_FLAG -ge 3 ]]; then echo "$0: debug[3]: valid JSON: $TMP_ENTRY_JSON" 1>&2 fi @@ -2454,13 +2480,13 @@ if [[ -z $NOOP ]]; then if [[ $status -ne 0 ]]; then echo "$0: ERROR: mv -f -- $TMP_ENTRY_JSON $ENTRY_JSON filed," \ "error code: $status" 1>&2 - exit 61 + exit 62 elif [[ $V_FLAG -ge 1 ]]; then echo "$0: debug[1]: updated .entry.json: $ENTRY_JSON" 1>&2 fi if [[ ! -s $ENTRY_JSON ]]; then echo "$0: ERROR: not a non-empty .entry.json: $ENTRY_JSON" 1>&2 - exit 62 + exit 63 fi fi @@ -2494,7 +2520,7 @@ for EXTRA_FILE in $EXTRA_FILE_SET; do if [[ $status -ne 0 ]]; then echo "$0: ERROR: $OTHERMD2HTML_SH -v $V_FLAG -- $YYYY_DIR/$EXTRA_FILE filed," \ "error code: $status" 1>&2 - exit 63 + exit 64 fi elif [[ $V_FLAG -ge 3 ]]; then echo "$0: debug[3]: -n disabled forming HTML: $YYYY_DIR/$HTML_FILE" 1>&2 @@ -2527,7 +2553,7 @@ if [[ $status -ne 0 ]]; then if [[ $status -ne 0 ]]; then echo "$0: ERROR: chmod +w $ALLYEAR filed," \ "error code: $status" 1>&2 - exit 64 + exit 65 fi # append YYYY_DIR to .allyear @@ -2541,7 +2567,7 @@ if [[ $status -ne 0 ]]; then if [[ $status -ne 0 ]]; then echo "$0: ERROR: sort -f -d -u $ALLYEAR -o $ALLYEAR filed," \ "error code: $status" 1>&2 - exit 65 + exit 66 fi elif [[ $V_FLAG -ge 1 ]]; then @@ -2566,7 +2592,7 @@ if [[ -z $NOOP ]]; then if [[ $status -ne 0 ]]; then echo "$0: ERROR: $MD2HTML_SH -v $V_FLAG -- $README_MD $INDEX_HTML filed," \ "error code: $status" 1>&2 - exit 66 + exit 67 fi fi @@ -2590,7 +2616,7 @@ if [[ $status -ne 0 ]]; then echo "$0: ERROR: rm -f -v -- $INFO_JSON $AUTH_JSON $AUTH_JSON.xz $REMARKS_MD $YYYY_DIR/.prev" \ "$YYYY_DIR/.submit.sh $YYYY_DIR/.txz $YYYY_DIR/.num.sh $YYYY_DIR/.orig filed," \ "error code: $status" 1>&2 - exit 65 + exit 68 fi diff --git a/bin/gen-readme.sh b/bin/gen-readme.sh new file mode 100755 index 000000000..4d2dfa6f4 --- /dev/null +++ b/bin/gen-readme.sh @@ -0,0 +1,364 @@ +#!/usr/bin/env bash +# +# cvt-submission.sh - Form README.md from remarks.md and 2 templates +# +# Given a submission (that may be in the final rounds of judging +# but may not not yet have won the IOCCC) form a README.md file +# using the contents of the remarks.md and templates from +# template/entry/README.md.head and template/entry/README.md.tail. +# +# This script was written in 2025 by: +# +# chongo (Landon Curt Noll, http://www.isthe.com/chongo/index.html) /\oo/\ +# +# Copyright (c) 2025 by Landon Curt Noll. All Rights Reserved. +# +# Permission to use, copy, modify, and distribute this software and +# its documentation for any purpose and without fee is hereby granted, +# provided that the above copyright, this permission notice and text +# this comment, and the disclaimer below appear in all of the following: +# +# supporting documentation +# source copies +# source works derived from this source +# binaries derived from this source or from derived source +# +# LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO +# EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# chongo (Landon Curt Noll, http://www.isthe.com/chongo/index.html) /\oo/\ +# +# Share and enjoy! :-) + + +# firewall - run only with a bash that is version 5.1.8 or later +# +# The "/usr/bin/env bash" command must result in using a bash that +# is version 5.1.8 or later. +# +# We could relax this version and insist on version 4.2 or later. Versions +# of bash between 4.2 and 5.1.7 might work. However, to be safe, we will require +# bash version 5.1.8 or later. +# +# WHY 5.1.8 and not 4.2? This safely is done because macOS Homebrew bash we +# often use is "version 5.2.26(1)-release" or later, and the RHEL Linux bash we +# use often use is "version 5.1.8(1)-release" or later. These versions are what +# we initially tested. We recommend you either upgrade bash or install a newer +# version of bash and adjust your $PATH so that "/usr/bin/env bash" finds a bash +# that is version 5.1.8 or later. +# +# NOTE: The macOS shipped, as of 2024 March 15, a version of bash is something like +# bash "version 3.2.57(1)-release". That macOS shipped version of bash +# will NOT work. For users of macOS we recommend you install Homebrew, +# (see https://brew.sh), and then run "brew install bash" which will +# typically install it into /opt/homebrew/bin/bash, and then arrange your $PATH +# so that "/usr/bin/env bash" finds "/opt/homebrew/bin" (or whatever the +# Homebrew bash is). +# +# NOTE: And while MacPorts might work, we noticed a number of subtle differences +# with some of their ported tools to suggest you might be better off +# with installing Homebrew (see https://brew.sh). No disrespect is intended +# to the MacPorts team as they do a commendable job. Nevertheless we ran +# into enough differences with MacPorts environments to suggest you +# might find a better experience with this tool under Homebrew instead. +# +if [[ -z ${BASH_VERSINFO[0]} || + ${BASH_VERSINFO[0]} -lt 5 || + ${BASH_VERSINFO[0]} -eq 5 && ${BASH_VERSINFO[1]} -lt 1 || + ${BASH_VERSINFO[0]} -eq 5 && ${BASH_VERSINFO[1]} -eq 1 && ${BASH_VERSINFO[2]} -lt 8 ]]; then + echo "$0: ERROR: bash version needs to be >= 5.1.8: $BASH_VERSION" 1>&2 + echo "$0: Warning: bash version >= 4.2 might work but 5.1.8 was the minimum we tested" 1>&2 + echo "$0: Notice: For macOS users: install Homebrew (see https://brew.sh), then run" \ + ""brew install bash" and then modify your \$PATH so that \"#!/usr/bin/env bash\"" \ + "finds the Homebrew installed (usually /opt/homebrew/bin/bash) version of bash" 1>&2 + exit 4 +fi + + +# setup bash file matching +# +# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. +# This requires a bash with a version 4.2 or later. See the larger comment above about bash versions. +# +shopt -s nullglob # enable expanded to nothing rather than remaining unexpanded +shopt -u failglob # disable error message if no matches are found +shopt -u dotglob # disable matching files starting with . +shopt -u nocaseglob # disable strict case matching +shopt -u extglob # enable extended globbing patterns +shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories + + +# IOCCC requires use of C locale +# +export LANG="C" +export LC_CTYPE="C" +export LC_NUMERIC="C" +export LC_TIME="C" +export LC_COLLATE="C" +export LC_MONETARY="C" +export LC_MESSAGES="C" +export LC_PAPER="C" +export LC_NAME="C" +export LC_ADDRESS="C" +export LC_TELEPHONE="C" +export LC_MEASUREMENT="C" +export LC_IDENTIFICATION="C" +export LC_ALL="C" + + +# set variables referenced in the usage message +# +export VERSION="2.0.0 2025-06-16" +NAME=$(basename "$0") +export NAME +export V_FLAG=0 +# +export NOOP= +export DO_NOT_PROCESS= +# +export FORCE="" +# +export X_3="X""X""X" + + +# usage +# +export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] + [-c chkentry] [-T tarball_dir] + [-i input_data] [-n] [-N] YYYY README.md.head remarks.md README.md.tail README.md + + -h print help message and exit + -v level set verbosity level (def level: 0) + -V print version string and exit + + -f force overwrite of README.md if it exists (def: do not overwrite) + + -n go thru the actions, but do not update any files (def: do the action) + -N do not process anything, just parse arguments (def: process something) + + YYYY IOCCC year + README.md.head path to the README.md.head header file + remarks.md path to the submission remarks.md file + README.md.tail path to the README.md.tail trailer file + README.md path to the README.md file to create + +Exit codes: + 0 all OK + 1 failed to create or overwrite README.md + 2 -h and help string printed or -V and version string printed + 3 command line error + 4 bash version is too old + 5 YYYY is not a valid year + 6 command line file not found or not readable + >= 10 internal error + +$NAME version: $VERSION" + + +# parse command line +# +while getopts :hv:VfnN flag; do + case "$flag" in + h) echo "$USAGE" 1>&2 + exit 2 + ;; + v) V_FLAG="$OPTARG" + ;; + V) echo "$VERSION" + exit 2 + ;; + f) FORCE="true" + ;; + n) NOOP="-n" + ;; + N) DO_NOT_PROCESS="-N" + ;; + \?) echo "$0: ERROR: invalid option: -$OPTARG" 1>&2 + echo 1>&2 + echo "$USAGE" 1>&2 + exit 3 + ;; + :) echo "$0: ERROR: option -$OPTARG requires an argument" 1>&2 + echo 1>&2 + echo "$USAGE" 1>&2 + exit 3 + ;; + *) echo "$0: ERROR: unexpected value from getopts: $flag" 1>&2 + echo 1>&2 + echo "$USAGE" 1>&2 + exit 3 + ;; + esac +done +# +# remove the options +# +shift $(( OPTIND - 1 )); +# +if [[ $V_FLAG -ge 5 ]]; then + echo "$0: debug[5]: file argument count: $#" 1>&2 +fi +# +# verify arg count and parse args +# +if [[ $# -ne 5 ]]; then + echo "$0: ERROR: expected 5 args, found: $#" 1>&2 + echo 1>&2 + echo "$USAGE" 1>&2 + exit 3 +fi +export YYYY="$1" +export TEMPLATE_README_MD_HEAD="$2" +export REMARKS_MD="$3" +export TEMPLATE_README_MD_TAIL="$4" +export README_MD="$5" + + +# firewall - command line args +# +if ! [[ $YYYY =~ [0-9][0-9][0-9][0-9] ]]; then + echo "$0: ERROR: YYYY is not a valid 4 digit year: $YYYY" 1>&2 + exit 5 +fi +if [[ $YYYY -lt 1984 || $YYYY -gt 2099 ]]; then + echo "$0: ERROR: YYYY is not a valid IOCCC year (1984 thru 2099): $YYYY" 1>&2 + exit 5 +fi +if [[ ! -f $TEMPLATE_README_MD_HEAD ]]; then + echo "$0: ERROR: missing template README.md.head file: $TEMPLATE_README_MD_HEAD" 1>&2 + exit 6 +fi +if [[ ! -r $TEMPLATE_README_MD_HEAD ]]; then + echo "$0: ERROR: template README.md.head file not readable: $TEMPLATE_README_MD_HEAD" 1>&2 + exit 6 +fi +if [[ ! -f $REMARKS_MD ]]; then + echo "$0: ERROR: missing template remarks.md file: $REMARKS_MD" 1>&2 + exit 6 +fi +if [[ ! -r $REMARKS_MD ]]; then + echo "$0: ERROR: template remarks.md file not readable: $REMARKS_MD" 1>&2 + exit 6 +fi +if [[ ! -f $TEMPLATE_README_MD_TAIL ]]; then + echo "$0: ERROR: missing template README.md.tail file: $TEMPLATE_README_MD_TAIL" 1>&2 + exit 6 +fi +if [[ ! -r $TEMPLATE_README_MD_TAIL ]]; then + echo "$0: ERROR: template README.md.tail file not readable: $TEMPLATE_README_MD_TAIL" 1>&2 + exit 6 +fi +if [[ -z $FORCE && -e $README_MD ]]; then + echo "$0: ERROR: -f was not used and readme.md exists: $README_MD" 1>&2 + exit 1 +fi + + +# set umask to avoid group writable files +# +umask 0022 + + +# print running info if verbose +# +# If -v 3 or higher, print exported variables in order that they were exported. +# +if [[ $V_FLAG -ge 3 ]]; then + echo "$0: debug[3]: LANG=$LANG" 1>&2 + echo "$0: debug[3]: LC_CTYPE=$LC_CTYPE" 1>&2 + echo "$0: debug[3]: LC_NUMERIC=$LC_NUMERIC" 1>&2 + echo "$0: debug[3]: LC_TIME=$LC_TIME" 1>&2 + echo "$0: debug[3]: LC_COLLATE=$LC_COLLATE" 1>&2 + echo "$0: debug[3]: LC_MONETARY=$LC_MONETARY" 1>&2 + echo "$0: debug[3]: LC_MESSAGES=$LC_MESSAGES" 1>&2 + echo "$0: debug[3]: LC_PAPER=$LC_PAPER" 1>&2 + echo "$0: debug[3]: LC_NAME=$LC_NAME" 1>&2 + echo "$0: debug[3]: LC_ADDRESS=$LC_ADDRESS" 1>&2 + echo "$0: debug[3]: LC_TELEPHONE=$LC_TELEPHONE" 1>&2 + echo "$0: debug[3]: LC_MEASUREMENT=$LC_MEASUREMENT" 1>&2 + echo "$0: debug[3]: LC_IDENTIFICATION=$LC_IDENTIFICATION" 1>&2 + echo "$0: debug[3]: LC_ALL=$LC_ALL" 1>&2 + echo "$0: debug[3]: VERSION=$VERSION" 1>&2 + echo "$0: debug[3]: NAME=$NAME" 1>&2 + echo "$0: debug[3]: V_FLAG=$V_FLAG" 1>&2 + echo "$0: debug[3]: NOOP=$NOOP" 1>&2 + echo "$0: debug[3]: DO_NOT_PROCESS=$DO_NOT_PROCESS" 1>&2 + echo "$0: debug[3]: FORCE=$FORCE" 1>&2 + echo "$0: debug[3]: X_3=$X_3" 1>&2 + echo "$0: debug[3]: YYYY=$YYYY" 1>&2 + echo "$0: debug[3]: TEMPLATE_README_MD_HEAD=$TEMPLATE_README_MD_HEAD" 1>&2 + echo "$0: debug[3]: REMARKS_MD=$REMARKS_MD" 1>&2 + echo "$0: debug[3]: TEMPLATE_README_MD_TAIL=$TEMPLATE_README_MD_TAIL" 1>&2 + echo "$0: debug[3]: README_MD=$README_MD" 1>&2 +fi + +# form README.md +# +if [[ -z $NOOP ]]; then + + if [[ $V_FLAG -ge 3 ]]; then + echo "$0: debug[3]: forming README.md: $README_MD" + fi + + # pre-remove README.md + # + # If README.md exists, then the only way we can get here is if -f was used. + # If README.md does not exist, then rm -f does no harm and will not fail. + # + rm -f "$README_MD" + status="$?" + if [[ $status -ne 0 ]]; then + echo "$0: ERROR: rm -f $README_MD failed," \ + "error code: $status" 1>&2 + exit 1 + fi + + # start with the header + # + cat "$TEMPLATE_README_MD_HEAD" > "$README_MD" + status="$?" + if [[ $status -ne 0 ]]; then + echo "$0: ERROR: cat $TEMPLATE_README_MD_HEAD > $README_MD failed," \ + "error code: $status" 1>&2 + exit 1 + fi + + # append the submission remarks.md contents + # + cat "$REMARKS_MD" >> "$README_MD" + status="$?" + if [[ $status -ne 0 ]]; then + echo "$0: ERROR: cat $REMARKS_MD >> $README_MD failed," \ + "error code: $status" 1>&2 + exit 1 + fi + + # append the trailer with the year substituted + # + sed -e "s/$X_3-YEAR-$X_3/$YYYY/" "$TEMPLATE_README_MD_TAIL" >> "$README_MD" + status="$?" + if [[ $status -ne 0 ]]; then + echo "$0: ERROR: sed -e 's/$X_3-YEAR-$X_3/$YYYY/' $TEMPLATE_README_MD_TAIL >> $README_MD failed," \ + "error code: $status" 1>&2 + exit 1 + fi + + if [[ $V_FLAG -ge 1 ]]; then + echo "$0: debug[1]: formed README.md: $README_MD" + fi + +# case: with -n +# +elif [[ $V_FLAG -ge 3 ]]; then + echo "$0: debug[3]: -n disabled forming README_MD" 1>&2 +fi + + +# All Done!!! All Done!!! -- Jessica Noll, Age 2 +# +exit 0 diff --git a/bin/index.html b/bin/index.html index 36080e867..7f939c47a 100644 --- a/bin/index.html +++ b/bin/index.html @@ -764,6 +764,16 @@ markdown files, of all entries.

    bin/gen-other-html.sh -v 1

We recommend that this tool be invoked via the top level Makefile:

    make gen_other_html
+
+

gen-readme.sh

+
+

Generate a README.md file a submission’s remarks.md and the +template files in template/entry/README.md.head +and template/entry/README.md.tail.

+

Usage:

+
    bin/gen-readme.sh -v 1 YYYY template/entry/README.md.head YYYY/dir/remarks.md template/entry/README.md.tail YYYY/dir/README.md
+

While this tool is used by cvt-submission, it may also +be used by hand by the Judges during the final judging rounds.

gen-sitemap.sh

diff --git a/sitemap.xml b/sitemap.xml index 2e674f9b4..4cc3fcd29 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -15226,7 +15226,7 @@ https://www.ioccc.org/bin/cvt-submission.sh - 2025-05-18T11:09:29+00:00 + 2025-06-17T02:12:37+00:00 https://www.ioccc.org/bin/entry2csv.sh @@ -15260,6 +15260,10 @@ https://www.ioccc.org/bin/gen-other-html.sh 2025-04-16T20:59:19+00:00 + + https://www.ioccc.org/bin/gen-readme.sh + 2025-06-16T20:20:40+00:00 + https://www.ioccc.org/bin/gen-sitemap.sh 2025-04-28T20:09:17+00:00 @@ -15286,11 +15290,11 @@ https://www.ioccc.org/bin/index.html - 2025-01-10T06:49:56+00:00 + 2025-06-17T00:53:52+00:00 https://www.ioccc.org/bin/index.html - 2025-01-10T06:49:56+00:00 + 2025-06-17T00:53:52+00:00 https://www.ioccc.org/bin/jfmt-wrapper.sh @@ -15358,11 +15362,11 @@ https://www.ioccc.org/bin/README.md - 2025-01-10T06:43:52+00:00 + 2025-06-16T20:30:35+00:00 https://www.ioccc.org/bin/README.md - 2025-01-10T06:43:52+00:00 + 2025-06-16T20:30:35+00:00 https://www.ioccc.org/bin/sgi.sh @@ -15486,7 +15490,7 @@ https://www.ioccc.org/Makefile - 2025-05-18T10:06:42+00:00 + 2025-06-17T02:18:34+00:00 https://www.ioccc.org/markdown.html @@ -15598,7 +15602,7 @@ https://www.ioccc.org/status.html - 2025-06-07T02:03:20+00:00 + 2025-06-17T02:21:57+00:00 https://www.ioccc.org/status.json diff --git a/template/entry/README.md.head b/template/entry/README.md.head index 8f754f252..a0b981bcc 100644 --- a/template/entry/README.md.head +++ b/template/entry/README.md.head @@ -1,3 +1,6 @@ +Award: XXX - suggest award title - XXX + +XXX - once the .entry.json file is built by cvt-submission.sh - remove all text from top thru this line - XXX ## To build: ``` @@ -5,20 +8,33 @@ ``` +### Bugs and (Mis)features: + +XXX - remove this section if not needed - XXX + + ## To use: ``` - ./prog + ./prog XXX - add or remove args for a default or represenative run - XXX +``` + + +## Try: + +``` + ./try.sh ``` ## Alternate code: -XXX +XXX - remove this section if not needed - XXX ### Alternate build: +XXX - remove this section if not needed - XXX ``` make alt ``` @@ -26,6 +42,7 @@ XXX ### Alternate use: +XXX - remove this section if not needed - XXX ``` ./prog.alt ``` @@ -33,8 +50,11 @@ XXX ## Judges' remarks: -XXX +XXX - write stuff here - XXX + +Please see [IOCCC markdown guidelines](https://www.ioccc.org/markdown.html) - XXX - remove this line - XXX ## Author's remarks: + diff --git a/template/entry/README.md.tail b/template/entry/README.md.tail index 3683a1b1f..2e8aa6816 100644 --- a/template/entry/README.md.tail +++ b/template/entry/README.md.tail @@ -2,7 +2,7 @@ - make all -``` - - -## To use: - -``` - ./XXX -``` - - -## Alternate code: - -XXX - - -### Alternate build: - -``` - make alt -``` - - -### Alternate use: - -NOTE: this version might not work on some systems like macOS. - -``` - ./XXX.alt -``` - - -## Judges' remarks: - -XXX - - -## Author's remarks: - -XXX-remarks.md-XXX - - -