name: Draft Release on: workflow_dispatch: jobs: create-draft-release: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Prepare folder run: mkdir -p all-artifacts - name: Poll for expected artifacts run: | echo "Polling (every 15 seconds) until all required artifacts are available..." REQUIRED=("linux-x64-appimage" "linux-x64-snap" "linux-arm64-snap" "builds" "builds-x64" "builds-arm64") while true; do echo "⏳ Checking artifacts..." # Clean up and re-download artifacts each poll rm -rf all-artifacts mkdir -p all-artifacts # Download all available artifacts for this run gh run download --dir all-artifacts || true missing=0 for ARTIFACT in "${REQUIRED[@]}"; do if [ ! -d "all-artifacts/$ARTIFACT" ]; then echo "❌ Missing: $ARTIFACT" missing=1 fi done if [ "$missing" -eq 0 ]; then echo "✅ All required artifacts found." break fi echo "🔁 Not all artifacts found. Retrying in 15 seconds..." sleep 15 done env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Extract ZIP files and prepare list of files to upload run: | echo "🔍 Extracting ZIP files and collecting allowed files..." # Extract all ZIPs to their own folder find all-artifacts -type f -name '*.zip' | while read zipfile; do extract_dir="${zipfile%.zip}" echo "📦 Extracting $zipfile to $extract_dir" unzip -o "$zipfile" -d "$extract_dir" done # Find allowed files only inside extracted directories find all-artifacts -type d | while read dir; do if [[ "$dir" == *.zip ]]; then # skip actual zip files continue fi find "$dir" -type f \( -iname '*.exe' -o -iname '*.dmg' -o -iname '*.snap' -o -iname '*.AppImage' \) done > upload-files.txt echo "Files to upload:" cat upload-files.txt - name: Create GitHub Draft Release uses: softprops/action-gh-release@v2 with: tag_name: "draft-${{ github.run_number }}" draft: true files: $(cat upload-files.txt) env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}