diff --git a/.github/workflows/autogen-remote-changes.yml b/.github/workflows/autogen-remote-changes.yml new file mode 100644 index 0000000..13bc201 --- /dev/null +++ b/.github/workflows/autogen-remote-changes.yml @@ -0,0 +1,92 @@ +name: Auto-Update SDK + +on: + schedule: + - cron: "0 0 * * 1" # Runs every Monday at midnight + workflow_dispatch: # Allows manual triggering of the workflow + +jobs: + update-sdk: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.12"] + steps: + - uses: actions/checkout@v3 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: '18' + - name: Install OpenAPI Generator CLI + run: npm install @openapitools/openapi-generator-cli -g + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + - name: Pull and generate SDK + run: make gen-openapi-remote-for-ci + - name: Check for changes + id: check_changes + run: | + if git diff --quiet; then + echo "changes=false" >> $GITHUB_ENV + else + echo "changes=true" >> $GITHUB_ENV + fi + - name: Set up Git + if: env.changes == 'true' + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + - name: Commit changes + if: env.changes == 'true' + run: | + BRANCH_NAME="auto-update-sdk-$(date +'%Y-%m-%d-%H-%M-%S')" + echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_ENV + git checkout -b $BRANCH_NAME || git checkout $BRANCH_NAME + git add . + git commit -m "Auto-update SDK on $(date +'%Y-%m-%d')" + - name: Push changes + if: env.changes == 'true' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: git push --force --set-upstream origin $BRANCH_NAME + - name: Install GitHub CLI + if: env.changes == 'true' + run: | + sudo apt-get update + sudo apt-get install -y gh + - name: Check for existing pull request + if: env.changes == 'true' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + id: check_pr + run: | + PR_EXISTS=$(gh pr list --search "Auto-update SDK" --base main --state open --json number -q '.[0].number') + if [[ -n "$PR_EXISTS" ]]; then + echo "pr_exists=true" >> $GITHUB_ENV + echo "PR_NUMBER=$PR_EXISTS" >> $GITHUB_ENV + else + echo "pr_exists=false" >> $GITHUB_ENV + fi + - name: Create a pull request + if: env.changes == 'true' && env.pr_exists == 'false' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + PR_TITLE="Auto-update SDK on $(date +'%Y-%m-%d')" + PR_BODY="This pull request was automatically created by GitHub Actions to update the SDK with the latest remote OpenAPI specification." + gh pr create --title "$PR_TITLE" --body "$PR_BODY" --head $BRANCH_NAME --base main + - name: Update existing pull request + if: env.changes == 'true' && env.pr_exists == 'true' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + echo "An existing pull request titled 'Auto-update SDK' is already open. Updating it with the latest changes." + git push --set-upstream origin $BRANCH_NAME --force + gh pr comment $PR_NUMBER --body "This pull request has been updated with the latest changes from the automated SDK update process on $(date +'%Y-%m-%d %H:%M:%S')." + \ No newline at end of file diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index d639f56..31c2a22 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"] + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] steps: - uses: actions/checkout@v3 diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 44d8015..b9f1424 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -14,9 +14,6 @@ stages: - pip install -r test-requirements.txt - pytest --cov=opal -pytest-3.7: - extends: .pytest - image: python:3.7-alpine pytest-3.8: extends: .pytest image: python:3.8-alpine diff --git a/.openapi-generator/templates/github-workflow.mustache b/.openapi-generator/templates/github-workflow.mustache index a78752b..df9dc0d 100644 --- a/.openapi-generator/templates/github-workflow.mustache +++ b/.openapi-generator/templates/github-workflow.mustache @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"] + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] steps: - uses: actions/checkout@v3 diff --git a/.travis.yml b/.travis.yml index f448501..a9f1fed 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ # ref: https://docs.travis-ci.com/user/languages/python language: python python: - - "3.7" - "3.8" - "3.9" - "3.10" diff --git a/Makefile b/Makefile index 9227d9d..b7a0115 100644 --- a/Makefile +++ b/Makefile @@ -2,9 +2,14 @@ SHELL:=/bin/bash PYTHON_POST_PROCESS_FILE=python -m black OPENAPI_GEN=openapi-generator generate --enable-post-process-file -i api/openapi.yaml -g python -o . -c config.json -t .openapi-generator/templates +OPENAPI_GEN_CI=openapi-generator-cli generate --enable-post-process-file -i api/openapi.yaml -g python -o . -c config.json -t .openapi-generator/templates +PULL_REMOTE_OPENAPI=curl https://app.opal.dev/openapi.yaml > api/openapi.yaml gen-openapi: $(OPENAPI_GEN) gen-openapi-remote: - curl https://app.opal.dev/openapi.yaml > api/openapi.yaml - $(OPENAPI_GEN) \ No newline at end of file + $(PULL_REMOTE_OPENAPI) + $(OPENAPI_GEN) +gen-openapi-remote-for-ci: + $(PULL_REMOTE_OPENAPI) + $(OPENAPI_GEN_CI) diff --git a/config.json b/config.json index f1715c3..617349e 100644 --- a/config.json +++ b/config.json @@ -1 +1,8 @@ -{"enumClassPrefix": true, "packageName": "opal", "gitHost": "github.com", "gitUserId": "opalsecurity", "gitRepoId": "opal-python", "disallowAdditionalPropertiesIfNotPresent":false} +{ + "enumClassPrefix": true, + "packageName": "opal", + "gitHost": "github.com", + "gitUserId": "opalsecurity", + "gitRepoId": "opal-python", + "disallowAdditionalPropertiesIfNotPresent": false +} diff --git a/requirements.txt b/requirements.txt index e51ba9f..67f7f68 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,4 @@ -urllib3 >= 1.25.3, < 2.1.0 -setuptools >= 21.0.0 -python_dateutil >= 2.5.3 +urllib3 >= 1.25.3, < 3.0.0 +python_dateutil >= 2.8.2 pydantic >= 2 typing-extensions >= 4.7.1 diff --git a/test-requirements.txt b/test-requirements.txt index bb38d82..e98555c 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1,5 +1,6 @@ -pytest~=7.1.3 -pytest-cov>=2.8.1 -pytest-randomly>=3.12.0 -mypy>=1.4.1 -types-python-dateutil>=2.8.19 \ No newline at end of file +pytest >= 7.2.1 +pytest-cov >= 2.8.1 +tox >= 3.9.0 +flake8 >= 4.0.0 +types-python-dateutil >= 2.8.19.14 +mypy >= 1.5