Skip to content

Commit aa2b540

Browse files
committed
use the pre-built docker image in place of a pip install
Signed-off-by: tdruez <tdruez@aboutcode.org>
1 parent 6e900c9 commit aa2b540

File tree

1 file changed

+65
-53
lines changed

1 file changed

+65
-53
lines changed

action.yml

Lines changed: 65 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -37,88 +37,98 @@ inputs:
3737
packages and dependencies.
3838
required: false
3939
default: "false"
40-
python-version:
41-
description: "Python version."
42-
default: "3.13"
43-
scancodeio-repo-branch:
44-
description: "Branch to install ScanCode.io from the GitHub repository (optional)"
45-
required: false
46-
default: ""
47-
scancodeio-extras:
48-
description: "ScanCode.io optional dependencies (comma-separated) (optional)."
49-
required: false
50-
default: ""
40+
scancodeio-image:
41+
description: "ScanCode.io Docker image to use."
42+
default: "ghcr.io/aboutcode-org/scancode.io:sha256-057627791ae2748b9ce980b0bd21bd6b521c77b7b2e24c074ef7ba98119a611f"
5143

5244
runs:
5345
using: "composite"
5446
steps:
55-
- name: Set up Python
56-
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
57-
with:
58-
python-version: ${{ inputs.python-version }}
47+
- name: Validate inputs
48+
shell: bash
49+
env:
50+
INPUT_IMAGE: ${{ inputs.scancodeio-image }}
51+
INPUT_PROJECT_NAME: ${{ inputs.project-name }}
52+
INPUT_FAIL_LEVEL: ${{ inputs.compliance-fail-level }}
53+
INPUT_PIPELINES: ${{ inputs.pipelines }}
54+
run: |
55+
# Docker image ref: registry/name:tag or registry/name@sha256:digest
56+
if [[ ! "$INPUT_IMAGE" =~ ^[a-zA-Z0-9./_:@-]+$ ]]; then
57+
echo "::error::Invalid image name: $INPUT_IMAGE"
58+
exit 1
59+
fi
60+
61+
# Project name: alphanumeric, spaces, hyphens, underscores, dots
62+
if [[ ! "$INPUT_PROJECT_NAME" =~ ^[a-zA-Z0-9[:space:]._-]+$ ]]; then
63+
echo "::error::Invalid project name: $INPUT_PROJECT_NAME"
64+
exit 1
65+
fi
66+
67+
# Fail level: only known values
68+
if [[ ! "$INPUT_FAIL_LEVEL" =~ ^(ERROR|WARNING|MISSING)$ ]]; then
69+
echo "::error::Invalid compliance-fail-level: $INPUT_FAIL_LEVEL"
70+
exit 1
71+
fi
72+
73+
# Pipeline names: alphanumeric, underscores, commas
74+
if [[ ! "$INPUT_PIPELINES" =~ ^[a-zA-Z0-9_,[:space:]]+$ ]]; then
75+
echo "::error::Invalid pipelines value: $INPUT_PIPELINES"
76+
exit 1
77+
fi
5978
6079
- name: Set up environment
6180
shell: bash
6281
env:
6382
INPUT_PROJECT_NAME: ${{ inputs.project-name }}
83+
INPUT_IMAGE: ${{ inputs.scancodeio-image }}
6484
run: |
6585
echo "SECRET_KEY=$(openssl rand -base64 32)" >> "$GITHUB_ENV"
6686
echo "SCANCODEIO_DB_NAME=scancodeio" >> "$GITHUB_ENV"
6787
echo "SCANCODEIO_DB_USER=scancodeio" >> "$GITHUB_ENV"
6888
echo "SCANCODEIO_DB_PASSWORD=scancodeio" >> "$GITHUB_ENV"
69-
# Sanitize project name for artifact usage
89+
echo "SCANCODEIO_WORKSPACE_LOCATION=/workspace/.scancodeio" >> "$GITHUB_ENV"
90+
echo "SCANCODEIO_IMAGE=$INPUT_IMAGE" >> "$GITHUB_ENV"
7091
SAFE_PROJECT_NAME="${INPUT_PROJECT_NAME//[^a-zA-Z0-9._-]/_}"
7192
echo "SAFE_PROJECT_NAME=$SAFE_PROJECT_NAME" >> "$GITHUB_ENV"
7293
73-
- name: Detect if ScanCode.io is already installed
74-
shell: bash
75-
run: |
76-
if command -v scanpipe &> /dev/null; then
77-
echo "ScanCode.io already installed."
78-
echo "SCANCODEIO_IS_INSTALLED=true" >> "$GITHUB_ENV"
79-
else
80-
echo "ScanCode.io not found."
81-
echo "SCANCODEIO_IS_INSTALLED=false" >> "$GITHUB_ENV"
82-
fi
83-
8494
- name: Start and setup the PostgreSQL service
85-
if: env.SCANCODEIO_IS_INSTALLED != 'true'
8695
shell: bash
8796
run: |
8897
sudo systemctl start postgresql.service
8998
sudo -u postgres createuser --no-createrole --no-superuser --login --inherit --createdb "$SCANCODEIO_DB_USER"
9099
sudo -u postgres psql -c "ALTER USER $SCANCODEIO_DB_USER WITH ENCRYPTED PASSWORD '$SCANCODEIO_DB_PASSWORD'"
91100
sudo -u postgres createdb --owner=scancodeio --encoding=UTF-8 "$SCANCODEIO_DB_NAME"
92101
93-
- name: Generate scancodeio pip install argument
94-
if: env.SCANCODEIO_IS_INSTALLED != 'true'
102+
- name: Write scanpipe wrapper script
95103
shell: bash
96-
env:
97-
INPUT_EXTRAS: ${{ inputs.scancodeio-extras }}
98104
run: |
99-
SCANCODEIO_PIP_PACKAGE_ARG="scancodeio"
100-
TRIMMED_EXTRAS="$(echo "$INPUT_EXTRAS" | tr -d '[:space:]')"
101-
if [ -n "$TRIMMED_EXTRAS" ]; then
102-
SCANCODEIO_PIP_PACKAGE_ARG+="[$TRIMMED_EXTRAS]"
103-
fi
104-
echo "SCANCODEIO_PIP_PACKAGE_ARG=${SCANCODEIO_PIP_PACKAGE_ARG}" >> "$GITHUB_ENV"
105+
cat > "$RUNNER_TEMP/scanpipe" << 'EOF'
106+
#!/usr/bin/env bash
107+
set -euo pipefail
108+
exec docker run --rm \
109+
--network host \
110+
--read-only \
111+
--tmpfs /tmp \
112+
--cap-drop ALL \
113+
--security-opt no-new-privileges \
114+
-e SECRET_KEY \
115+
-e SCANCODEIO_DB_NAME \
116+
-e SCANCODEIO_DB_USER \
117+
-e SCANCODEIO_DB_PASSWORD \
118+
-e SCANCODEIO_DB_HOST=localhost \
119+
-e SCANCODEIO_WORKSPACE_LOCATION \
120+
-v "$GITHUB_WORKSPACE:/workspace" \
121+
"$SCANCODEIO_IMAGE" \
122+
scanpipe "$@"
123+
EOF
124+
chmod +x "$RUNNER_TEMP/scanpipe"
125+
echo "$RUNNER_TEMP" >> "$GITHUB_PATH"
105126
106-
- name: Install ScanCode.io (only if not already installed)
107-
if: env.SCANCODEIO_IS_INSTALLED != 'true'
127+
- name: Pull the ScanCode.io image
108128
shell: bash
109-
env:
110-
INPUT_REPO_BRANCH: ${{ inputs.scancodeio-repo-branch }}
111-
run: |
112-
if [ -z "$INPUT_REPO_BRANCH" ]; then
113-
echo "Installing the latest ${SCANCODEIO_PIP_PACKAGE_ARG} release from PyPI"
114-
pip install --upgrade "$SCANCODEIO_PIP_PACKAGE_ARG"
115-
else
116-
echo "Installing ${SCANCODEIO_PIP_PACKAGE_ARG} from the GitHub branch: $INPUT_REPO_BRANCH"
117-
pip install "${SCANCODEIO_PIP_PACKAGE_ARG} @ git+https://github.com/aboutcode-org/scancode.io.git@${INPUT_REPO_BRANCH}"
118-
fi
129+
run: docker pull "$SCANCODEIO_IMAGE"
119130

