Skip to content

Upload and Notify

Upload and Notify #20

Workflow file for this run

# .github/workflows/upload_to_r2.yml
name: Upload and Notify
on:
workflow_dispatch:
jobs:
upload-and-notify:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Get latest release info
id: get_release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
release=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \
https://api.github.com/repos/${{ github.repository }}/releases/latest)
echo "version=$(echo "$release" | jq -r '.tag_name')" >> $GITHUB_OUTPUT
echo "asset_url=$(echo "$release" | jq -r '.assets[] | select(.name | endswith(".fap")) | .browser_download_url')" >> $GITHUB_OUTPUT
description=$(echo "$release" | jq -r '.body' | sed ':a;N;$!ba;s/\n/\\n/g' | sed 's/"/\\"/g')
echo "description=$description" >> $GITHUB_OUTPUT
- name: Download FAP
run: |
curl -L "${{ steps.get_release.outputs.asset_url }}" -o ghost_esp.fap
- name: Install rclone
run: |
curl -O https://downloads.rclone.org/rclone-current-linux-amd64.zip
unzip rclone-current-linux-amd64.zip
sudo install -o root -g root -m 0755 rclone-*-linux-amd64/rclone /usr/local/bin/rclone
- name: Configure rclone
env:
R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
run: |
mkdir -p ~/.config/rclone
echo "[cloudflare]" > ~/.config/rclone/rclone.conf
echo "type = s3" >> ~/.config/rclone/rclone.conf
echo "provider = Cloudflare" >> ~/.config/rclone/rclone.conf
echo "access_key_id = $R2_ACCESS_KEY_ID" >> ~/.config/rclone/rclone.conf
echo "secret_access_key = $R2_SECRET_ACCESS_KEY" >> ~/.config/rclone/rclone.conf
echo "endpoint = https://fb5f7d31bedfe4f3538ddfa6db491962.r2.cloudflarestorage.com" >> ~/.config/rclone/rclone.conf
- name: Upload to R2
env:
R2_BUCKET: "spooksapi"
R2_PATH: "assets/ghost_esp.fap"
run: |
rclone copyto ghost_esp.fap "cloudflare:${R2_BUCKET}/${R2_PATH}" --s3-no-check-bucket --progress
- name: Notify Discord
if: success()
env:
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
run: |
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%S.000Z")
# Truncate description if too long
DESCRIPTION="${{ steps.get_release.outputs.description }}"
if [ ${#DESCRIPTION} -gt 1024 ]; then
DESCRIPTION="${DESCRIPTION:0:1021}..."
fi
# Clean version number
VERSION=$(echo "${{ steps.get_release.outputs.version }}" | sed 's/^v//')
payload=$(cat << EOF
{
"embeds": [{
"title": "Ghost ESP Flipper App Update",
"description": "Version ${VERSION} is now available",
"color": 8847615,
"fields": [
{
"name": "Download Latest Version",
"value": "[Click here to download](https://cdn.spookytools.com/assets/ghost_esp.fap)",
"inline": false
},
{
"name": "Changes in this version",
"value": "$DESCRIPTION",
"inline": false
}
],
"footer": {
"text": "Ghost ESP for Flipper Zero"
},
"timestamp": "${TIMESTAMP}"
}]
}
EOF
)
# Send to Discord with error handling
response=$(curl -s -w "\n%{http_code}" -X POST \
-H "Content-Type: application/json" \
-d "$payload" \
"$DISCORD_WEBHOOK_URL")
status_code=$(echo "$response" | tail -n1)
response_body=$(echo "$response" | sed '$d')
if [ "$status_code" -ne 204 ]; then
echo "Error sending Discord notification. Status code: $status_code"
echo "Response: $response_body"
exit 1
fi