Skip to content

main

main #2110

Workflow file for this run

name: main
on:
push:
branches: [main]
tags: ['*']
schedule:
- cron: "0 09 * * *" # Runs 11 AM UTC == 2 AM PDT
pull_request:
branches: [main]
workflow_dispatch:
permissions:
id-token: write
contents: write
pull-requests: write
jobs:
test:
strategy:
matrix:
os: [ubuntu-latest]
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
include:
- os: macos-latest
python-version: '3.9'
- os: windows-latest
python-version: '3.9'
runs-on: ${{ matrix.os }}
name: test (py${{ matrix.python-version }} ${{ matrix.os }})
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- run: pip install '.[test]'
- run: pip freeze
- run: make fmt
- run: make lint
- run: rsconnect version
- run: make test-${{ matrix.python-version }}
- if: github.event_name == 'pull_request' && matrix.python-version == '3.8'
uses: orgoro/coverage@v3
with:
coverageFile: coverage.xml
token: ${{ secrets.GITHUB_TOKEN }}
prerelease-test:
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/setup-python@v4
with:
python-version: 3.8.x
- run: pip install --pre '.[test]'
- run: pip freeze
- run: make fmt
- run: make lint
- run: rsconnect version
- run: make test-3.8
distributions:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/setup-python@v4
with:
python-version: 3.8.x
- run: pip install -e '.[test]'
- run: pip freeze
- run: make dist
id: create_dist
- uses: actions/upload-artifact@v3
with:
name: distributions
path: dist/
- run: pip install -vvv ${{ steps.create_dist.outputs.whl }}
- run: rsconnect version
- run: rsconnect --help
- if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
draft: false
prerelease: false
- if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ${{ steps.create_dist.outputs.whl }}
asset_name: ${{ steps.create_dist.outputs.whl_basename }}
asset_content_type: application/x-wheel+zip
- uses: aws-actions/configure-aws-credentials@v4
id: creds
with:
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
aws-region: ${{ secrets.AWS_REGION }}
- if: github.event_name == 'push' && github.ref == 'refs/heads/main'
run: make sync-latest-to-s3
- if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
run: make sync-to-s3
- if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.PYPI_TOKEN }}
docs:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/setup-python@v4
with:
python-version: 3.8.x
- run: pip freeze
- run: make docs
- uses: actions/upload-artifact@v3
with:
name: docs
path: docs/site/
- uses: aws-actions/configure-aws-credentials@v4
id: creds
with:
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
aws-region: ${{ secrets.AWS_REGION }}
- if: github.event_name == 'push' && github.ref == 'refs/heads/main'
run: make sync-latest-docs-to-s3
- if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.DOCS_AWS_ROLE }}
aws-region: us-east-1
- if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
run: make promote-docs-in-s3
dispatch:
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
needs: distributions
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v2
with:
github-token: ${{ secrets.DISPATCH_TOKEN }}
script: |
github.repos.createDispatchEvent({
owner: 'rstudio',
repo: 'rsconnect-jupyter',
event_type: 'rsconnect_python_latest'
})
test-rsconnect:
name: "Integration tests against latest Connect"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version: 3.12.4
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -r vetiver-testing/vetiver-requirements.txt
python -m pip install '.[test]'
- name: Run RStudio Connect
run: |
docker compose up --build -d
pip freeze > requirements.txt
make dev
env:
RSC_LICENSE: ${{ secrets.RSC_LICENSE }}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
- name: Get logs in case of failure
run: |
docker compose logs rsconnect
if: ${{ failure() }}
# NOTE: edited to run checks for python package
- name: Run tests
run: |
pytest tests/test_main_system_caches.py
pytest -m 'vetiver'
test-jupyter:
runs-on: ubuntu-latest
env:
CONNECT_LICENSE: ${{ secrets.RSC_LICENSE }}
ADMIN_API_KEY: ${{ secrets.ADMIN_API_KEY }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: extractions/setup-just@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Build Containers
run: |
cd integration-testing
docker compose build client
docker compose build cypress
- name: Start Connect + rsconnect-jupyter
run: |
just integration-testing/up
- name: Run Cypress Tests
run: |
just integration-testing/up-cypress
# Videos are captured whether the suite fails or passes
- name: Save videos
uses: actions/upload-artifact@v3
if: success() || failure()
with:
name: cypress-videos
path: integration-testing/cypress/videos
if-no-files-found: ignore
retention-days: 1
# Screenshots are only captured on failure
- name: Save screenshots
uses: actions/upload-artifact@v3
if: failure()
with:
name: cypress-screenshots
path: integration-testing/cypress/screenshots
if-no-files-found: ignore
retention-days: 1
test-connect:
needs: distributions
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
PY_VERSION:
- 3.11.7
- 3.12.1
steps:
- uses: extractions/setup-just@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/checkout@v4
with:
fetch-depth: 0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Checkout the rsconnect-python tests from Connect
- uses: actions/checkout@v4
with:
repository: rstudio/connect
path: 'test/connect-rsconnect-python'
sparse-checkout: |
test/rsconnect-python
scripts
examples
sparse-checkout-cone-mode: false
token: ${{ secrets.CONNECT_PAT }}
- name: Delete dotnet to save space
run: sudo rm -rf /usr/share/dotnet
- name: Build docker container-image
run: |
cd test/connect-rsconnect-python/test/rsconnect-python/
docker compose --profile rsconnect build
- name: Restore dist
uses: actions/download-artifact@v3
with:
name: distributions
path: dist/
- name: Run rsconnect-python Tests
env:
CONNECT_LICENSE: "${{ secrets.RSC_LICENSE }}"
PY_VERSION: ${{ matrix.PY_VERSION }}
TEST_SUBSET: "CI"
RSC_AUTOMATION_PAT: "${{ secrets.CONNECT_PAT }}"
ADMIN_API_KEY: "${{ secrets.ADMIN_API_KEY }}"
QUARTO_VERSION: "1.4.546"
# This allows us to start Connect separately in our own docker container
CONNECT_SERVER: "http://localhost:3939"
IMAGE_OS: "rstudio/connect:ubuntu22"
remote: "yes"
run: |
cd integration-testing
docker compose pull connect
docker compose up -d connect
just ../test/connect-rsconnect-python/test/rsconnect-python/test-rsconnect-python-repo
# Videos are captured whether the suite fails or passes
- name: Save videos
uses: actions/upload-artifact@v3
if: failure()
with:
name: cypress-videos_${{ matrix.PY_VERSION }}_native
path: test/connect-rsconnect-python/cypress/videos
if-no-files-found: ignore
# Screenshots are only captured on failure
- name: Save screenshots
uses: actions/upload-artifact@v3
if: failure()
with:
name: cypress-screenshots_${{ matrix.PY_VERSION }}_native
path: test/connect-rsconnect-python/cypress/screenshots
if-no-files-found: ignore