2025-02-19 01:19:42 +01:00
name : Gitea Release
on :
2025-02-19 10:24:43 +01:00
workflow_call :
2025-02-21 23:23:16 +01:00
secrets :
GITEA_TOKEN :
description : 'Token für Gitea API-Zugriff'
required : true
2025-02-23 11:09:49 +01:00
FTP_PASSWORD :
description : 'FTP Password for firmware upload'
required : true
2025-02-19 01:19:42 +01:00
jobs :
2025-02-19 10:24:43 +01:00
create-release :
2025-02-19 09:39:41 +01:00
runs-on : ubuntu-latest
2025-02-19 01:19:42 +01:00
steps :
2025-02-20 15:41:14 +01:00
- uses : actions/checkout@v4
2025-02-22 20:33:51 +01:00
with :
fetch-depth : 0
2025-02-20 15:53:22 +01:00
2025-02-20 15:41:14 +01:00
- name : Set up Python
uses : actions/setup-python@v4
with :
python-version : '3.x'
2025-02-20 15:53:22 +01:00
- name : Install PlatformIO
2025-02-19 11:58:26 +01:00
run : |
2025-02-20 15:41:14 +01:00
python -m pip install --upgrade pip
2025-02-20 16:14:49 +01:00
pip install --upgrade platformio esptool
2025-02-20 15:53:22 +01:00
2025-02-20 18:01:16 +01:00
- name : Install xxd
2025-02-20 18:04:00 +01:00
run : |
sudo apt-get update
sudo apt-get install xxd
2025-02-20 18:01:16 +01:00
2025-02-21 12:34:20 +01:00
- name : Build Firmware
run : |
2025-02-21 21:07:15 +01:00
VERSION=$(grep '^version = ' platformio.ini | cut -d'"' -f2)
2025-02-20 20:33:19 +01:00
2025-02-21 21:07:15 +01:00
# Build firmware and SPIFFS
2025-02-21 12:34:20 +01:00
echo "Building firmware and SPIFFS..."
2025-02-21 11:53:59 +01:00
pio run -e esp32dev
2025-02-21 12:34:20 +01:00
pio run -t buildfs
# Copy firmware binary
2025-02-21 21:44:33 +01:00
cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/upgrade_filaman_firmware_v${VERSION}.bin
2025-02-20 15:07:13 +01:00
2025-02-22 17:18:11 +01:00
# Create SPIFFS binary - direct copy without header
2025-02-22 16:59:56 +01:00
cp .pio/build/esp32dev/spiffs.bin .pio/build/esp32dev/upgrade_filaman_website_v${VERSION}.bin
2025-02-21 17:42:04 +01:00
2025-02-21 21:07:15 +01:00
# Create full binary
2025-02-21 18:07:43 +01:00
(cd .pio/build/esp32dev &&
2025-02-21 18:28:16 +01:00
esptool.py --chip esp32 merge_bin \
--fill-flash-size 4MB \
--flash_mode dio \
--flash_freq 40m \
--flash_size 4MB \
-o filaman_full_${VERSION}.bin \
0x1000 bootloader.bin \
0x8000 partitions.bin \
0x10000 firmware.bin \
2025-02-22 10:53:50 +01:00
0x3D0000 spiffs.bin)
2025-02-21 12:34:20 +01:00
# Verify file sizes
echo "File sizes:"
(cd .pio/build/esp32dev && ls -lh *.bin)
2025-02-21 21:07:15 +01:00
- name : Get version from platformio.ini
id : get_version
2025-02-21 11:53:59 +01:00
run : |
2025-02-21 21:07:15 +01:00
VERSION=$(grep '^version = ' platformio.ini | cut -d'"' -f2)
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
2025-02-22 20:00:42 +01:00
- name : Generate Release Notes
id : release_notes
2025-02-21 12:34:20 +01:00
run : |
2025-02-23 09:18:52 +01:00
# Get the latest tag
2025-02-23 09:53:55 +01:00
LATEST_TAG=$(git for-each-ref --sort=-creatordate --format '%(refname:short)' refs/tags | sed -n '2p')
2025-02-22 20:00:42 +01:00
2025-02-23 09:18:52 +01:00
if [ -n "$LATEST_TAG" ]; then
2025-02-22 20:00:42 +01:00
echo "CHANGES<<EOF" >> $GITHUB_OUTPUT
2025-02-23 09:18:52 +01:00
echo "Changes since ${LATEST_TAG}:" >> $GITHUB_OUTPUT
2025-02-22 20:00:42 +01:00
echo "" >> $GITHUB_OUTPUT
2025-02-23 09:48:15 +01:00
# Get all commits since last release with commit hash and author
2025-02-22 20:00:42 +01:00
echo "### Added" >> $GITHUB_OUTPUT
2025-02-23 09:48:15 +01:00
git log ${LATEST_TAG}..HEAD --pretty=format:"%h - %s (%an)" | grep -iE '^[a-f0-9]+ - (feat|add|new)' | sed 's/^[a-f0-9]* - feat: /- /' >> $GITHUB_OUTPUT || true
2025-02-22 20:00:42 +01:00
echo "" >> $GITHUB_OUTPUT
echo "### Fixed" >> $GITHUB_OUTPUT
2025-02-23 09:48:15 +01:00
git log ${LATEST_TAG}..HEAD --pretty=format:"%h - %s (%an)" | grep -iE '^[a-f0-9]+ - fix' | sed 's/^[a-f0-9]* - fix: /- /' >> $GITHUB_OUTPUT || true
2025-02-22 20:00:42 +01:00
echo "" >> $GITHUB_OUTPUT
echo "### Changed" >> $GITHUB_OUTPUT
2025-02-23 09:48:15 +01:00
git log ${LATEST_TAG}..HEAD --pretty=format:"%h - %s (%an)" | grep -ivE '^[a-f0-9]+ - (feat|fix|add|new)' | sed 's/^[a-f0-9]* - /- /' >> $GITHUB_OUTPUT || true
2025-02-22 20:00:42 +01:00
echo "EOF" >> $GITHUB_OUTPUT
else
2025-02-23 09:18:52 +01:00
# First release
2025-02-22 20:00:42 +01:00
echo "CHANGES<<EOF" >> $GITHUB_OUTPUT
echo "Initial Release" >> $GITHUB_OUTPUT
2025-02-23 09:18:52 +01:00
echo "" >> $GITHUB_OUTPUT
2025-02-22 20:33:51 +01:00
# Add all commits for initial release
echo "### Added" >> $GITHUB_OUTPUT
2025-02-23 09:48:15 +01:00
git log --pretty=format:"%h - %s (%an)" | grep -iE '^[a-f0-9]+ - (feat|add|new)' | sed 's/^[a-f0-9]* - feat: /- /' >> $GITHUB_OUTPUT || true
2025-02-22 20:33:51 +01:00
echo "" >> $GITHUB_OUTPUT
echo "### Fixed" >> $GITHUB_OUTPUT
2025-02-23 09:48:15 +01:00
git log --pretty=format:"%h - %s (%an)" | grep -iE '^[a-f0-9]+ - fix' | sed 's/^[a-f0-9]* - fix: /- /' >> $GITHUB_OUTPUT || true
2025-02-22 20:33:51 +01:00
echo "" >> $GITHUB_OUTPUT
echo "### Changed" >> $GITHUB_OUTPUT
2025-02-23 09:48:15 +01:00
git log --pretty=format:"%h - %s (%an)" | grep -ivE '^[a-f0-9]+ - (feat|fix|add|new)' | sed 's/^[a-f0-9]* - /- /' >> $GITHUB_OUTPUT || true
2025-02-22 20:00:42 +01:00
echo "EOF" >> $GITHUB_OUTPUT
fi
2025-02-21 21:07:15 +01:00
2025-02-21 22:58:24 +01:00
- name : Determine Gitea URL
id : gitea_url
run : |
echo "Debug Environment:"
echo "GITHUB_SERVER_URL=${GITHUB_SERVER_URL:-not set}"
echo "GITEA_SERVER_URL=${GITEA_SERVER_URL:-not set}"
echo "GITHUB_REPOSITORY=${GITHUB_REPOSITORY:-not set}"
echo "GITEA_REPOSITORY=${GITEA_REPOSITORY:-not set}"
2025-02-21 23:07:38 +01:00
echo "RUNNER_NAME=${RUNNER_NAME:-not set}"
2025-02-21 22:58:24 +01:00
# Set API URL based on environment
2025-02-21 23:07:38 +01:00
if [ -n "${GITEA_ACTIONS}" ] || [ -n "${GITEA_REPOSITORY}" ] || [[ "${RUNNER_NAME}" == *"gitea"* ]]; then
GITEA_API_URL="${GITHUB_SERVER_URL}"
GITEA_REPO=$(echo "${GITHUB_REPOSITORY}" | cut -d'/' -f2)
GITEA_OWNER=$(echo "${GITHUB_REPOSITORY}" | cut -d'/' -f1)
2025-02-21 22:58:24 +01:00
else
2025-02-21 23:07:38 +01:00
echo "Error: This workflow is only for Gitea"
2025-02-21 22:58:24 +01:00
exit 1
fi
echo "GITEA_API_URL=${GITEA_API_URL}" >> $GITHUB_OUTPUT
echo "GITEA_REPO=${GITEA_REPO}" >> $GITHUB_OUTPUT
echo "GITEA_OWNER=${GITEA_OWNER}" >> $GITHUB_OUTPUT
2025-02-21 21:07:15 +01:00
- name : Create Gitea Release
2025-02-21 22:34:18 +01:00
env :
GITEA_TOKEN : ${{ secrets.GITEA_TOKEN }}
2025-02-21 22:58:24 +01:00
GITEA_API_URL : ${{ steps.gitea_url.outputs.GITEA_API_URL }}
GITEA_REPO : ${{ steps.gitea_url.outputs.GITEA_REPO }}
GITEA_OWNER : ${{ steps.gitea_url.outputs.GITEA_OWNER }}
2025-02-19 09:39:41 +01:00
run : |
2025-02-21 23:14:30 +01:00
# Debug Token (nur Länge ausgeben für Sicherheit)
echo "Debug: Token length: ${#GITEA_TOKEN}"
if [ -z "$GITEA_TOKEN" ]; then
echo "Error: GITEA_TOKEN is empty"
exit 1
fi
2025-02-21 12:34:20 +01:00
VERSION=${{ steps.get_version.outputs.VERSION }}
2025-02-21 21:07:15 +01:00
cd .pio/build/esp32dev
2025-02-19 10:07:41 +01:00
2025-02-21 22:47:30 +01:00
# Debug-Ausgaben
2025-02-21 23:14:30 +01:00
echo "Debug: API URL: ${GITEA_API_URL}"
echo "Debug: Repository: ${GITEA_OWNER}/${GITEA_REPO}"
2025-02-21 22:47:30 +01:00
2025-02-21 23:44:30 +01:00
# Erstelle zuerst den Release ohne Dateien
2025-02-21 22:47:30 +01:00
echo "Debug: Creating release..."
2025-02-22 20:00:42 +01:00
RELEASE_DATA="{\"tag_name\":\"v${VERSION}\",\"name\":\"v${VERSION}\",\"body\":\"${{ steps.release_notes.outputs.CHANGES }}\"}"
2025-02-21 23:44:30 +01:00
RELEASE_RESPONSE=$(curl -s -w "\n%{http_code}" \
2025-02-21 23:14:30 +01:00
-X POST \
2025-02-21 23:44:30 +01:00
-H "Authorization: token ${GITEA_TOKEN}" \
-H "Content-Type: application/json" \
-d "${RELEASE_DATA}" \
"${GITEA_API_URL}/api/v1/repos/${GITEA_OWNER}/${GITEA_REPO}/releases" )
2025-02-21 23:37:12 +01:00
2025-02-21 23:44:30 +01:00
RELEASE_STATUS=$(echo "$RELEASE_RESPONSE" | tail -n1)
RELEASE_BODY=$(echo "$RELEASE_RESPONSE" | head -n -1)
2025-02-21 22:39:24 +01:00
2025-02-21 23:44:30 +01:00
if [ "$RELEASE_STATUS" != "201" ]; then
2025-02-21 23:14:30 +01:00
echo "Error: Failed to create release"
2025-02-21 23:44:30 +01:00
echo "Response: $RELEASE_BODY"
exit 1
fi
# Extrahiere die Release-ID aus der Antwort
RELEASE_ID=$(echo "$RELEASE_BODY" | grep -o '"id":[0-9]*' | cut -d':' -f2)
# Lade die Dateien einzeln hoch
for file in upgrade_filaman_firmware_v${VERSION}.bin upgrade_filaman_website_v${VERSION}.bin filaman_full_${VERSION}.bin; do
if [ -f "$file" ]; then
echo "Debug: Uploading $file..."
UPLOAD_RESPONSE=$(curl -s -w "\n%{http_code}" \
-X POST \
-H "Authorization: token ${GITEA_TOKEN}" \
-H "Content-Type: application/octet-stream" \
--data-binary @"$file" \
"${GITEA_API_URL}/api/v1/repos/${GITEA_OWNER}/${GITEA_REPO}/releases/${RELEASE_ID}/assets?name=${file}" )
UPLOAD_STATUS=$(echo "$UPLOAD_RESPONSE" | tail -n1)
if [ "$UPLOAD_STATUS" != "201" ]; then
echo "Warning: Failed to upload $file"
echo "Response: $(echo "$UPLOAD_RESPONSE" | head -n -1)"
else
echo "Successfully uploaded $file"
fi
fi
2025-02-23 11:09:49 +01:00
done
- name : Upload Firmware via FTP
if : success()
uses : sebastianpopp/ftp-action@releases/v2
with :
host : "filaman.app"
port : 21
2025-02-23 11:55:11 +01:00
user : ${{ secrets.FTP_USER }}
password : ${{ secrets.FTP_PASSWORD }}
2025-02-23 11:09:49 +01:00
forceSsl : true
localDir : ".pio/build/esp32dev"
remoteDir : "/"
2025-02-23 11:55:11 +01:00
options : "set ftp:ssl-force true; set ftp:ssl-protect-data true; set ssl:verify-certificate no; set ftp:ssl-auth TLS; put filaman_full_*.bin -o filaman_full.bin"