turingears/gitlab-scanner
Imagen para generar badget con la calidad del codigo proporcionada por gitlab
26
Dockerfile para la construcción de la imagen Docker
FROM alpine:3.18
WORKDIR /app
RUN apk add --no-cache \
curl \
jq
COPY badges.sh /app/badges.sh
RUN chmod +x /app/badges.sh
CMD ["sh", "-c", "source /app/badges.sh"]
docker run --rm \
-v $(pwd)/gl-code-quality-report.json:/app/gl-code-quality-report.json \
-e PRIVATE_TOKEN=${TOKEN_GT} \
-e PIPELINE_ID=${CI_PIPELINE_ID} \
-e PROJECT_ID=${CI_PROJECT_ID} \
turingears/gitlab-scanner:latest
Este script se utiliza para crear los badges según su severidad y luego crear o actualizar en Gitlab a través de su api.
#!/bin/bash
json_data=$(cat gl-code-quality-report.json)
blocker_count=$(echo "$json_data" | jq '[.[] | select(.severity == "blocker")] | length')
critical_count=$(echo "$json_data" | jq '[.[] | select(.severity == "critical")] | length')
major_count=$(echo "$json_data" | jq '[.[] | select(.severity == "major")] | length')
minor_count=$(echo "$json_data" | jq '[.[] | select(.severity == "minor")] | length')
info_count=$(echo "$json_data" | jq '[.[] | select(.severity == "info")] | length')
generate_badge() {
local count="$1"
local severity="$2"
local color="$3"
local badge_name="Code Quality ($severity)"
local link_url="https://gitlab.com/%{project_path}/-/pipelines/${PIPELINE_ID}/codequality_report"
local image_url
if [ $count -gt 0 ]; then
image_url="https://img.shields.io/badge/Code_Quality_${severity}-${count}_found-${color}"
else
image_url="https://img.shields.io/badge/Code_Quality_${severity}-passed-ligthgreen"
fi
update_or_create_badge "$badge_name" "$link_url" "$image_url"
}
update_or_create_badge() {
local badge_name="$1"
local link_url="$2"
local image_url="$3"
GITLAB_API_URL="https://gitlab.com/api/v4"
PROJECT_ID=${PROJECT_ID}
PRIVATE_TOKEN=${PRIVATE_TOKEN}
LIST_ENDPOINT="$GITLAB_API_URL/projects/$PROJECT_ID/badges"
response=$(curl --silent -H "PRIVATE-TOKEN: $PRIVATE_TOKEN" "$LIST_ENDPOINT")
badge_id=$(echo "$response" | jq -r ".[] | select(.name==\"$badge_name\") | .id")
if [ -n "$badge_id" ]; then
UPDATE_ENDPOINT="$LIST_ENDPOINT/$badge_id"
curl -X PUT "$UPDATE_ENDPOINT" \
--silent -H "PRIVATE-TOKEN: $PRIVATE_TOKEN" \
--data-urlencode "name=$badge_name" \
--data-urlencode "link_url=$link_url" \
--data-urlencode "image_url=$image_url" > /dev/null 2>&1
echo "Badge '$badge_name' actualizado exitosamente."
else
curl -X POST "$LIST_ENDPOINT" \
--silent -H "PRIVATE-TOKEN: $PRIVATE_TOKEN" \
--data-urlencode "name=$badge_name" \
--data-urlencode "link_url=$link_url" \
--data-urlencode "image_url=$image_url" > /dev/null 2>&1
echo "Badge '$badge_name' creado exitosamente."
fi
}
generate_badge "$blocker_count" "Blocker" "ff0000"
generate_badge "$critical_count" "Critical" "red"
generate_badge "$major_count" "Major" "orange"
generate_badge "$minor_count" "Minor" "yellow"
generate_badge "$info_count" "Info" "blue"
docker pull turingears/gitlab-scanner