Update release pipeline for correct secret names and simplified ZIP naming #34
82
.github/workflows/release_pipeline.yml
vendored
82
.github/workflows/release_pipeline.yml
vendored
@@ -483,7 +483,7 @@ else:
|
|||||||
|
|
||||||
- name: Validate required secrets and variables
|
- name: Validate required secrets and variables
|
||||||
env:
|
env:
|
||||||
FTP_HOST: ${{ secrets.FTP_HOST }}
|
FTP_SERVER: ${{ secrets.FTP_SERVER }}
|
||||||
FTP_USER: ${{ secrets.FTP_USER }}
|
FTP_USER: ${{ secrets.FTP_USER }}
|
||||||
FTP_KEY: ${{ secrets.FTP_KEY }}
|
FTP_KEY: ${{ secrets.FTP_KEY }}
|
||||||
FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }}
|
FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }}
|
||||||
@@ -498,7 +498,7 @@ else:
|
|||||||
|
|
||||||
missing=()
|
missing=()
|
||||||
|
|
||||||
[ -n "${FTP_HOST:-}" ] || missing+=("FTP_HOST")
|
[ -n "${FTP_SERVER:-}" ] || missing+=("FTP_SERVER")
|
||||||
[ -n "${FTP_USER:-}" ] || missing+=("FTP_USER")
|
[ -n "${FTP_USER:-}" ] || missing+=("FTP_USER")
|
||||||
[ -n "${FTP_PATH:-}" ] || missing+=("FTP_PATH")
|
[ -n "${FTP_PATH:-}" ] || missing+=("FTP_PATH")
|
||||||
|
|
||||||
@@ -643,7 +643,7 @@ else:
|
|||||||
echo "```"
|
echo "```"
|
||||||
} >> "${GITHUB_STEP_SUMMARY}"
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
|
||||||
- name: Build Joomla/Dolibarr ZIP (platform-aware, src-only archive)
|
- name: Build Joomla/Dolibarr ZIP (src-only archive)
|
||||||
id: build
|
id: build
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
@@ -657,51 +657,45 @@ else:
|
|||||||
DIST_DIR="${GITHUB_WORKSPACE}/dist"
|
DIST_DIR="${GITHUB_WORKSPACE}/dist"
|
||||||
mkdir -p "${DIST_DIR}"
|
mkdir -p "${DIST_DIR}"
|
||||||
|
|
||||||
# Detect platform and extension type using dedicated script
|
# Determine suffix based on channel
|
||||||
if ! PLATFORM_INFO=$(python3 "${GITHUB_WORKSPACE}/scripts/release/detect_platform.py" "${GITHUB_WORKSPACE}/src"); then
|
if [ "${CHANNEL}" = "rc" ]; then
|
||||||
echo "ERROR: Could not detect extension platform and type" >> "${GITHUB_STEP_SUMMARY}"
|
SUFFIX="rc"
|
||||||
exit 1
|
else
|
||||||
|
SUFFIX="stable"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "${PLATFORM_INFO}" ]; then
|
ZIP="${REPO_NAME}-${VERSION}-${SUFFIX}.zip"
|
||||||
echo "ERROR: Platform detection returned empty result" >> "${GITHUB_STEP_SUMMARY}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
PLATFORM="${PLATFORM_INFO%%|*}"
|
|
||||||
EXT_TYPE="${PLATFORM_INFO##*|}"
|
|
||||||
|
|
||||||
ZIP="${REPO_NAME}-${VERSION}-${CHANNEL}-${PLATFORM}-${EXT_TYPE}.zip"
|
|
||||||
|
|
||||||
# Create ZIP with development artifact exclusions
|
# Create ZIP with development artifact exclusions
|
||||||
zip -r -X "${DIST_DIR}/${ZIP}" src \
|
# Only zip the contents of the src folder
|
||||||
-x "src/**/.git/**" \
|
cd src
|
||||||
-x "src/**/.github/**" \
|
zip -r -X "${DIST_DIR}/${ZIP}" . \
|
||||||
-x "src/**/.DS_Store" \
|
-x ".git/**" \
|
||||||
-x "src/**/__MACOSX/**" \
|
-x ".github/**" \
|
||||||
-x "src/**/node_modules/**" \
|
-x ".DS_Store" \
|
||||||
-x "src/**/vendor/**" \
|
-x "__MACOSX/**" \
|
||||||
-x "src/**/tests/**" \
|
-x "node_modules/**" \
|
||||||
-x "src/**/Tests/**" \
|
-x "vendor/**" \
|
||||||
-x "src/**/.phpstan.cache/**" \
|
-x "tests/**" \
|
||||||
-x "src/**/.psalm/**" \
|
-x "Tests/**" \
|
||||||
-x "src/**/.rector/**" \
|
-x ".phpstan.cache/**" \
|
||||||
-x "src/**/phpmd-cache/**" \
|
-x ".psalm/**" \
|
||||||
-x "src/**/.php-cs-fixer.cache" \
|
-x ".rector/**" \
|
||||||
-x "src/**/.phplint-cache" \
|
-x "phpmd-cache/**" \
|
||||||
-x "src/**/*.log"
|
-x ".php-cs-fixer.cache" \
|
||||||
|
-x ".phplint-cache" \
|
||||||
|
-x "*.log"
|
||||||
|
cd ..
|
||||||
|
|
||||||
echo "zip_name=${ZIP}" >> "${GITHUB_OUTPUT}"
|
echo "zip_name=${ZIP}" >> "${GITHUB_OUTPUT}"
|
||||||
echo "dist_dir=${DIST_DIR}" >> "${GITHUB_OUTPUT}"
|
echo "dist_dir=${DIST_DIR}" >> "${GITHUB_OUTPUT}"
|
||||||
echo "platform=${PLATFORM}" >> "${GITHUB_OUTPUT}"
|
|
||||||
echo "ext_type=${EXT_TYPE}" >> "${GITHUB_OUTPUT}"
|
|
||||||
|
|
||||||
ZIP_BYTES="$(stat -c%s "${DIST_DIR}/${ZIP}")"
|
ZIP_BYTES="$(stat -c%s "${DIST_DIR}/${ZIP}")"
|
||||||
|
|
||||||
{
|
{
|
||||||
echo "### Build report"
|
echo "### Build report"
|
||||||
echo "```json"
|
echo "```json"
|
||||||
echo "{\"repository\":\"${GITHUB_REPOSITORY}\",\"workflow\":\"${GITHUB_WORKFLOW}\",\"job\":\"${GITHUB_JOB}\",\"run/id\":${GITHUB_RUN_ID},\"run/number\":${GITHUB_RUN_NUMBER},\"run/attempt\":${GITHUB_RUN_ATTEMPT},\"run/url\":\"${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}\",\"actor\":\"${GITHUB_ACTOR}\",\"sha\":\"${GITHUB_SHA}\",\"archive_policy\":\"src_only\",\"platform\":\"${PLATFORM}\",\"extension_type\":\"${EXT_TYPE}\",\"zip\":\"${DIST_DIR}/${ZIP}\",\"zip_bytes\":${ZIP_BYTES}}"
|
echo "{\"repository\":\"${GITHUB_REPOSITORY}\",\"workflow\":\"${GITHUB_WORKFLOW}\",\"job\":\"${GITHUB_JOB}\",\"run/id\":${GITHUB_RUN_ID},\"run/number\":${GITHUB_RUN_NUMBER},\"run/attempt\":${GITHUB_RUN_ATTEMPT},\"run/url\":\"${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}\",\"actor\":\"${GITHUB_ACTOR}\",\"sha\":\"${GITHUB_SHA}\",\"archive_policy\":\"src_only\",\"suffix\":\"${SUFFIX}\",\"zip\":\"${DIST_DIR}/${ZIP}\",\"zip_bytes\":${ZIP_BYTES}}"
|
||||||
echo "```"
|
echo "```"
|
||||||
} >> "${GITHUB_STEP_SUMMARY}"
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
|
||||||
@@ -725,7 +719,7 @@ else:
|
|||||||
- name: Upload ZIP to SFTP (key-preferred, password-fallback, overwrite, verified)
|
- name: Upload ZIP to SFTP (key-preferred, password-fallback, overwrite, verified)
|
||||||
id: sftp
|
id: sftp
|
||||||
env:
|
env:
|
||||||
FTP_HOST: ${{ secrets.FTP_HOST }}
|
FTP_SERVER: ${{ secrets.FTP_SERVER }}
|
||||||
FTP_USER: ${{ secrets.FTP_USER }}
|
FTP_USER: ${{ secrets.FTP_USER }}
|
||||||
FTP_KEY: ${{ secrets.FTP_KEY }}
|
FTP_KEY: ${{ secrets.FTP_KEY }}
|
||||||
FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }}
|
FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }}
|
||||||
@@ -741,7 +735,7 @@ else:
|
|||||||
ZIP="${{ steps.build.outputs.zip_name }}"
|
ZIP="${{ steps.build.outputs.zip_name }}"
|
||||||
DIST_DIR="${{ steps.build.outputs.dist_dir }}"
|
DIST_DIR="${{ steps.build.outputs.dist_dir }}"
|
||||||
|
|
||||||
: "${FTP_HOST:?Missing secret FTP_HOST}"
|
: "${FTP_SERVER:?Missing secret FTP_SERVER}"
|
||||||
: "${FTP_USER:?Missing secret FTP_USER}"
|
: "${FTP_USER:?Missing secret FTP_USER}"
|
||||||
: "${FTP_PATH:?Missing secret FTP_PATH}"
|
: "${FTP_PATH:?Missing secret FTP_PATH}"
|
||||||
|
|
||||||
@@ -753,9 +747,9 @@ else:
|
|||||||
|
|
||||||
PORT="${FTP_PORT:-}"
|
PORT="${FTP_PORT:-}"
|
||||||
if [ -n "${PORT}" ]; then
|
if [ -n "${PORT}" ]; then
|
||||||
HOSTPORT="${FTP_HOST}:${PORT}"
|
HOSTPORT="${FTP_SERVER}:${PORT}"
|
||||||
else
|
else
|
||||||
HOSTPORT="${FTP_HOST}"
|
HOSTPORT="${FTP_SERVER}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
SUFFIX="${FTP_PATH_SUFFIX:-}"
|
SUFFIX="${FTP_PATH_SUFFIX:-}"
|
||||||
@@ -786,7 +780,7 @@ else:
|
|||||||
printf '{'
|
printf '{'
|
||||||
printf '"protocol":"sftp",'
|
printf '"protocol":"sftp",'
|
||||||
printf '"auth_mode":"%s",' "${AUTH_MODE}"
|
printf '"auth_mode":"%s",' "${AUTH_MODE}"
|
||||||
printf '"host":"%s",' "${FTP_HOST}"
|
printf '"host":"%s",' "${FTP_SERVER}"
|
||||||
printf '"port":"%s",' "${PORT:-default}"
|
printf '"port":"%s",' "${PORT:-default}"
|
||||||
printf '"remote_path":"%s",' "${REMOTE_PATH}"
|
printf '"remote_path":"%s",' "${REMOTE_PATH}"
|
||||||
printf '"overwrite":true,'
|
printf '"overwrite":true,'
|
||||||
@@ -826,7 +820,7 @@ else:
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ssh-keyscan -H "${FTP_HOST}" >> ~/.ssh/known_hosts
|
ssh-keyscan -H "${FTP_SERVER}" >> ~/.ssh/known_hosts
|
||||||
|
|
||||||
if [ "${AUTH_MODE}" = "key" ]; then
|
if [ "${AUTH_MODE}" = "key" ]; then
|
||||||
CONNECT="set sftp:connect-program 'ssh -a -x -i ~/.ssh/id_rsa -o PubkeyAuthentication=yes -o PasswordAuthentication=no'"
|
CONNECT="set sftp:connect-program 'ssh -a -x -i ~/.ssh/id_rsa -o PubkeyAuthentication=yes -o PasswordAuthentication=no'"
|
||||||
@@ -840,7 +834,7 @@ else:
|
|||||||
echo "Dry run enabled. Upload skipped." >> "${GITHUB_STEP_SUMMARY}"
|
echo "Dry run enabled. Upload skipped." >> "${GITHUB_STEP_SUMMARY}"
|
||||||
echo "auth_mode=${AUTH_MODE}" >> "${GITHUB_OUTPUT}"
|
echo "auth_mode=${AUTH_MODE}" >> "${GITHUB_OUTPUT}"
|
||||||
echo "remote_path=${REMOTE_PATH}" >> "${GITHUB_OUTPUT}"
|
echo "remote_path=${REMOTE_PATH}" >> "${GITHUB_OUTPUT}"
|
||||||
echo "host=${FTP_HOST}" >> "${GITHUB_OUTPUT}"
|
echo "host=${FTP_SERVER}" >> "${GITHUB_OUTPUT}"
|
||||||
echo "port=${PORT:-default}" >> "${GITHUB_OUTPUT}"
|
echo "port=${PORT:-default}" >> "${GITHUB_OUTPUT}"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
@@ -877,13 +871,13 @@ else:
|
|||||||
{
|
{
|
||||||
echo "### SFTP upload report"
|
echo "### SFTP upload report"
|
||||||
echo "```json"
|
echo "```json"
|
||||||
echo "{\"status\":\"ok\",\"protocol\":\"sftp\",\"auth_mode\":\"${AUTH_MODE}\",\"host\":\"${FTP_HOST}\",\"port\":\"${PORT:-default}\",\"remote_path\":\"${REMOTE_PATH}\",\"zip\":\"${ZIP}\",\"zip_bytes_local\":${ZIP_BYTES_LOCAL},\"overwrite\":true}"
|
echo "{\"status\":\"ok\",\"protocol\":\"sftp\",\"auth_mode\":\"${AUTH_MODE}\",\"host\":\"${FTP_SERVER}\",\"port\":\"${PORT:-default}\",\"remote_path\":\"${REMOTE_PATH}\",\"zip\":\"${ZIP}\",\"zip_bytes_local\":${ZIP_BYTES_LOCAL},\"overwrite\":true}"
|
||||||
echo "```"
|
echo "```"
|
||||||
} >> "${GITHUB_STEP_SUMMARY}"
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
|
||||||
echo "auth_mode=${AUTH_MODE}" >> "${GITHUB_OUTPUT}"
|
echo "auth_mode=${AUTH_MODE}" >> "${GITHUB_OUTPUT}"
|
||||||
echo "remote_path=${REMOTE_PATH}" >> "${GITHUB_OUTPUT}"
|
echo "remote_path=${REMOTE_PATH}" >> "${GITHUB_OUTPUT}"
|
||||||
echo "host=${FTP_HOST}" >> "${GITHUB_OUTPUT}"
|
echo "host=${FTP_SERVER}" >> "${GITHUB_OUTPUT}"
|
||||||
echo "port=${PORT:-default}" >> "${GITHUB_OUTPUT}"
|
echo "port=${PORT:-default}" >> "${GITHUB_OUTPUT}"
|
||||||
|
|
||||||
- name: Create Git tag
|
- name: Create Git tag
|
||||||
|
|||||||
12
.github/workflows/repo_health.yml
vendored
12
.github/workflows/repo_health.yml
vendored
@@ -30,7 +30,7 @@ env:
|
|||||||
ALLOWED_SFTP_PROTOCOLS: sftp
|
ALLOWED_SFTP_PROTOCOLS: sftp
|
||||||
|
|
||||||
# Release policy
|
# Release policy
|
||||||
RELEASE_REQUIRED_VARS: FTP_HOST,FTP_USER,FTP_PATH
|
RELEASE_REQUIRED_VARS: FTP_SERVER,FTP_USER,FTP_PATH
|
||||||
RELEASE_OPTIONAL_VARS: FTP_KEY,FTP_PASSWORD,FTP_PROTOCOL,FTP_PORT,FTP_PATH_SUFFIX
|
RELEASE_OPTIONAL_VARS: FTP_KEY,FTP_PASSWORD,FTP_PROTOCOL,FTP_PORT,FTP_PATH_SUFFIX
|
||||||
|
|
||||||
# Scripts governance policy
|
# Scripts governance policy
|
||||||
@@ -125,7 +125,7 @@ jobs:
|
|||||||
- name: Guardrails release vars
|
- name: Guardrails release vars
|
||||||
env:
|
env:
|
||||||
PROFILE_RAW: ${{ github.event.inputs.profile }}
|
PROFILE_RAW: ${{ github.event.inputs.profile }}
|
||||||
FTP_HOST: ${{ secrets.FTP_HOST }}
|
FTP_SERVER: ${{ secrets.FTP_SERVER }}
|
||||||
FTP_USER: ${{ secrets.FTP_USER }}
|
FTP_USER: ${{ secrets.FTP_USER }}
|
||||||
FTP_KEY: ${{ secrets.FTP_KEY }}
|
FTP_KEY: ${{ secrets.FTP_KEY }}
|
||||||
FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }}
|
FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }}
|
||||||
@@ -236,7 +236,7 @@ jobs:
|
|||||||
- name: Guardrails SFTP connectivity
|
- name: Guardrails SFTP connectivity
|
||||||
env:
|
env:
|
||||||
PROFILE_RAW: ${{ github.event.inputs.profile }}
|
PROFILE_RAW: ${{ github.event.inputs.profile }}
|
||||||
FTP_HOST: ${{ secrets.FTP_HOST }}
|
FTP_SERVER: ${{ secrets.FTP_SERVER }}
|
||||||
FTP_USER: ${{ secrets.FTP_USER }}
|
FTP_USER: ${{ secrets.FTP_USER }}
|
||||||
FTP_KEY: ${{ secrets.FTP_KEY }}
|
FTP_KEY: ${{ secrets.FTP_KEY }}
|
||||||
FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }}
|
FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }}
|
||||||
@@ -288,7 +288,7 @@ jobs:
|
|||||||
printf '%s\n' '### SFTP connectivity'
|
printf '%s\n' '### SFTP connectivity'
|
||||||
printf '%s\n' '| Control | Value |'
|
printf '%s\n' '| Control | Value |'
|
||||||
printf '%s\n' '|---|---|'
|
printf '%s\n' '|---|---|'
|
||||||
printf '%s\n' "| Host | ${FTP_HOST} |"
|
printf '%s\n' "| Host | ${FTP_SERVER} |"
|
||||||
printf '%s\n' "| User | ${FTP_USER} |"
|
printf '%s\n' "| User | ${FTP_USER} |"
|
||||||
printf '%s\n' "| Port | ${port} |"
|
printf '%s\n' "| Port | ${port} |"
|
||||||
printf '%s\n' "| Auth | ${auth_method} |"
|
printf '%s\n' "| Auth | ${auth_method} |"
|
||||||
@@ -319,11 +319,11 @@ jobs:
|
|||||||
ssh-keygen -p -P "${FTP_PASSWORD}" -N '' -f "${key_file}" >/dev/null
|
ssh-keygen -p -P "${FTP_PASSWORD}" -N '' -f "${key_file}" >/dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
printf '%s' "${sftp_cmds}" | sftp "${sftp_v_opt[@]}" -oBatchMode=yes -oStrictHostKeyChecking=no -P "${port}" -i "${key_file}" "${FTP_USER}@${FTP_HOST}" >/tmp/sftp_check.log 2>&1
|
printf '%s' "${sftp_cmds}" | sftp "${sftp_v_opt[@]}" -oBatchMode=yes -oStrictHostKeyChecking=no -P "${port}" -i "${key_file}" "${FTP_USER}@${FTP_SERVER}" >/tmp/sftp_check.log 2>&1
|
||||||
sftp_rc=$?
|
sftp_rc=$?
|
||||||
elif [ -n "${FTP_PASSWORD:-}" ]; then
|
elif [ -n "${FTP_PASSWORD:-}" ]; then
|
||||||
command -v sshpass >/dev/null 2>&1 || (sudo apt-get update -qq && sudo apt-get install -y sshpass >/dev/null)
|
command -v sshpass >/dev/null 2>&1 || (sudo apt-get update -qq && sudo apt-get install -y sshpass >/dev/null)
|
||||||
printf '%s' "${sftp_cmds}" | sshpass -p "${FTP_PASSWORD}" sftp "${sftp_v_opt[@]}" -oBatchMode=no -oStrictHostKeyChecking=no -P "${port}" "${FTP_USER}@${FTP_HOST}" >/tmp/sftp_check.log 2>&1
|
printf '%s' "${sftp_cmds}" | sshpass -p "${FTP_PASSWORD}" sftp "${sftp_v_opt[@]}" -oBatchMode=no -oStrictHostKeyChecking=no -P "${port}" "${FTP_USER}@${FTP_SERVER}" >/tmp/sftp_check.log 2>&1
|
||||||
sftp_rc=$?
|
sftp_rc=$?
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user