diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 44b2d6d..deb00f3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -122,12 +122,6 @@ jobs: with: fetch-depth: 0 - - name: Install poetry - uses: snok/install-poetry@v1 - - - name: Install package - run: poetry install - # This action uses Python Semantic Release v8 # What this action does: # - Determines the next version number based on the commit history @@ -140,154 +134,97 @@ jobs: with: github_token: ${{ secrets.GITHUB_TOKEN }} - - name: Test Outputs of semantic release step - run: | - echo "${{ steps.release.outputs.released }}" - echo "${{ steps.release.outputs.version }}" - echo "${{ steps.release.outputs.tag }}" - - - name: Install packaging-related tool - run: - python3 -m pip install build twine - - # Build Package step: - # After semantic release, we should have a new tag if the commit history - # has been updated. If there isnt a new tag, then we dont need to build - # a new package. If there is a new tag, then we need to build a new package - # and publish it to PyPI - - name: Build package - if: steps.release.outputs.released == 'true' - run: | - poetry version ${{ steps.release.outputs.version }} - python -m build --sdist --wheel --outdir dist/ . - - - name: Publish package distributions to PyPI - if: steps.release.outputs.released == 'true' - uses: pypa/gh-action-pypi-publish@release/v1 - with: - verbose: true - user: __token__ - password: ${{ secrets.PYPI_API_TOKEN }} - - - name: Set up QEMU - if: steps.release.outputs.released == 'true' - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - if: steps.release.outputs.released == 'true' - uses: docker/setup-buildx-action@v3 - - - name: Login to Docker Hub - if: steps.release.outputs.released == 'true' - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Login to the GitHub Container Registry - if: steps.release.outputs.released == 'true' - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@v3 - with: - images: | - ${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:${{ steps.release.outputs.tag }} - ghcr.io/${{ github.repository }}/nbiatoolkit:${{ steps.release.outputs.tag }} - - - name: Build - if: steps.release.outputs.released == 'true' - uses: docker/build-push-action@v5 - with: - context: . - platforms: linux/amd64,linux/arm64 - file: ./Dockerfile - push: true - tags: | - ${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:${{ steps.release.outputs.tag }} - ${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:latest - ghcr.io/${{ github.repository }}/nbiatoolkit:${{ steps.release.outputs.tag }} - ghcr.io/${{ github.repository }}/nbiatoolkit:latest - labels: ${{ steps.meta.outputs.labels }} - - test_install_withPyPi: + Publish-To-PyPi: needs: Continuous-Deployment - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest, macos-latest, macos-14] - python-version: ["3.12", "3.11", "3.10"] - + if: needs.Continuous-Deployment.outputs.released == 'true' + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - name: Checkout code + uses: actions/checkout@v3 - - name: Set up Python ${{ matrix.python-version }} + - name: Set up Python 3.12 uses: actions/setup-python@v4 with: - python-version: ${{ matrix.python-version }} + python-version: 3.12 - - name: Install using PyPi - run: | - pip install nbiatoolkit; - NBIAToolkit + - name: Install Package-Building Tool + run: + python3 -m pip install build twine + - name: Build package + run: + python3 -m build --sdist --wheel --outdir dist/ - test_image_with_new_tag: + - name: Publish to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + verbose: true + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} + + Build-Docker-Images: needs: Continuous-Deployment + if: needs.Continuous-Deployment.outputs.released == 'true' runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - - name: Test Image With new Tag - run: | - # test image with latest tag - docker run --rm \ - ${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:${{ needs.Continuous-Deployment.outputs.tag }} \ - NBIAToolkit - + - name: Set up QEMU + if: steps.release.outputs.released == 'true' + uses: docker/setup-qemu-action@v3 - test_image_with_latest_tag: - needs: Continuous-Deployment - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v2 + - name: Set up Docker Buildx + if: steps.release.outputs.released == 'true' + uses: docker/setup-buildx-action@v3 - - name: Test Image with "latest" Tag - run: | - docker run --rm \ - ${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:latest \ - NBIAToolkit + - name: Login to Docker Hub + if: steps.release.outputs.released == 'true' + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} - Update-README: - needs: Continuous-Deployment - runs-on: ubuntu-latest - # if: jobs.Continuous-Deployment.outputs.released == 'true' - steps: - - name: Checkout code - uses: actions/checkout@v3 + - name: Login to the GitHub Container Registry + if: steps.release.outputs.released == 'true' + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} - - name: Get Current branch - run: | - echo "Current branch is: ${{ github.ref }}" - echo "Current branch is: ${{ github.head_ref }}" - echo "Current branch is: ${{ github.base_ref }}" - echo "Current branch is: ${{ github.event_name }}" + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v3 + with: + images: | + ${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:${{ needs.Continuous-Deployment.outputs.tag }} + ghcr.io/${{ github.repository }}/nbiatoolkit:${{ needs.Continuous-Deployment.outputs.tag }} - # if main, then git pull main - if [ "${{ github.ref }}" == "refs/heads/main" ]; then - git pull origin main - fi + - name: Build and push Docker images + uses: docker/build-push-action@v5 + with: + context: . + platforms: linux/amd64,linux/arm64 + file: ./Dockerfile + push: true + tags: | + ${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:${{ needs.Continuous-Deployment.outputs.tag }} + ${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:latest + ghcr.io/${{ github.repository }}/nbiatoolkit:${{ needs.Continuous-Deployment.outputs.tag }} + ghcr.io/${{ github.repository }}/nbiatoolkit:latest + labels: ${{ steps.meta.outputs.labels }} + + Test-PyPi-Install: + needs: Publish-To-PyPi + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macos-latest, macos-14] + python-version: ["3.12", "3.11", "3.10"] - # fix diverged branch - git fetch origin ${{ github.head_ref }} - git checkout ${{ github.head_ref }} + steps: + - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 @@ -296,57 +233,21 @@ jobs: - name: Install using PyPi run: | - # update pip - pip install . + pip install nbiatoolkit; NBIAToolkit - - name: Update README code block - run: | - awk '/``` bash NBIAToolkit-Output/ { - print "``` bash NBIAToolkit-Output"; - print "> NBIAToolkit --version"; - system("NBIAToolkit --version"); - f=1; - next - } f && /```/ { - print "```"; - f=0; - next - } !f' README.md > temp && mv temp README.md - - - name: Commit and push changes + Test-Docker-Image: + needs: Build-Docker-Images + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macos-latest] + docker_tag: ["latest", "${{ needs.Continuous-Deployment.outputs.tag }}"] + + steps: + - uses: actions/checkout@v3 + + - name: Install using Docker run: | - LATEST_TAG=$(curl -s \ - "https://api.github.com/repos/${{ github.repository }}/releases/latest" \ - | jq -r .tag_name | sed 's/^v//') - echo "LATEST_TAG=${LATEST_TAG}" - # Check for changes - if [[ $(git status --porcelain) ]]; then - # Changes are present - echo "Changes found. Committing and pushing..." - - git config --global user.name 'jjjermiah' - git config --global user.email 'jjjermiah@users.noreply.github.com' - - # Add all changes - git add . - - # Commit with a timestamp - git commit -m "chore: Update README: $LATEST_TAG" - - # Push changes to the remote repository - # if github.head_ref is not null - # then push to the branch - # else push to the base branch - if [ -n "${{ github.head_ref }}" ]; then - git push origin HEAD:${{ github.head_ref }} - else - git push origin HEAD:${{ github.ref }} - fi - - - echo "Changes committed and pushed successfully." - else - # No changes - echo "No changes found. Nothing to commit or push." - fi + docker pull ${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:${{ matrix.docker_tag }}; + docker run --rm ${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:${{ matrix.docker_tag }} NBIAToolkit diff --git a/.github/workflows/main_old.yml b/.github/workflows/main_old.yml new file mode 100644 index 0000000..5f2f4d9 --- /dev/null +++ b/.github/workflows/main_old.yml @@ -0,0 +1,346 @@ +name: CI-CD + +# only run on pushes to main or pull requests +on: + push: + # # push to any branch * + # branches: [ main ] + # pull_request: + # branches: [ main , development] + +jobs: + Unit-Tests: + runs-on: ${{ matrix.os }} + strategy: + matrix: + # os: [ubuntu-latest] + # python-version: ["3.12"] + os: [ubuntu-latest, macos-latest, macos-14] + python-version: ["3.12", "3.11"] + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Install poetry + uses: snok/install-poetry@v1 + + - name: Install dependencies + run: poetry install + + - name: Test with pytest + run: | + # Github action runners now have 4 cores + poetry run pytest -s -v -n 4 --cov --cov-report xml:coverage-report/coverage.xml + + - name: Upload coverage report artifact to be used by Codecov + # only upload if matrix.os is ubuntu-latest and matrix.python-version is 3.12 + if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.12' + uses: actions/upload-artifact@v2 + with: + name: coverage-report + path: coverage-report + + Codecov: + needs: Unit-Tests + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Download coverage.xml artifact + uses: actions/download-artifact@v2 + with: + name: coverage-report + path: coverage-report + + - name: Use Codecov to track coverage + uses: codecov/codecov-action@v3 + with: + token: ${{ secrets.CODECOV_TOKEN }} + files: ./coverage-report/coverage.xml + fail_ci_if_error: true + verbose: true + name: codecov-umbrella + + Build-Documentation: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Python 3.10 + uses: actions/setup-python@v4 + with: + python-version: 3.10.4 + + - name: Install poetry + uses: snok/install-poetry@v1 + + - name: Install dependencies + run: poetry install + + - name: Build documentation + run: | + pip install -r docs/requirements.txt + pip install . + make html --directory=docs + + Continuous-Deployment: + permissions: + contents: write + packages: write + issues: write + pull-requests: write + + needs: [Unit-Tests] + + # if pulling to main, deploy to PyPI + if: github.ref == 'refs/heads/main' + + # Set up operating system + runs-on: ubuntu-latest + + outputs: + released: ${{ steps.release.outputs.released }} + version: ${{ steps.release.outputs.version }} + tag: ${{ steps.release.outputs.tag }} + + # Define job steps + steps: + - name: Set up Python 3.12 + uses: actions/setup-python@v2 + with: + python-version: 3.12 + + - name: Check-out repository + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + # This action uses Python Semantic Release v8 + # What this action does: + # - Determines the next version number based on the commit history + # - Creates a new tag with the new version number + # - Pushes the new tag to GitHub + # - Creates a GitHub release with the new version number + - name: Python Semantic Release + id: release + uses: python-semantic-release/python-semantic-release@master + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + + - name: Test Outputs of semantic release step + run: | + echo "${{ steps.release.outputs.released }}" + echo "${{ steps.release.outputs.version }}" + echo "${{ steps.release.outputs.tag }}" + + - name: Install packaging-related tool + run: + python3 -m pip install build twine + + # Build Package step: + # After semantic release, we should have a new tag if the commit history + # has been updated. If there isnt a new tag, then we dont need to build + # a new package. If there is a new tag, then we need to build a new package + # and publish it to PyPI + - name: Build package + if: steps.release.outputs.released == 'true' + run: | + poetry version ${{ steps.release.outputs.version }} + python -m build --sdist --wheel --outdir dist/ . + + - name: Publish package distributions to PyPI + if: steps.release.outputs.released == 'true' + uses: pypa/gh-action-pypi-publish@release/v1 + with: + verbose: true + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} + + - name: Set up QEMU + if: steps.release.outputs.released == 'true' + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + if: steps.release.outputs.released == 'true' + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + if: steps.release.outputs.released == 'true' + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Login to the GitHub Container Registry + if: steps.release.outputs.released == 'true' + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v3 + with: + images: | + ${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:${{ steps.release.outputs.tag }} + ghcr.io/${{ github.repository }}/nbiatoolkit:${{ steps.release.outputs.tag }} + + - name: Build + if: steps.release.outputs.released == 'true' + uses: docker/build-push-action@v5 + with: + context: . + platforms: linux/amd64,linux/arm64 + file: ./Dockerfile + push: true + tags: | + ${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:${{ steps.release.outputs.tag }} + ${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:latest + ghcr.io/${{ github.repository }}/nbiatoolkit:${{ steps.release.outputs.tag }} + ghcr.io/${{ github.repository }}/nbiatoolkit:latest + labels: ${{ steps.meta.outputs.labels }} + + test_install_withPyPi: + needs: Continuous-Deployment + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macos-latest, macos-14] + python-version: ["3.12", "3.11", "3.10"] + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Install using PyPi + run: | + pip install nbiatoolkit; + NBIAToolkit + + + test_image_with_new_tag: + needs: Continuous-Deployment + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Test Image With new Tag + run: | + # test image with latest tag + docker run --rm \ + ${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:${{ needs.Continuous-Deployment.outputs.tag }} \ + NBIAToolkit + + + test_image_with_latest_tag: + needs: Continuous-Deployment + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Test Image with "latest" Tag + run: | + docker run --rm \ + ${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:latest \ + NBIAToolkit + + Update-README: + needs: Continuous-Deployment + runs-on: ubuntu-latest + # if: jobs.Continuous-Deployment.outputs.released == 'true' + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Get Current branch + run: | + echo "Current branch is: ${{ github.ref }}" + echo "Current branch is: ${{ github.head_ref }}" + echo "Current branch is: ${{ github.base_ref }}" + echo "Current branch is: ${{ github.event_name }}" + + # if main, then git pull main + if [ "${{ github.ref }}" == "refs/heads/main" ]; then + git pull origin main + fi + + # fix diverged branch + git fetch origin ${{ github.head_ref }} + git checkout ${{ github.head_ref }} + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Install using PyPi + run: | + # update pip + pip install . + NBIAToolkit + + - name: Update README code block + run: | + awk '/``` bash NBIAToolkit-Output/ { + print "``` bash NBIAToolkit-Output"; + print "> NBIAToolkit --version"; + system("NBIAToolkit --version"); + f=1; + next + } f && /```/ { + print "```"; + f=0; + next + } !f' README.md > temp && mv temp README.md + + - name: Commit and push changes + run: | + LATEST_TAG=$(curl -s \ + "https://api.github.com/repos/${{ github.repository }}/releases/latest" \ + | jq -r .tag_name | sed 's/^v//') + echo "LATEST_TAG=${LATEST_TAG}" + # Check for changes + if [[ $(git status --porcelain) ]]; then + # Changes are present + echo "Changes found. Committing and pushing..." + + git config --global user.name 'jjjermiah' + git config --global user.email 'jjjermiah@users.noreply.github.com' + + # Add all changes + git add . + + # Commit with a timestamp + git commit -m "chore: Update README: $LATEST_TAG" + + # Push changes to the remote repository + # if github.head_ref is not null + # then push to the branch + # else push to the base branch + if [ -n "${{ github.head_ref }}" ]; then + git push origin HEAD:${{ github.head_ref }} + else + git push origin HEAD:${{ github.ref }} + fi + + + echo "Changes committed and pushed successfully." + else + # No changes + echo "No changes found. Nothing to commit or push." + fi diff --git a/src/nbiatoolkit/nbia.py b/src/nbiatoolkit/nbia.py index 51a7e0a..b8ed1c6 100644 --- a/src/nbiatoolkit/nbia.py +++ b/src/nbiatoolkit/nbia.py @@ -146,11 +146,6 @@ def __init__( self._log.debug("Setting up OAuth2 client... with username %s", username) self._oauth2_client = OAuth2(username=username, password=password) - self._api_headers: dict[str, str] = { - "Authorization": f"Bearer {self._oauth2_client.access_token}", - "Content-Type": "application/json", - } - self._base_url: NBIA_BASE_URLS = NBIA_BASE_URLS.NBIA self._return_type: ReturnType = ( return_type @@ -170,7 +165,13 @@ def OAuth_client(self) -> OAuth2: @property def headers(self): - return self._api_headers + + API_HEADERS: dict[str, str] = { + "Authorization": f"Bearer {self.OAuth_client.access_token}", + "Content-Type": "application/json", + } + + return API_HEADERS # create a setter for the base_url in case user want to use NLST @property @@ -639,7 +640,7 @@ def downloadSeries( downloadDir, filePattern, overwrite, - self._api_headers, + self.headers, self._base_url, self._log, Progressbar,