diff --git a/.gitlab/scripts/generate-readme.sh b/.gitlab/scripts/generate-readme.sh
new file mode 100755
index 0000000000000000000000000000000000000000..e412adea462259620626a6850414560aca8ab1f6
--- /dev/null
+++ b/.gitlab/scripts/generate-readme.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+
+set -o errexit
+set -o errtrace
+
+script_dir=$(dirname "$0")
+
+csplit -sf readme -n 1 "${script_dir}/../README.md.template" '/<RENDER>/'
+
+# shellcheck disable=SC2016
+{
+  echo '<!-- This document is generated by `make docs` from `.gitlab/README.md` -->'
+  echo
+  cat readme0
+  echo
+  echo '### Available OpenTofu Versions'
+  echo
+  echo 'The following OpenTofu versions are available with this component via the `opentofu_version` input:'
+  echo
+  yq '.".data".supported_versions | .[] | "- [`" + . + "`](https://github.com/opentofu/opentofu/releases/tag/v" + . + ")"' "${script_dir}/../../opentofu_versions.yaml"
+  tail -n+2 readme1
+} > "${script_dir}/../../README.md"
+
+rm -f readme0 readme1 readme_inputs.md
diff --git a/Makefile b/Makefile
index e6baaae07314a89e5999489152f29c51da2a7cf9..eb62807e95bed2c9c8f81512aca97356a51c8532 100644
--- a/Makefile
+++ b/Makefile
@@ -1,22 +1,12 @@
-RELEASE_SCRIPT = ./.gitlab/scripts/release.sh
+GENERATE_README_SCRIPT ?= ./.gitlab/scripts/generate-readme.sh
+RELEASE_SCRIPT ?= ./.gitlab/scripts/release.sh
 
 .PHONY: all
 all: docs
 
 .PHONY: docs
 docs:
-	csplit -sf readme -n 1 .gitlab/README.md.template '/<RENDER>/'
-	echo '<!-- This document is generated by `make docs` from `.gitlab/README.md` -->' > README.md
-	echo >> README.md
-	cat readme0 >> README.md
-	echo >> README.md
-	echo '### Available OpenTofu Versions' >> README.md
-	echo >> README.md
-	echo 'The following OpenTofu versions are available with this component via the `opentofu_version` input:' >> README.md
-	echo >> README.md
-	yq '.".data".supported_versions | .[] | "- [`" + . + "`](https://github.com/opentofu/opentofu/releases/tag/v" + . + ")"' opentofu_versions.yaml >> README.md
-	tail -n+2 readme1 >> README.md
-	rm -f readme0 readme1 readme_inputs.md
+	$(GENERATE_README_SCRIPT)
 
 .PHONY: release
 release: