diff --git a/Dockerfile b/Dockerfile
index 48d4d4e..47057c8 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -19,6 +19,7 @@
 
 # Generate class data sharing
 RUN /opt/jre/bin/java -Xshare:dump
+RUN apk add --no-cache wget openssl git libxml2-utils jq curl gnupg
 
 # escaping required to properly handle arguments with spaces
 ENTRYPOINT ["/usr/share/sling-cli/bin/launcher.sh"]
@@ -28,7 +29,9 @@
 # Add launcher script
 ADD target/classes/scripts /usr/share/sling-cli/bin
 # workaround for MRESOURCES-236
-RUN chmod a+x /usr/share/sling-cli/bin/*
+RUN chmod a+x /usr/share/sling-cli/bin/* \
+    /usr/share/sling-cli/bin/actions/* \
+    /usr/share/sling-cli/bin/actions/check-release/*
 # Add config files
 ADD target/classes/conf /usr/share/sling-cli/conf
 # Add all bundles
diff --git a/docker-env.sample b/docker-env.sample
deleted file mode 100644
index 12e39be..0000000
--- a/docker-env.sample
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh
-# ----------------------------------------------------------------------------------------
-# Licensed to the Apache Software Foundation (ASF) under one or more contributor license
-# agreements. See the NOTICE file distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file to you under the Apache License,
-# Version 2.0 (the "License"); you may not use this file except in compliance with the
-# License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
-# Unless required by applicable law or agreed to in writing, software distributed under the
-# License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
-# either express or implied. See the License for the specific language governing permissions
-# and limitations under the License.
-# ----------------------------------------------------------------------------------------
-ASF_USERNAME=changeme
-ASF_PASSWORD=changeme
-
-JIRA_USERNAME=changeme
-JIRA_PASSWORD=changeme
\ No newline at end of file
diff --git a/src/main/resources/scripts/actions/check-release.sh b/src/main/resources/scripts/actions/check-release.sh
new file mode 100755
index 0000000..3d3a9ba
--- /dev/null
+++ b/src/main/resources/scripts/actions/check-release.sh
@@ -0,0 +1,87 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+# agreements. See the NOTICE file distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file to you under the Apache License,
+# Version 2.0 (the "License"); you may not use this file except in compliance with the
+# License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software distributed under the
+# License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+# either express or implied. See the License for the specific language governing permissions
+# and limitations under the License.
+# ----------------------------------------------------------------------------------------
+
+prints() {
+  if [ "$2" == "info" ]; then
+    COLOR="96m";
+  elif [ "$2" == "success" ]; then
+    COLOR="92m";
+  elif [ "$2" == "error" ]; then
+    COLOR="91m";
+  else
+    COLOR="0m";
+  fi
+  STARTCOLOR="\e[$COLOR";
+  ENDCOLOR="\e[0m";
+  printf "\n\n$STARTCOLOR%b$ENDCOLOR" "$1\n";
+}
+
+try() {
+  "$@"
+  local EXIT_CODE=$?
+
+  if [[ $EXIT_CODE -ne 0 ]]; then
+    echo "Exit code: $EXIT_CODE"
+    prints "Failed to execute command: $@" "error"
+    exit 1
+  fi
+}
+
+# Set variables
+export CHECKS=${2:-000-check-signatures,001-check-ci-status}
+export RELEASE_ID=$1
+export RELEASE_FOLDER="/tmp/release"
+export BASE="/usr/share/sling-cli/bin/actions/check-release"
+
+# Set the Maven repo so that we can pull the other release artifacts in a multi-artifact release
+mkdir ~/.m2
+cat > ~/.m2/settings.xml <<EOF
+<settings>
+ <profiles>
+   <profile>
+     <id>staging</id>
+     <repositories>
+       <repository>
+         <id>staging-repo</id>
+         <name>your custom repo</name>
+         <url>https://repository.apache.org/content/repositories/orgapachesling-$RELEASE_ID</url>
+       </repository>
+     </repositories>
+   </profile>
+ </profiles>
+ <activeProfiles>
+   <activeProfile>staging</activeProfile>
+  </activeProfiles>
+</settings>
+EOF
+
+# Start of the release process
+prints "Starting Validation for Apache Sling Release #$RELEASE_ID" "info"
+
+mkdir ${RELEASE_FOLDER} 2>/dev/null
+
+# Download the release artifacts
+prints "Downloading release artifacts" "info"
+try wget -e "robots=off" -nv -r -np "--reject=html,index.html.tmp" \
+  "--follow-tags=" -P "$RELEASE_FOLDER" -nH "--cut-dirs=3" \
+  "https://repository.apache.org/content/repositories/orgapachesling-${RELEASE_ID}/org/apache/sling/"
+
+# Execute the checks
+for CHECK in $(echo $CHECKS | tr "," "\n")
+do
+  prints "Executing $CHECK" "info"
+  try $BASE/$CHECK.sh
+  prints "Check $CHECK executed successfully!" "success"
+done
+
+prints "All checks successful!" "success"
diff --git a/src/main/resources/scripts/actions/check-release/000-check-signatures.sh b/src/main/resources/scripts/actions/check-release/000-check-signatures.sh
new file mode 100644
index 0000000..37ed447
--- /dev/null
+++ b/src/main/resources/scripts/actions/check-release/000-check-signatures.sh
@@ -0,0 +1,78 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+# agreements. See the NOTICE file distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file to you under the Apache License,
+# Version 2.0 (the "License"); you may not use this file except in compliance with the
+# License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software distributed under the
+# License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+# either express or implied. See the License for the specific language governing permissions
+# and limitations under the License.
+# ----------------------------------------------------------------------------------------
+
+echo "################################################################################"
+echo "                           LOAD GPG KEYS                                        "
+echo "################################################################################"
+
+curl https://people.apache.org/keys/group/sling.asc --output /tmp/sling.asc
+if [ "$?" != "0" ]; then
+  echo "Failed to download Sling GPG Keys"
+  exit 1;
+fi
+gpg --import /tmp/sling.asc
+if [ "$?" != "0" ]; then
+  echo "Failed to load Sling GPG Keys"
+  exit 1;
+fi
+
+echo "################################################################################"
+echo "                          CHECK SIGNATURES AND DIGESTS                          "
+echo "################################################################################"
+
+RESULT=0
+for i in `find "$RELEASE_FOLDER" -type f | grep -v '\.\(asc\|sha1\|md5\)$'`
+do
+  f=`echo $i | sed 's/\.asc$//'`
+  echo "$f"
+  if [ ! -f "$f.asc" ]; then
+    CHKSUM="----";
+  else
+    gpg --verify $f.asc 2>/dev/null
+    if [ "$?" = "0" ]; then
+      CHKSUM="GOOD";
+    else
+      CHKSUM="BAD!!!!!!!!";
+      RESULT=2
+    fi
+  fi
+  echo "gpg:  ${CHKSUM}"
+
+ for tp in md5 sha1
+ do
+   if [ ! -f "$f.$tp" ]
+   then
+     CHKSUM="----"
+   else
+     A="`cat $f.$tp 2>/dev/null`"
+     B="`openssl $tp < $f 2>/dev/null | sed 's/.*= *//' `"
+     if [ "$A" = "$B" ]; then
+       CHKSUM="GOOD (`cat $f.$tp`)";
+     else
+       CHKSUM="BAD!! : $A not equal to $B";
+       RESULT=3
+     fi
+   fi
+   echo "$tp : ${CHKSUM}"
+ done
+
+done
+
+if [ -z "${CHKSUM}" ]; then
+  echo "WARNING: no files found!";
+  RESULT=4
+fi
+
+echo "################################################################################"
+
+exit $RESULT
diff --git a/src/main/resources/scripts/actions/check-release/001-check-ci-status.sh b/src/main/resources/scripts/actions/check-release/001-check-ci-status.sh
new file mode 100644
index 0000000..0d48a42
--- /dev/null
+++ b/src/main/resources/scripts/actions/check-release/001-check-ci-status.sh
@@ -0,0 +1,55 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+# agreements. See the NOTICE file distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file to you under the Apache License,
+# Version 2.0 (the "License"); you may not use this file except in compliance with the
+# License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software distributed under the
+# License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+# either express or implied. See the License for the specific language governing permissions
+# and limitations under the License.
+# ----------------------------------------------------------------------------------------
+
+pom_files=$(find $RELEASE_FOLDER -name '*.pom')
+
+failed=0
+unknown=0
+
+echo ""
+for pom_file in ${pom_files}; do
+  artifactId=$(xmllint --xpath "/*[local-name()='project']/*[local-name()='artifactId']/text()" ${pom_file})
+  version=$(xmllint --xpath "/*[local-name()='project']/*[local-name()='version']/text()" ${pom_file})
+  repo_name="${artifactId//\./-}"
+  if [[ $repo_name != sling-* ]]; then
+    repo_name="sling-${repo_name}"
+  fi
+  echo -n "STATUS: ${artifactId} ${version}: "
+  resp=$(curl --silent -H 'Accept: application/vnd.github.v3+json' \
+      "https://api.github.com/repos/apache/${repo_name}/commits/${artifactId}-${version}/status")
+  status=$(echo $resp | jq --raw-output '.state')
+  echo $status
+  case $status in
+    "pending")
+      unknown=1
+      ;;
+    "failure")
+      failed=1
+      ;;
+  esac
+  if [[ $status != "success" ]]; then
+    echo "See https://github.com/apache/${repo_name}/commits/${artifactId}-${version} for details"
+    echo $resp | jq -r '.statuses[] | "Additional Information: \"" + .description + "\" See: " + .target_url'
+  fi
+  echo ""
+done
+
+if [ $failed -eq 1 ]; then
+  exit 1
+fi
+
+if [ $unknown -eq 1 ]; then
+  exit 129
+fi
+
+exit 0
diff --git a/src/main/resources/scripts/actions/default.sh b/src/main/resources/scripts/actions/default.sh
new file mode 100755
index 0000000..e5094b5
--- /dev/null
+++ b/src/main/resources/scripts/actions/default.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+# agreements. See the NOTICE file distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file to you under the Apache License,
+# Version 2.0 (the "License"); you may not use this file except in compliance with the
+# License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software distributed under the
+# License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+# either express or implied. See the License for the specific language governing permissions
+# and limitations under the License.
+# ----------------------------------------------------------------------------------------
+
+# TODO - contribute '-q' flag to launcher OR allow passthrough of org.slf4j.simpleLogger system properties
+
+
+# funky syntax needed to properly preserve arguments with whitespace
+ARGS_PROP="exec.args=$@"
+
+# Use exec to become pid 1, see https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
+exec /opt/jre/bin/java \
+    --add-opens=java.base/java.lang=ALL-UNNAMED \
+    --add-opens=java.base/jdk.internal.loader=ALL-UNNAMED \
+    --add-opens=java.base/java.net=ALL-UNNAMED \
+    --add-opens=java.base/java.security=ALL-UNNAMED \
+    -Xshare:on \
+    -Dorg.slf4j.simpleLogger.logFile=/dev/null \
+    -Dlogback.configurationFile=file:/usr/share/sling-cli/conf/logback-default.xml \
+    -jar /usr/share/sling-cli/launcher/org.apache.sling.feature.launcher.jar \
+    -f /usr/share/sling-cli/sling-cli.feature \
+    -c /usr/share/sling-cli/artifacts \
+    -D "$ARGS_PROP" \
+    -V "asf.username=${ASF_USERNAME}" \
+    -V "asf.password=${ASF_PASSWORD}" \
+    -V "jira.username=${JIRA_USERNAME}" \
+    -V "jira.password=${JIRA_PASSWORD}"
\ No newline at end of file
diff --git a/src/main/resources/scripts/launcher.sh b/src/main/resources/scripts/launcher.sh
index e5094b5..f4ca55e 100755
--- a/src/main/resources/scripts/launcher.sh
+++ b/src/main/resources/scripts/launcher.sh
@@ -11,26 +11,12 @@
 # and limitations under the License.
 # ----------------------------------------------------------------------------------------
 
