diff --git a/.dockerignore b/.dockerignore index d0833ebd..ad337859 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,169 +1,6 @@ -ragna.toml ragna/_version.py # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ -cover/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -.pybuilder/ -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -# For a library or package, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# .python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# poetry -# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. -# This is especially recommended for binary packages to ensure reproducibility, and is more -# commonly ignored for libraries. -# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control -#poetry.lock - -# pdm -# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. -#pdm.lock -# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it -# in version control. -# https://pdm.fming.dev/#use-with-ide -.pdm.toml - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# pytype static type analyzer -.pytype/ - -# Cython debug symbols -cython_debug/ - -# PyCharm -# JetBrains specific template is maintained in a separate JetBrains.gitignore that can -# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore -# and can be added to the global gitignore or merged into this file. For a more nuclear -# option (not recommended) you can uncomment the following to ignore the entire idea folder. -.idea/ - -# MacOS -**/.DS_Store - -# VSCode -.vscode/ diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 00000000..296c75e9 --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,72 @@ +name: docker + +on: + pull_request: + paths: + - ".github/workflows/docker.yml" + - ".dockerignore" + - "Dockerfile" + - "environment-dev.yml" + - "pyproject.toml" + - "ragna-docker.toml" + - "requirements-docker.txt" + push: + branches: + - release/* + workflow_dispatch: + +env: + DOCKER_REGISTRY: quay.io + DOCKER_IMAGE: quansight/ragna + +jobs: + build: + runs-on: ubuntu-latest + defaults: + run: + shell: bash -el {0} + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup environment + uses: ./.github/actions/setup-env + with: + optional-dependencies: "false" + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Setup metadata + id: metadata + run: | + VERSION=$(python -m setuptools_scm) + echo "version=${VERSION}" | tee --append $GITHUB_OUTPUT + + TAG=echo "${VERSION}" | sed 's/+/-/g' + echo "tag=${TAG}" | tee --append $GITHUB_OUTPUT + + - name: Login to Quay.io + if: ${{ github.event_name == 'workflow_dispatch' }} + uses: docker/login-action@v3 + with: + registry: ${{ env.DOCKER_REGISTRY }} + username: ${{ secrets.DOCKER_REGISTRY_USERNAME }} + password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }} + + - name: Build and push on workflow dispatch + uses: docker/build-push-action@v5 + with: + tags: + "${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_IMAGE }}:${{ + steps.metadata.outputs.tag }}" + build-args: | + SETUPTOOLS_SCM_PRETEND_VERSION_FOR_RAGNA=${{ steps.metadata.outputs.version }} + platforms: linux/amd64,linux/arm64 + push: ${{ github.event_name == 'workflow_dispatch' }} diff --git a/environment-dev.yml b/environment-dev.yml index f7784009..47524678 100644 --- a/environment-dev.yml +++ b/environment-dev.yml @@ -14,6 +14,7 @@ dependencies: - pre-commit - types-aiofiles - sqlalchemy-stubs + - setuptools-scm # documentation - mkdocs - mkdocs-material