Upload Framework Packages to GitHub Releases
Prerequisites
-
GitHub Personal Access Token:
# Set environment variable
export GITHUB_TOKEN=your_token_here
# Or pass via --token flag -
Git Tags Created:
cd /Users/rms/Documents/projects/ai-dev-kit
# Create tags for each framework
git tag -a kanban-v2.1.0 -m "Release kanban framework v2.1.0"
git tag -a workflow-mgt-v2.1.4 -m "Release workflow mgt framework v2.1.3"
git tag -a numbering-versioning-v2.0.0 -m "Release numbering & versioning framework v2.0.0"
git tag -a doc-lifecycle-v1.0.0 -m "Release doc-lifecycle framework v1.0.0"
git tag -a debug-path-v1.0.0 -m "Release debug-path framework v1.0.0"
# Push tags to remote
git push origin --tags -
Packages Built:
- Packages must exist in
packages/frameworks/dist/packages/ - Run build script first if not already built
- Packages must exist in
Method 1: Upload All Packages at Once (Recommended)
cd /Users/rms/Documents/projects/ai-dev-kit
# Set GitHub token
export GITHUB_TOKEN=your_token_here
# Upload all packages
python3 "packages/frameworks/workflow mgt/scripts/upload_all_packages.py" \
--token $GITHUB_TOKEN \
--repo earlution/ai-dev-kit \
--verbose
Dry Run (Test First)
python3 "packages/frameworks/workflow mgt/scripts/upload_all_packages.py" \
--token $GITHUB_TOKEN \
--dry-run
Method 2: Upload Individual Packages
cd /Users/rms/Documents/projects/ai-dev-kit
PACKAGES_DIR="packages/frameworks/dist/packages"
UPLOAD_SCRIPT="packages/frameworks/workflow mgt/scripts/upload_to_github_release.py"
REPO="earlution/ai-dev-kit"
# Upload kanban package
python3 "$UPLOAD_SCRIPT" \
"$PACKAGES_DIR/kanban-v2.1.0.tar.gz" \
--hash-file "$PACKAGES_DIR/kanban-v2.1.0.tar.gz.sha256" \
--tag kanban-v2.1.0 \
--token $GITHUB_TOKEN \
--repo $REPO \
--verbose
# Upload workflow mgt package
python3 "$UPLOAD_SCRIPT" \
"$PACKAGES_DIR/workflow-mgt-v2.1.4.tar.gz" \
--hash-file "$PACKAGES_DIR/workflow-mgt-v2.1.4.tar.gz.sha256" \
--tag workflow-mgt-v2.1.4 \
--token $GITHUB_TOKEN \
--repo $REPO \
--verbose
# Upload numbering & versioning package
python3 "$UPLOAD_SCRIPT" \
"$PACKAGES_DIR/numbering-versioning-v2.0.0.tar.gz" \
--hash-file "$PACKAGES_DIR/numbering-versioning-v2.0.0.tar.gz.sha256" \
--tag numbering-versioning-v2.0.0 \
--token $GITHUB_TOKEN \
--repo $REPO \
--verbose
# Upload doc-lifecycle package
python3 "$UPLOAD_SCRIPT" \
"$PACKAGES_DIR/doc-lifecycle-v1.0.0.tar.gz" \
--hash-file "$PACKAGES_DIR/doc-lifecycle-v1.0.0.tar.gz.sha256" \
--tag doc-lifecycle-v1.0.0 \
--token $GITHUB_TOKEN \
--repo $REPO \
--verbose
# Upload debug-path package
python3 "$UPLOAD_SCRIPT" \
"$PACKAGES_DIR/debug-path-v1.0.0.tar.gz" \
--hash-file "$PACKAGES_DIR/debug-path-v1.0.0.tar.gz.sha256" \
--tag debug-path-v1.0.0 \
--token $GITHUB_TOKEN \
--repo $REPO \
--verbose
Method 3: Bash Script (All at Once)
#!/bin/bash
# upload_all.sh
cd /Users/rms/Documents/projects/ai-dev-kit
PACKAGES_DIR="packages/frameworks/dist/packages"
UPLOAD_SCRIPT="packages/frameworks/workflow mgt/scripts/upload_to_github_release.py"
REPO="earlution/ai-dev-kit"
# Check token
if [ -z "$GITHUB_TOKEN" ]; then
echo "❌ Error: GITHUB_TOKEN environment variable not set"
exit 1
fi
# Array of packages: (package_file, tag)
declare -a PACKAGES=(
"kanban-v2.1.0.tar.gz:kanban-v2.1.0"
"workflow-mgt-v2.1.4.tar.gz:workflow-mgt-v2.1.4"
"numbering-versioning-v2.0.0.tar.gz:numbering-versioning-v2.0.0"
"doc-lifecycle-v1.0.0.tar.gz:doc-lifecycle-v1.0.0"
"debug-path-v1.0.0.tar.gz:debug-path-v1.0.0"
)
for package_info in "${PACKAGES[@]}"; do
IFS=':' read -r package_file tag <<< "$package_info"
hash_file="${package_file}.sha256"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📤 Uploading: $package_file (tag: $tag)"
if [ ! -f "$PACKAGES_DIR/$package_file" ]; then
echo "❌ Package not found: $PACKAGES_DIR/$package_file"
continue
fi
python3 "$UPLOAD_SCRIPT" \
"$PACKAGES_DIR/$package_file" \
--hash-file "$PACKAGES_DIR/$hash_file" \
--tag "$tag" \
--token "$GITHUB_TOKEN" \
--repo "$REPO" \
--verbose
if [ $? -eq 0 ]; then
echo "✅ SUCCESS: $package_file"
else
echo "❌ FAILED: $package_file"
fi
echo ""
done
echo "✅ Upload complete!"
Save as upload_all.sh, make executable, and run:
chmod +x upload_all.sh
./upload_all.sh
Verification
After uploading, verify packages are on GitHub Releases:
-
Check Releases Page:
https://github.com/earlution/ai-dev-kit/releases -
Verify Each Release:
- Each tag should have a release
- Each release should have 2 assets:
.tar.gzand.sha256 - Download and verify hash matches
-
Test Installation:
python3 "packages/frameworks/workflow mgt/scripts/install_package_from_release.py" \
kanban 2.1.0 \
--install-dir /tmp/test-install \
--repo earlution/ai-dev-kit \
--verbose
Troubleshooting
Error: Release not found
- Solution: Create Git tags first and push them:
git tag -a kanban-v2.1.0 -m "Release kanban v2.1.0"
git push origin kanban-v2.1.0
Error: Authentication failed
- Solution: Verify token has
reposcope - Check token is set:
echo $GITHUB_TOKEN - Use
--tokenflag to pass directly
Error: Package not found
- Solution: Build packages first:
python3 "packages/frameworks/workflow mgt/scripts/build_packages_direct.py"
Error: Hash file not found
- Solution: Hash file is optional but recommended
- Package will upload without hash file (less secure)
Next Steps After Upload
-
Update Documentation:
- Add package installation instructions
- Update framework installation guide
- Document GitHub Releases as distribution method
-
Announce Availability:
- Update README with package installation
- Create release notes for each framework
-
Test Installation:
- Test manual download and installation
- Test automated installation script
- Verify hash verification works
Related:
- BUILD_PACKAGES.md – Build quick start
- Phase 3 package distribution plan
- Upload script:
packages/frameworks/workflow mgt/scripts/upload_to_github_release.py - Installation guide:
packages/frameworks/workflow mgt/docs/PACKAGE_INSTALLATION_GUIDE.md