<commit_before>name: Wheel Builder
on:
  workflow_dispatch:
    inputs:
      version:
        required: true


jobs:
  manylinux:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        PYTHON:
          - {VERSION: "cp36-cp36m", ABI_VERSION: 'cp36'}
        CONTAINER:
          - {IMAGE: "pyca/cryptography-manylinux1:x86_64", NAME: "manylinux1"}
          - {IMAGE: "pyca/cryptography-manylinux2010:x86_64", NAME: "manylinux2010"}
          - {IMAGE: "pyca/cryptography-musllinux_1_1:x86_64", NAME: "cryptography-musllinux_1_1"}
    name: "${{ matrix.PYTHON.ABI_VERSION }} ${{ matrix.CONTAINER.NAME }}"
    container: ${{ matrix.CONTAINER.IMAGE }}
    steps:
      - run: /opt/python/${{ matrix.PYTHON.VERSION }}/bin/python -m venv .venv
      - name: Install python dependencies
        run: .venv/bin/pip install -U pip wheel cffi
      - run: .venv/bin/pip download bcrypt==${{ github.event.inputs.version }} --no-deps --no-binary bcrypt && tar zxvf bcrypt*.tar.gz && mkdir tmpwheelhouse
      - run: cd bcrypt* && ../.venv/bin/python setup.py bdist_wheel --py-limited-api=${{ matrix.PYTHON.ABI_VERSION }} && mv dist/bcrypt*.whl ../tmpwheelhouse
      - run: auditwheel repair tmpwheelhouse/bcrypt*.whl -w wheelhouse/
      - run: .venv/bin/pip install bcrypt --no-index -f wheelhouse/
      - run: |
          .venv/bin/python -c "import bcrypt; password = b's<PASSWORD>';hashed = bcrypt.hashpw(password, bcrypt.gensalt());bcrypt.checkpw(password, hashed)"

      - run: mkdir bcrypt-wheelhouse
      - run: mv wheelhouse/bcrypt*.whl bcrypt-wheelhouse/
      - uses: actions/upload-artifact@v1
        with:
          name: "bcrypt-${{ github.event.inputs.version }}-${{ matrix.CONTAINER.NAME }} -${{ matrix.PYTHON.ABI_VERSION }}"
          path: bcrypt-wheelhouse/

  macos:
    runs-on: macos-latest
    strategy:
      matrix:
        PYTHON:
          - ABI_VERSION: 'cp36'
            DOWNLOAD_URL: 'https://www.python.org/ftp/python/3.8.5/python-3.8.5-macosx10.9.pkg'
            BIN_PATH: '/Library/Frameworks/Python.framework/Versions/3.8/bin/python3'
    name: "${{ matrix.PYTHON.ABI_VERSION }} macOS"
    steps:
      - uses: actions/checkout@v2.4.0
      - run: |
          curl "${{ matrix.PYTHON.DOWNLOAD_URL }}" -o python.pkg
          sudo installer -pkg python.pkg -target /
      - run: ${{ matrix.PYTHON.BIN_PATH }} -m venv venv
      - run: venv/bin/pip install -U pip wheel cffi
      - run: venv/bin/pip download bcrypt==${{ github.event.inputs.version }} --no-deps --no-binary bcrypt && tar zxvf bcrypt*.tar.gz && mkdir wheelhouse
      - run: cd bcrypt* && ../venv/bin/python setup.py bdist_wheel --py-limited-api=${{ matrix.PYTHON.ABI_VERSION }} && mv dist/bcrypt*.whl ../wheelhouse
      - run: venv/bin/pip install -f wheelhouse --no-index bcrypt
      - run: |
          venv/bin/python -c "import bcrypt;password = b's<PASSWORD>';hashed = bcrypt.hashpw(password, bcrypt.gensalt());bcrypt.checkpw(password, hashed)"

      - run: mkdir bcrypt-wheelhouse
      - run: mv wheelhouse/bcrypt*.whl bcrypt-wheelhouse/
      - uses: actions/upload-artifact@v1
        with:
          name: "bcrypt-${{ github.event.inputs.version }}-macOS-${{ matrix.PYTHON.ABI_VERSION }}"
          path: bcrypt-wheelhouse/

  windows:
    runs-on: windows-latest
    strategy:
      matrix:
        WINDOWS:
          - 'x86'
          - 'x64'
        PYTHON:
          - {VERSION: "3.6", ABI_VERSION: "cp36"}
    name: "${{ matrix.PYTHON.VERSION }} ${{ matrix.PYTHON.ABI_VERSION }} ${{ matrix.WINDOWS}}"
    steps:
      - uses: actions/checkout@v2.4.0
      - name: Setup python
        uses: actions/setup-python@v2.3.1
        with:
          python-version: ${{ matrix.PYTHON.VERSION }}
          architecture: ${{ matrix.WINDOWS }}
      - run: python -m pip install -U pip wheel cffi
      - run: pip download bcrypt==${{ github.event.inputs.version }} --no-deps --no-binary bcrypt && tar zxvf bcrypt*.tar.gz && mkdir wheelhouse
        shell: bash
      - run: cd bcrypt* && python setup.py bdist_wheel --py-limited-api=${{ matrix.PYTHON.ABI_VERSION }} && mv dist/bcrypt*.whl ../wheelhouse
      - run: pip install -f wheelhouse --no-index bcrypt
      - run: |
          python -c "import bcrypt; password = b'<PASSWORD>';hashed = bcrypt.hashpw(password, bcrypt.gensalt());bcrypt.checkpw(password, hashed)"

      # TODO: can we setup another python and test in the same job? this would catch bad linking problems (e.g. build and test on py36, but then install py38 and see if it works
      - run: mkdir bcrypt-wheelhouse
      - run: move wheelhouse\bcrypt*.whl bcrypt-wheelhouse\
      - uses: actions/upload-artifact@v1
        with:
          name: "bcrypt-${{ github.event.inputs.version }}-${{ matrix.WINDOWS }}-${{ matrix.PYTHON.ABI_VERSION }}"
          path: bcrypt-wheelhouse\

  manylinux-arm64:
    name: "${{ matrix.PYTHON.ABI_VERSION }} manylinux2014-aarch64"
    runs-on: ubuntu-latest
    strategy:
       matrix:
        PYTHON:
          - {VERSION: "cp36-cp36m", ABI_VERSION: 'cp36'}
    steps:
      - uses: actions/checkout@v2.4.0
      - run: |
          docker run --rm --privileged hypriot/qemu-register
      - uses: docker://quay.io/pypa/manylinux2014_aarch64
        # The weird pip cache nonsense below is due to docker ownership issues. We want
        # a cache because otherwise we end up building cffi twice.
        with:
          args: |
              bash -c "set -xe;
              mkdir -p /github/home/.cache/pip;
              chown -R $(whoami) /github/home/.cache;
              /opt/python/${{ matrix.PYTHON.VERSION }}/bin/python -m venv .venv;
              .venv/bin/pip install -U pip wheel cffi;
              .venv/bin/pip download bcrypt==${{ github.event.inputs.version }} --no-deps --no-binary bcrypt;
              tar zxvf bcrypt*.tar.gz;
              mkdir tmpwheelhouse;
              pushd bcrypt*;
              ../.venv/bin/python setup.py bdist_wheel --py-limited-api=${{ matrix.PYTHON.ABI_VERSION }};
              mv dist/bcrypt*.whl ../tmpwheelhouse;
              popd;
              auditwheel repair tmpwheelhouse/bcrypt*.whl -w wheelhouse/;
              .venv/bin/pip install bcrypt --no-index -f wheelhouse/;<commit_msg>modernize the wheel builder (#283)<commit_after>name: Wheel Builder
permissions:
  contents: read
on:
  workflow_dispatch:
    inputs:
      version:
        description: The version to build
        required: true


jobs:
  manylinux:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        PYTHON:
          - {VERSION: "cp36-cp36m", ABI_VERSION: 'cp36'}
        CONTAINER:
          - {IMAGE: "cryptography-manylinux2010:x86_64", NAME: "manylinux2010"}
          - {IMAGE: "cryptography-manylinux_2_24:x86_64", NAME: "manylinux_2_24"}
          - {IMAGE: "cryptography-musllinux_1_1:x86_64", NAME: "musllinux_1_1"}
    name: "${{ matrix.PYTHON.ABI_VERSION }} ${{ matrix.CONTAINER.NAME }}"
    container: ghcr.io/pyca/${{ matrix.CONTAINER.IMAGE }}
    steps:
      - uses: actions/checkout@v1 # Need v1 because manylinux2010 can't run node from v2
        with:
          # The tag to build or the tag received by the tag event
          ref: ${{ github.event.inputs.version || github.ref }}
      - run: /opt/python/${{ matrix.PYTHON.VERSION }}/bin/python -m venv .venv
      - name: Install python dependencies
        run: .venv/bin/pip install -U pip wheel cffi six
      - name: Make sdist
        run: .venv/bin/python setup.py sdist
      - run: tar zxvf dist/bcrypt*.tar.gz && mkdir tmpwheelhouse
      - run: cd bcrypt* && ../.venv/bin/python setup.py bdist_wheel --py-limited-api=${{ matrix.PYTHON.ABI_VERSION }} && mv dist/bcrypt*.whl ../tmpwheelhouse
      - run: auditwheel repair tmpwheelhouse/bcrypt*.whl -w wheelhouse/
      - run: .venv/bin/pip install bcrypt --no-index -f wheelhouse/
      - run: |
          .venv/bin/python -c "import bcrypt; password = b'<PASSWORD>';hashed = bcrypt.hashpw(password, bcrypt.gensalt());bcrypt.checkpw(password, hashed)"

      - run: mkdir bcrypt-wheelhouse
      - run: mv wheelhouse/bcrypt*.whl bcrypt-wheelhouse/
      - uses: actions/upload-artifact@v1
        with:
          name: "bcrypt-${{ github.event.inputs.version }}-${{ matrix.CONTAINER.NAME }} -${{ matrix.PYTHON.ABI_VERSION }}"
          path: bcrypt-wheelhouse/

  macos:
    runs-on: macos-11
    strategy:
      matrix:
        PYTHON:
          - VERSION: '3.10'
            ABI_VERSION: 'cp36'
            DOWNLOAD_URL: 'https://www.python.org/ftp/python/3.10.1/python-3.10.1-macos11.pkg'
            BIN_PATH: '/Library/Frameworks/Python.framework/Versions/3.10/bin/python3'
    name: "Python ${{ matrix.PYTHON.VERSION }} for ABI ${{ matrix.PYTHON.ABI_VERSION }} on macOS"
    steps:
      - uses: actions/checkout@v2.4.0
        with:
          # The tag to build or the tag received by the tag event
          ref: ${{ github.event.inputs.version || github.ref }}
          persist-credentials: false
      - run: |
          curl "${{ matrix.PYTHON.DOWNLOAD_URL }}" -o python.pkg
          sudo installer -pkg python.pkg -target /
      - run: ${{ matrix.PYTHON.BIN_PATH }} -m venv venv
      - run: venv/bin/pip install -U pip wheel cffi six
      - name: Make sdist
        run: venv/bin/python setup.py sdist
      - run: tar zxvf dist/bcrypt*.tar.gz && mkdir wheelhouse
      - name: Build the wheel
        run: cd bcrypt* && ../venv/bin/python setup.py bdist_wheel --py-limited-api=${{ matrix.PYTHON.ABI_VERSION }} && mv dist/bcrypt*.whl ../wheelhouse
        env:
          PYTHON_VERSION: ${{ matrix.PYTHON.ABI_VERSION }}
          MACOSX_DEPLOYMENT_TARGET: '10.10'
          CFLAGS: '-arch arm64 -arch x86_64'
          ARCHFLAGS: '-arch arm64 -arch x86_64'
          _PYTHON_HOST_PLATFORM: 'macosx-10.9-universal2'
      - run: venv/bin/pip install -f wheelhouse --no-index bcrypt
      - run: |
          venv/bin/python -c "import bcrypt;password = b'<PASSWORD>';hashed = bcrypt.hashpw(password, bcrypt.gensalt());bcrypt.checkpw(password, hashed)"

      - run: mkdir bcrypt-wheelhouse
      - run: mv wheelhouse/bcrypt*.whl bcrypt-wheelhouse/
      - uses: actions/upload-artifact@v1
        with:
          name: "bcrypt-${{ github.event.inputs.version }}-macOS-${{ matrix.PYTHON.ABI_VERSION }}"
          path: bcrypt-wheelhouse/

  windows:
    runs-on: windows-latest
    strategy:
      matrix:
        WINDOWS:
          - 'x86'
          - 'x64'
        PYTHON:
          - {VERSION: "3.6", ABI_VERSION: "cp36"}
    name: "${{ matrix.PYTHON.VERSION }} ${{ matrix.PYTHON.ABI_VERSION }} ${{ matrix.WINDOWS}}"
    steps:
      - uses: actions/checkout@v2.4.0
        with:
          # The tag to build or the tag received by the tag event
          ref: ${{ github.event.inputs.version || github.ref }}
          persist-credentials: false
      - name: Setup python
        uses: actions/setup-python@v2.3.1
        with:
          python-version: ${{ matrix.PYTHON.VERSION }}
          architecture: ${{ matrix.WINDOWS }}
      - run: python -m pip install -U pip wheel cffi six
      - name: Make sdist
        run: python setup.py sdist
      - run: tar zxvf dist/bcrypt*.tar.gz && mkdir wheelhouse
        shell: bash
      - run: cd bcrypt* && python setup.py bdist_wheel --py-limited-api=${{ matrix.PYTHON.ABI_VERSION }} && mv dist/bcrypt*.whl ../wheelhouse
      - run: pip install -f wheelhouse --no-index bcrypt
      - run: |
          python -c "import bcrypt; password = b'<PASSWORD>';hashed = bcrypt.hashpw(password, bcrypt.gensalt());bcrypt.checkpw(password, hashed)"

      # TODO: can we setup another python and test in the same job? this would catch bad linking problems (e.g. build and test on py36, but then install py38 and see if it works
      - run: mkdir bcrypt-wheelhouse
      - run: move wheelhouse\bcrypt*.whl bcrypt-wheelhouse\
      - uses: actions/upload-artifact@v1
        with:
          name: "bcrypt-${{ github.event.inputs.version }}-${{ matrix.WINDOWS }}-${{ matrix.PYTHON.ABI_VERSION }}"
          path: bcrypt-wheelhouse\

  manylinux-arm64:
    name: "${{ matrix.PYTHON.ABI_VERSION }} manylinux2014-aarch64"
    runs-on: ubuntu-latest
    strategy:
       matrix:
        PYTHON:
          - {VERSION: "cp36-cp36m", ABI_VERSION: 'cp36'}
    steps:
      - uses: actions/checkout@v2.4.0
        with:
          # The tag to build or the tag received by the tag event
          ref: ${{ github.event.inputs.version || github.ref }}
          persist-credentials: false
      - run: |
          docker run --rm --privileged hypriot/qemu-register
      - uses: docker://ghcr.io/pyca/cryptography-manylinux2014_aarch64:latest
        # The weird pip cache nonsense below is due to docker ownership issues. We want
        # a cache because otherwise we end up building cffi twice.
        with:
          args: |
              bash -c "set -xe;
              mkdir -p /github/home/.cache/pip;
              chown -R $(whoami) /github/home/.cache;
              /opt/python/${{ matrix.PYTHON.VERSION }}/bin/python -m venv .venv;
              .venv/bin/pip install -U pip wheel cffi six;
              .venv/bin/python setup.py sdist;
              tar zxvf dist/bcrypt*.tar.gz;
              mkdir tmpwheelhouse;
              pushd bcrypt*;
              ../.venv/bin/python setup.py bdist_wheel --py-limited-api=${{ matrix.PYTHON.ABI_VERSION }};
              mv dist/bcrypt*.whl ../tmpwheelhouse;
              popd;
              auditwheel repair tmpwheelhouse/bcrypt*.whl -w wheelhouse/;
              .venv/bin/pip install bcrypt --no-index -f wheelhouse/;
{'fraction_non_alphanumeric': 0.13569060773480662, 'fraction_numerical': 0.016721915285451198, 'mean_word_length': 2.2049102927289894, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 9, 'https://': 2, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5306032', 'n_tokens_mistral': 4730, 'n_tokens_neox': 4475, 'n_words': 1035}