This document explains how to configure PowerTraderAI+'s release pipeline to publish artifacts to various artifact repositories.
The release pipeline automatically publishes artifacts to multiple distribution channels:
- GitHub Releases - ZIP downloads for manual installation
- GitHub Actions Artifacts - Build artifacts (90-day retention)
- PyPI - Python Package Index (
pip install powertrader-ai) - GitHub Packages - GitHub's package registry
- JFrog Artifactory - Enterprise artifact repository
- AWS CodeArtifact - AWS managed package repository
Required Secrets:
PYPI_API_TOKEN: your-pypi-api-tokenSetup Instructions:
- Create PyPI account at https://pypi.org
- Generate API token in PyPI account settings
- Add token to GitHub repository secrets
- Tagged releases automatically publish to PyPI
Installation:
pip install powertrader-aiRequired Secrets:
GITHUB_TOKEN: auto-generated (no setup needed)Setup Instructions:
- Automatically configured for GitHub repositories
- Uses repository's GITHUB_TOKEN
- Publishes on tagged releases and main branch pushes
Installation:
pip install --index-url https://ghcr.io/owner/repo powertrader-aiRequired Secrets:
ARTIFACTORY_URL: https://your-company.jfrog.io/artifactory
ARTIFACTORY_USERNAME: your-username
ARTIFACTORY_PASSWORD: your-password-or-tokenRepository Structure:
/powertrader-releases/- ZIP artifacts/python-packages/- Python wheels
Setup Instructions:
- Contact your DevOps team for Artifactory credentials
- Add secrets to GitHub repository settings
- Pipeline automatically uploads on tagged releases
Required Secrets:
AWS_ACCESS_KEY_ID: your-aws-access-key
AWS_SECRET_ACCESS_KEY: your-aws-secret-key
AWS_DEFAULT_REGION: us-west-2
CODEARTIFACT_DOMAIN: your-domain
CODEARTIFACT_REPOSITORY: your-repositorySetup Instructions:
- Create CodeArtifact domain and repository in AWS
- Create IAM user with CodeArtifact permissions
- Add AWS credentials to GitHub secrets
- Pipeline automatically uploads on tagged releases
Installation:
aws codeartifact login --tool pip --domain your-domain --repository your-repository
pip install powertrader-aiPowerTrader_AI_Desktop_v1.0.0.zip
├── Complete application
├── Documentation
├── Installation scripts
├── Quick start guide
└── SHA256 checksum
powertrader-ai-1.0.0.tar.gz # Source distribution
powertrader_ai-1.0.0-py3-none-any.whl # Wheel distribution
PowerTrader_AI_Desktop_v1.0.0.zip.sha256
- Build ZIP artifact
- Upload to GitHub Actions artifacts
- Publish to GitHub Packages (if configured)
- Build all artifact types
- Create GitHub release with ZIP
- Publish to PyPI
- Publish to configured enterprise repositories
- Generate comprehensive release notes
- Use repository secrets for credentials
- Rotate tokens regularly
- Use least-privilege access tokens
- Monitor artifact download metrics
- Configure repository permissions appropriately
- Use organization-level secrets for enterprise repos
- Implement approval workflows for sensitive releases
# Add to workflow for monitoring
- name: Verify artifact availability
run: |
# Check PyPI
pip index versions powertrader-ai
# Check artifact repositories
curl -f "$ARTIFACTORY_URL/powertrader-releases/"- Track download counts
- Monitor build success rates
- Alert on publication failures
- Verify artifact integrity
PyPI Upload Fails:
- Verify API token permissions
- Check package name conflicts
- Ensure version numbers are unique
Artifactory Upload Fails:
- Verify network connectivity
- Check authentication credentials
- Confirm repository permissions
AWS CodeArtifact Issues:
- Verify IAM permissions
- Check region configuration
- Ensure domain/repository exists
# Test PyPI token
twine upload --repository testpypi dist/*
# Test Artifactory connection
curl -u username:password "$ARTIFACTORY_URL/api/system/ping"
# Test AWS CodeArtifact
aws codeartifact list-repositories --domain your-domain# Download from Artifactory in downstream pipelines
- name: Download PowerTraderAI+
run: |
curl -u $ARTIFACTORY_USER:$ARTIFACTORY_PASS \
-o powertrader-ai.zip \
"$ARTIFACTORY_URL/powertrader-releases/PowerTrader_AI_Desktop_latest.zip"CICD Configuration Team: Simon Jackson (@sjackson0109)
Last Updated: February 20, 2026