-# TODO - contribute '-q' flag to launcher OR allow passthrough of org.slf4j.simpleLogger system properties
+BASE="/usr/share/sling-cli/bin/actions"
 
-
-# funky syntax needed to properly preserve arguments with whitespace
-ARGS_PROP="exec.args=$@"
-
-# Use exec to become pid 1, see https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
-exec /opt/jre/bin/java \
-    --add-opens=java.base/java.lang=ALL-UNNAMED \
-    --add-opens=java.base/jdk.internal.loader=ALL-UNNAMED \
-    --add-opens=java.base/java.net=ALL-UNNAMED \
-    --add-opens=java.base/java.security=ALL-UNNAMED \
-    -Xshare:on \
-    -Dorg.slf4j.simpleLogger.logFile=/dev/null \
-    -Dlogback.configurationFile=file:/usr/share/sling-cli/conf/logback-default.xml \
-    -jar /usr/share/sling-cli/launcher/org.apache.sling.feature.launcher.jar \
-    -f /usr/share/sling-cli/sling-cli.feature \
-    -c /usr/share/sling-cli/artifacts \
-    -D "$ARGS_PROP" \
-    -V "asf.username=${ASF_USERNAME}" \
-    -V "asf.password=${ASF_PASSWORD}" \
-    -V "jira.username=${JIRA_USERNAME}" \
-    -V "jira.password=${JIRA_PASSWORD}"
\ No newline at end of file
+echo $@
+if test -f "$BASE/$1.sh"; then
+    echo "Invoking Action $1..."
+    $BASE/$1.sh ${@:14}
+else 
+    $BASE/default.sh $@
+fi
\ No newline at end of file
