name: wheels_upload_pip on: workflow_call: secrets: twine_password: required: true inputs: twine_username: required: true type: string pypirc: required: false type: string filter: required: true type: string description: Filter which runs to upload. Example '*+cu121*' execute: required: true type: boolean description: Actually upload the wheels. Dry-run if false artifact_tag: default: "facebookresearch" type: string env: TWINE_USERNAME: __token__ jobs: wheels_upload_pip: name: wheels_upload_pip runs-on: ubuntu-20.04 timeout-minutes: 360 defaults: run: shell: bash steps: - name: Recursive checkout uses: actions/checkout@v3 with: submodules: recursive path: "." fetch-depth: 0 # for tags # inspired by https://github.com/jlumbroso/free-disk-space/blob/main/action.yml - name: Free disk space run: | sudo rm -rf /usr/local/lib/android || true sudo rm -rf /usr/share/dotnet || true - name: Setup twine config if: inputs.pypirc run: | echo "${{ inputs.pypirc }}" > ~/.pypirc cat ~/.pypirc - uses: actions/download-artifact@v3 with: path: dist # Filter builds (eg vN+cu118 for instance) - run: ls -R dist/ - name: Extract builds to upload run: | set -ex mv dist all-dist mkdir dist for f in all-dist/${{ inputs.filter }}_${{ inputs.artifact_tag }}/*.whl; do cp $f dist/ done; - run: ls -R dist/ - name: Setup venv run: | python3 -m venv venv . ./venv/bin/activate which pip # (we need pytorch to create a source distr...) pip install torch packaging twine echo "PY=$(which python)" >> ${GITHUB_ENV} echo "PATH=$PATH" >> ${GITHUB_ENV} - name: Create source distribution env: VERSION_SOURCE: ${{ github.ref_type == 'tag' && 'tag' || 'dev' }} run: | version=`$PY packaging/compute_wheel_version.py --source $VERSION_SOURCE` echo $version > version.txt cat version.txt (cd third_party/flash-attention && \ git describe --tags --always > version.txt && \ echo "Flash-Attention version" && \ cat version.txt ) BUILD_VERSION=$version $PY setup.py sdist -d sdist/ - run: ls -R sdist/ - name: Upload wheel to PyPi if: inputs.execute run: $PY -m twine upload --skip-existing dist/*.whl sdist/* env: TWINE_USERNAME: ${{ inputs.twine_username }} TWINE_PASSWORD: ${{ secrets.twine_password }}