name: TestNDeploy on: [push, pull_request] jobs: cache: name: Caching runs-on: ubuntu-latest strategy: matrix: python-version: [ 3.7, 3.8, 3.9, "3.10", "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: Get pip cache dir id: pip-cache-dir run: | echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT - name: pip cache id: pip-cache uses: actions/cache@v3 with: path: ${{ steps.pip-cache-dir.outputs.dir }} key: pip-${{ matrix.python-version }}-${{ hashFiles('**/setup.cfg') }} - name: Update pip if: ${{ steps.pip-cache.outputs.cache-hit != 'true' }} run: | python -m pip install --upgrade pip - name: Install project dependencies if: ${{ steps.pip-cache.outputs.cache-hit != 'true' }} run: | pip install -r requirements-dev.txt lint: name: Linting runs-on: ubuntu-latest needs: cache strategy: matrix: python-version: [3.9] steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} # Retrieve the previously cached dependencies - name: Get pip cache dir id: pip-cache run: | echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT - name: pip cache uses: actions/cache@v3 with: path: ${{ steps.pip-cache.outputs.dir }} key: pip-${{ matrix.python-version }}-${{ hashFiles('**/setup.cfg') }} # Update PIP - name: Update pip run: | python -m pip install --upgrade pip # Still need to properly install the dependencies - it will only skip the download part - name: Install project dependencies run: | pip install -r requirements-dev.txt - name: Lint with flake8 run: make lint javatest: needs: lint uses: ./.github/workflows/tests_sdk_java.yml dotnettest: needs: lint uses: ./.github/workflows/tests_sdk_dotnet.yml test: needs: [lint] if: "!contains(github.event.pull_request.labels.*.name, 'java')" uses: ./.github/workflows/tests_decoratormode.yml testserver: needs: [lint] if: "!contains(github.event.pull_request.labels.*.name, 'java')" uses: ./.github/workflows/tests_servermode.yml release: name: Release runs-on: ubuntu-latest needs: [dotnettest, javatest, test, testserver ] if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && github.repository == 'getmoto/moto' }} steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - name: Update & Build run: | pip install build python update_version_from_git.py python -m build - name: Publish to PyPI uses: pypa/gh-action-pypi-publish@release/v1 with: password: ${{ secrets.PYPI_API_TOKEN }} - name: Build Docker release run: | docker build -t motoserver/moto . --tag moto:latest # Required to get the correct Digest # See https://github.com/docker/build-push-action/issues/461 - name: Set up QEMU uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Login to DockerHub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Login to GHCR uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Push to DockerHub and GHCR uses: docker/build-push-action@v4 with: push: true platforms: linux/amd64,linux/arm64 tags: | motoserver/moto:latest ghcr.io/getmoto/motoserver:latest - name: Get version number run: | version=$(grep -oP '(?<=__version__ = ")[0-9.a-z]+(?=")' moto/__init__.py) echo "moto_version=$version" >> $GITHUB_ENV - uses: octokit/graphql-action@v2.x name: Get PR info id: get_pr with: query: | query get_pr($owner:String!,$repo:String!,$commit:GitObjectID) { repository(owner:$owner,name:$repo) { object(oid:$commit) { ... on Commit { associatedPullRequests(last: 1){ edges { node { baseRepository { nameWithOwner } merged number } } } } } } } owner: ${{ github.event.repository.owner.name }} repo: ${{ github.event.repository.name }} commit: "${{ github.sha }}" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Get PR number run: | nr="${{ fromJSON(steps.get_pr.outputs.data).repository.object.associatedPullRequests.edges[0].node.number }}" repo="${{ fromJSON(steps.get_pr.outputs.data).repository.object.associatedPullRequests.edges[0].node.baseRepository.nameWithOwner }}" if [ -z "$nr" ] then echo "PR nr not found in $msg" echo "pr_found=false" >> $GITHUB_ENV else echo "PR NR: $nr" echo "pr_nr=$nr" >> $GITHUB_ENV echo "pr_repo=$repo" >> $GITHUB_ENV echo "pr_found=true" >> $GITHUB_ENV fi - name: Leave PR comment with Moto version uses: peter-evans/create-or-update-comment@v2 if: env.pr_found == 'true' && env.pr_repo == 'getmoto/moto' with: issue-number: ${{ env.pr_nr }} body: | This is now part of moto >= ${{ env.moto_version }}