diff --git a/.github/workflows/skms.yaml b/.github/workflows/skms.yaml new file mode 100644 index 0000000000..54d442d0ba --- /dev/null +++ b/.github/workflows/skms.yaml @@ -0,0 +1,115 @@ +name: Create CMR in SKMS + +on: + pull_request: + types: + - closed + branches: + - skms-release-test + +jobs: + create-cmr: + # Only run this workflow on pull requests that have merged and not manually closed by user + if: github.event.pull_request.merged == true + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + # Runs a single command using the runners shell for shell validation + - name: Run a one-line script + run: echo Starting CMR Action... + + # Validate dependencies before continuing CMR creation + - name: Check Dependencies + run: | + if ! type "jq" >/dev/null; then + echo "jq is required but not installed" + exit 1 + fi + + if ! type "curl" >/dev/null; then + echo "curl is required but not installed" + exit 1 + fi + + echo "Dependencies check was successful" + + # Run command for creating CMR in SKMS system + - run: | + DEFAULT_SKMS_URL='api.skms.adobe.com' + + function skms_request() { + local username=$1 + local passkey=$2 + local object=$3 + local method=$4 + local method_params=$5 + local url=$6 + + if [ -z "$username" ]; then + echo "First parameter missing, must be SKMS username" + return 1 + fi + + if [ -z "$passkey" ]; then + echo "Second parameter missing, must be SKMS passkey" + return 1 + fi + + if [ -z "$object" ]; then + echo "Third parameter missing, must be an SKMS dao object" + return 1 + fi + + if [ -z "$method" ]; then + echo "Fourth parameter missing, must be SKMS dao method" + return 1 + fi + + if [ -z "$method_params" ]; then + method_params='{}' + fi + + if [ -z "$url" ]; then + url=$DEFAULT_SKMS_URL + fi + + local params="{\"_username\":\"${username}\",\"_passkey\":\"${passkey}\",\"_object\":\"${object}\",\"_method\": \"${method}\"}" + params=$(echo "$params $method_params" | jq -s add) + + local response=$(curl --write-out "%{http_code}" --silent --output response.txt https://${url}/web_api --data-urlencode "_parameters=${params}") + + if [ $response != "200" ]; then + echo "CURL call returned HTTP status code: $response" + exit 1 + elif grep -q "\"status\":\"error\"" response.txt; then + echo "CMR creation failed with response: " + cat response.txt + exit 1 + else + echo "CMR creation was successful" + fi + } + + function sanitizeStr() { + local str=$1 + + if [ -z "$str" ]; then + echo "First parameter missing, must be a valid string" + return 1 + fi + + str="${str//\"/""}" + str="${str//\'/""}" + str="${str//$'\r\n\t'/ }" + + echo "$str" + } + + release_title=$(sanitizeStr "${{ github.event.pull_request.title }}") + release_details=$(sanitizeStr "${{ github.event.pull_request.body }}") + release_summary=Release_Title--"${release_title}"--Release_Details--"${release_details}"--Pull_Request_Number--"${{ github.event.pull_request.number }}"--Pull_Request_Created_At--"${{ github.event.pull_request.created_at }}"--Pull_Request_Merged_At--"${{ github.event.pull_request.merged_at }}"-- + echo "{$release_summary}" + + skms_request '${{ secrets.SKMS_USER }}' '${{ secrets.SKMS_PASS }}' CmrDao createCmrFromPreapprovedChangeModel '{"change_executor":"${{ github.actor }}","maintenance_window_end_time":"${{ github.event.pull_request.merged_at }}","maintenance_window_start_time":"${{ github.event.pull_request.created_at }}","preapproved_change_model_id":"${{ secrets.SKMS_CHANGE_MODEL_ID }}","summary":"${release_summary}"}'