Adding the check-release and support for non-Java actions
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