120131
- name: Run migrations to prepare the database
121-
if: env.SCANCODEIO_IS_INSTALLED != 'true'
122132
shell: bash
123133
run: scanpipe migrate --verbosity 0
124134

@@ -130,6 +140,7 @@ runs:
130140
IFS=',' read -ra PIPELINES <<< "$INPUT_PIPELINES"
131141
PIPELINE_CLI_ARGS=""
132142
for pipeline in "${PIPELINES[@]}"; do
143+
pipeline="$(echo "$pipeline" | tr -d '[:space:]')"
133144
PIPELINE_CLI_ARGS+=" --pipeline $pipeline"
134145
done
135146
echo "PIPELINE_CLI_ARGS=${PIPELINE_CLI_ARGS}" >> "$GITHUB_ENV"
@@ -164,8 +175,9 @@ runs:
164175
INPUT_PROJECT_NAME: ${{ inputs.project-name }}
165176
run: |
166177
project_status=$(scanpipe status --project "$INPUT_PROJECT_NAME")
167-
work_directory=$(echo "$project_status" | grep -oP 'Work directory:\s*\K[^\n]+')
168-
echo "PROJECT_WORK_DIRECTORY=$work_directory" >> "$GITHUB_ENV"
178+
container_work_dir=$(echo "$project_status" | grep -oP 'Work directory:\s*\K[^\n]+')
179+
host_work_dir="$GITHUB_WORKSPACE${container_work_dir#/workspace}"
180+
echo "PROJECT_WORK_DIRECTORY=$host_work_dir" >> "$GITHUB_ENV"
169181
170182
- name: Copy input files to project work directory
171183
if: ${{ !inputs.input-urls }}

0 commit comments

Comments
 (0)