Skip to content

Commit 7adcd62

Browse files
authored
chore: sanitize github actions workflows (#89)
1 parent a553b4e commit 7adcd62

4 files changed

Lines changed: 73 additions & 11 deletions

File tree

.github/actions/decode_signing_key_action/action.yml

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,20 @@ runs:
1414
steps:
1515
# After decoding the secret key, place the file in signing_file_path
1616
- run: |
17+
set -euo pipefail
1718
umask 077
18-
echo "${{inputs.signing_key_file}}" > ~/secretKey.gpg.b64
19-
base64 -d ~/secretKey.gpg.b64 > ${{ inputs.signing_file_path }}
20-
chmod 600 ${{ inputs.signing_file_path }}
19+
20+
# Validate signing_file_path to prevent path traversal
21+
if [[ ! "${SIGNING_FILE_PATH}" =~ ^/[a-zA-Z0-9/_.-]+$ ]]; then
22+
echo "ERROR: Invalid signing file path format"
23+
exit 1
24+
fi
25+
26+
# Safely handle the signing key file
27+
echo "${SIGNING_KEY_FILE_CONTENT}" > ~/secretKey.gpg.b64
28+
base64 -d ~/secretKey.gpg.b64 > "${SIGNING_FILE_PATH}"
29+
chmod 600 "${SIGNING_FILE_PATH}"
2130
shell: bash
31+
env:
32+
SIGNING_KEY_FILE_CONTENT: ${{ inputs.signing_key_file }}
33+
SIGNING_FILE_PATH: ${{ inputs.signing_file_path }}

.github/actions/publish_maven_central/action.yml

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,14 +83,33 @@ runs:
8383
SIGNING_KEY_FILE: ${{ inputs.signing_key_file }}
8484
USE_SNAPSHOT: ${{ inputs.use_snapshot }}
8585
AUTO_PUBLISH: ${{ inputs.auto_publish }}
86+
WORKSPACE_DIR: ${{ github.workspace }}
8687
run: |
8788
set -euo pipefail
8889
echo "Publishing via Central Portal Maven plugin (NMCP) - module :library"
89-
if [ ! -d "${{ github.workspace }}/library" ]; then
90+
91+
# Validate workspace directory path
92+
if [[ ! "${WORKSPACE_DIR}" =~ ^/[a-zA-Z0-9/_.-]+$ ]]; then
93+
echo "ERROR: Invalid workspace directory path format" >&2
94+
exit 1
95+
fi
96+
97+
if [ ! -d "${WORKSPACE_DIR}/library" ]; then
9098
echo "Error: library directory not found" >&2
9199
exit 1
92100
fi
93101
102+
# Validate boolean inputs
103+
if [[ ! "${USE_SNAPSHOT}" =~ ^(true|false)$ ]]; then
104+
echo "ERROR: Invalid USE_SNAPSHOT value. Must be 'true' or 'false'" >&2
105+
exit 1
106+
fi
107+
108+
if [[ ! "${AUTO_PUBLISH}" =~ ^(true|false)$ ]]; then
109+
echo "ERROR: Invalid AUTO_PUBLISH value. Must be 'true' or 'false'" >&2
110+
exit 1
111+
fi
112+
94113
echo "Importing GPG key for signing"
95114
gpg --batch --import "${SIGNING_KEY_FILE}"
96115
@@ -115,7 +134,14 @@ runs:
115134
sleep 5
116135
done
117136
118-
VERSION=$(grep -o '"sdkVersionName"\s*:\s*"[^"]*"' ${{ github.workspace }}/build.gradle | grep -o '"[^"]*"$' | tr -d '"')
137+
VERSION=$(grep -o '"sdkVersionName"\s*:\s*"[^"]*"' "${WORKSPACE_DIR}/build.gradle" | grep -o '"[^"]*"$' | tr -d '"')
138+
139+
# Validate extracted version format
140+
if ! echo "${VERSION}" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$'; then
141+
echo "ERROR: Invalid version format extracted from build.gradle: ${VERSION}" >&2
142+
exit 1
143+
fi
144+
119145
if [ "${USE_SNAPSHOT}" = "true" ]; then
120146
[[ "${VERSION}" != *-SNAPSHOT ]] && VERSION="${VERSION}-SNAPSHOT"
121147
echo "Publishing SNAPSHOT version: ${VERSION}"
@@ -138,6 +164,7 @@ runs:
138164
echo "Library POM has all required Maven Central configuration"
139165
140166
echo "Deploying to Central Portal via Maven plugin"
141-
bash -e ./deploy-snapshot-to-central.sh
167+
set -euo pipefail
168+
./deploy-snapshot-to-central.sh
142169
143170
echo "NMCP publish finished. Check deployments at https://central.sonatype.com/publishing/deployments"

.github/workflows/release-manual.yml

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,35 @@ jobs:
5353
signing_key_file: ${{ secrets.SIGNING_KEY_FILE }}
5454
signing_file_path: ${{ env.SIGNING_KEY_FILE_PATH }}
5555

56+
- name: Validate version input
57+
if: ${{ inputs.version != '' }}
58+
env:
59+
INPUT_VERSION: ${{ inputs.version }}
60+
run: |
61+
# Validate version format: must be semantic version (e.g., 1.2.3, 1.2.3-beta, 1.2.3-RC1)
62+
if ! echo "${INPUT_VERSION}" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9\.]+)?$'; then
63+
echo "ERROR: Invalid version format: ${INPUT_VERSION}"
64+
echo "Version must match semantic versioning format (e.g., 1.2.3, 1.2.3-beta)"
65+
exit 1
66+
fi
67+
68+
# Check length to prevent excessively long inputs
69+
if [ ${#INPUT_VERSION} -gt 50 ]; then
70+
echo "ERROR: Version string exceeds maximum length of 50 characters"
71+
exit 1
72+
fi
73+
74+
echo "VALIDATED_VERSION=${INPUT_VERSION}" >> $GITHUB_ENV
75+
echo "Version validated: ${INPUT_VERSION}"
76+
5677
- name: Optionally set version in Gradle
5778
if: ${{ inputs.version != '' }}
58-
run: ./gradlew -PversionParam="${{ inputs.version }}" changeReleaseVersion
79+
run: ./gradlew -PversionParam="${VALIDATED_VERSION}" changeReleaseVersion
5980

6081
- name: Determine version
6182
run: |
62-
if [ -n "${{ inputs.version }}" ]; then
63-
echo "VERSION=${{ inputs.version }}" >> $GITHUB_ENV
83+
if [ -n "${VALIDATED_VERSION:-}" ]; then
84+
echo "VERSION=${VALIDATED_VERSION}" >> $GITHUB_ENV
6485
else
6586
VERSION=$(grep -o '"sdkVersionName"\s*:\s*"[^"]*"' build.gradle | grep -o '"[^\"]*"$' | tr -d '"')
6687
echo "VERSION=${VERSION}" >> $GITHUB_ENV
@@ -80,8 +101,9 @@ jobs:
80101
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}
81102
SIGNING_KEY_FILE: ${{ env.SIGNING_KEY_FILE_PATH }}
82103
run: |
104+
set -euo pipefail
83105
echo "Running direct deployment script..."
84-
bash -e ./deploy-to-maven-central.sh --no-auto-publish
106+
./deploy-to-maven-central.sh --no-auto-publish
85107
86108
- name: Configure Git user
87109
run: |

.github/workflows/release.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,9 @@ jobs:
112112
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}
113113
SIGNING_KEY_FILE: ${{ env.SIGNING_KEY_FILE_PATH }}
114114
run: |
115+
set -euo pipefail
115116
echo "Running direct deployment script..."
116-
bash -e ./deploy-to-maven-central.sh --no-auto-publish
117+
./deploy-to-maven-central.sh --no-auto-publish
117118
118119
- name: Cleanup signing key files
119120
if: always()

0 commit comments

Comments
 (0)