name: Build and publish Python package on: create: tags: - 'v*' repository_dispatch: types: [wf-python] jobs: build: runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] python: [3.5, 3.6, 3.7, 3.8] include: - os: ubuntu-latest ARCH: linux-x86_64 LIBFILE: 'libhyperbuild_python_lib.so' PYEXT: 'so' - os: windows-latest ARCH: windows-x86_64 LIBFILE: 'hyperbuild_python_lib.dll' PYEXT: 'pyd' - os: macos-latest ARCH: macos-x86_64 LIBFILE: 'libhyperbuild_python_lib.dylib' PYEXT: 'so' steps: - uses: actions/checkout@v1 - name: Get version id: version shell: bash run: echo ::set-output name=VERSION::"$([[ "$GITHUB_REF" == refs/tags/v* ]] && echo ${GITHUB_REF#refs/tags/v} || echo '0.0.0')" - name: Get native module file name id: native_file shell: bash env: PYTHON_VERSION: ${{ matrix.python }} # PowerShell doesn't support `${...}` syntax. run: echo ::set-output name=NAME::${{ matrix.ARCH }}-${PYTHON_VERSION//./_}/hyperbuild.${{ matrix.PYEXT }} - name: Set up Python uses: actions/setup-python@v1 with: python-version: ${{ matrix.python }} architecture: 'x64' - name: Set up Rust uses: actions-rs/toolchain@v1 with: toolchain: nightly-2019-07-19 profile: minimal default: true - name: Build native module working-directory: ./python run: cargo build --release - name: Install B2 CLI (macOS, Linux) if: runner.os != 'Windows' run: | sudo pip install setuptools sudo pip install --upgrade b2 - name: Install B2 CLI (Windows) if: runner.os == 'Windows' run: | pip install --upgrade b2 - name: Upload to B2 # Convert dots to underscores in Python version as Python uses dots to represent import hierarchy. run: | b2 authorize-account ${{ secrets.CICD_CLI_B2_KEY_ID }} ${{ secrets.CICD_CLI_B2_APPLICATION_KEY }} b2 upload-file --contentType ${{ matrix.MIME }} ${{ secrets.CICD_CLI_B2_BUCKET_NAME }} ./python/target/release/${{ matrix.LIBFILE }} hyperbuild/bin/python/${{ steps.version.outputs.VERSION }}/${{ steps.native_file.outputs.NAME }} package: runs-on: ubuntu-latest needs: build steps: - uses: actions/checkout@v1 - name: Get version id: version shell: bash run: echo ::set-output name=VERSION::"$([[ "$GITHUB_REF" == refs/tags/v* ]] && echo ${GITHUB_REF#refs/tags/v} || echo '0.0.0')" - name: Set up Python uses: actions/setup-python@v1 with: python-version: '3.5' architecture: 'x64' - name: Install Python dependencies run: | pip install --upgrade wheel pip install --upgrade setuptools pip install --upgrade twine - name: Install B2 CLI run: sudo pip install --upgrade b2 - name: Pack and publish package working-directory: ./python run: | cat << 'EOF' > "$HOME/.pypirc" [pypi] username = __token__ password = ${{ secrets.PYPI_API_TOKEN }} EOF cp ../README.md . b2 authorize-account ${{ secrets.CICD_CLI_B2_KEY_ID }} ${{ secrets.CICD_CLI_B2_APPLICATION_KEY }} b2 sync b2://${{ secrets.CICD_CLI_B2_BUCKET_NAME }}/hyperbuild/bin/python/${{ steps.version.outputs.VERSION }}/ ./hyperbuild/. python setup.py sdist bdist_wheel if [[ "${{ steps.version.outputs.VERSION }}" != "0.0.0" ]]; then python -m twine upload dist/* fi