coffea-casa 2024.8.7.post0__tar.gz → 2025.9.24.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- coffea_casa-2025.9.24.3/.github/workflows/autotag.yaml +57 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/.github/workflows/dockercd-dev.yml +17 -19
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/.github/workflows/dockerci-dev.yml +1 -1
- coffea_casa-2025.9.24.3/.github/workflows/pypi-tag-deploy.yml +34 -0
- coffea_casa-2025.9.24.3/.github/workflows/update_docker.yml +64 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/PKG-INFO +2 -2
- coffea_casa-2025.9.24.3/coffea_casa/_version.py +34 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/coffea_casa/coffea_casa.py +67 -16
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/Dockerfile.cc-analysis-alma9 +47 -33
- coffea_casa-2024.8.7.post0/docker/Dockerfile.cc-analysis-alma8 → coffea_casa-2025.9.24.3/docker/Dockerfile.cc-analysis-combine-alma9 +55 -37
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/Dockerfile.cc-dask-alma9 +53 -47
- coffea_casa-2024.8.7.post0/docker/Dockerfile.cc-dask-alma8 → coffea_casa-2025.9.24.3/docker/Dockerfile.cc-dask-combine-alma9 +65 -52
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/README.md +10 -69
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/dask/distributed/0001-Patch-from-bbockelman-adaptive-scaling.patch +6 -16
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/dask/labextension.yaml +2 -2
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/prepare-env/prepare-env-cc-analysis.sh +5 -16
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/prepare-env/prepare-env-cc.sh +6 -0
- coffea_casa-2025.9.24.3/scripts-extra/submit_vine_workers_to_condor +53 -0
- coffea_casa-2024.8.7.post0/.github/workflows/pypi-tag-deploy.yml +0 -44
- coffea_casa-2024.8.7.post0/coffea_casa/_version.py +0 -16
- coffea_casa-2024.8.7.post0/docker/Dockerfile.cc-analysis-centos7 +0 -205
- coffea_casa-2024.8.7.post0/docker/Dockerfile.cc-analysis-ubuntu +0 -205
- coffea_casa-2024.8.7.post0/docker/Dockerfile.cc-base-alma8 +0 -327
- coffea_casa-2024.8.7.post0/docker/Dockerfile.cc-base-centos7 +0 -324
- coffea_casa-2024.8.7.post0/docker/Dockerfile.cc-base-ubuntu +0 -346
- coffea_casa-2024.8.7.post0/docker/ceph/ceph.conf +0 -26
- coffea_casa-2024.8.7.post0/docker/ceph/keyring +0 -6
- coffea_casa-2024.8.7.post0/docker/skyhook/.coffea.toml +0 -3
- coffea_casa-2024.8.7.post0/docker/skyhook/build-skyhook.sh +0 -47
- coffea_casa-2024.8.7.post0/docker/uproot/uproot_xrd_source.patch +0 -11
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/.gitattributes +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/.github/dependabot.yml +0 -0
- /coffea_casa-2024.8.7.post0/.github/workflows/charts-lint.yml → /coffea_casa-2025.9.24.3/.github/workflows/charts-lint.yml_ +0 -0
- /coffea_casa-2024.8.7.post0/.github/workflows/charts-publish.yml → /coffea_casa-2025.9.24.3/.github/workflows/charts-publish.yml_ +0 -0
- /coffea_casa-2024.8.7.post0/.github/workflows/charts-test.yaml_k3d → /coffea_casa-2025.9.24.3/.github/workflows/charts-test-k3d.yaml_ +0 -0
- /coffea_casa-2024.8.7.post0/.github/workflows/charts-test-minikube.yaml → /coffea_casa-2025.9.24.3/.github/workflows/charts-test-minikube.yaml_ +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/.github/workflows/pypi-ci.yml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/.gitignore +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/.gitmodules +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/.pre-commit-config.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/.readthedocs.yml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/LICENSE +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/MAINTAINERS +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/MANIFEST.in +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/README.md +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/chartpress.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/.helmignore +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/Chart.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/README.md +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/crds/ingressroute.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/crds/ingressroutetcp.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/crds/ingressrouteudp.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/crds/middlewares.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/crds/middlewarestcp.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/crds/serverstransports.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/crds/tlsoptions.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/crds/tlsstores.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/crds/traefikservices.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/docs/DEVNOTES.md +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/files/hub-extra/auth.py +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/files/hub-extra/oauthenticator-coffea.py +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/files/hub-extra/oauthenticator-generic.py +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/files/hub-extra/oauthenticator-oauth2-14.2.0.py +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/files/hub-extra/secret_creation_hook.py +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/pebble-config.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/schema.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/templates/NOTES.txt +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/templates/_helpers.tpl +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/templates/af-secrets.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/templates/hub-extra-config-d.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/templates/hub-extra-rbac.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/templates/traefik/deployment.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/templates/traefik/service.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/templates/traefik/traefik-dashboard.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/templates/traefik/traefik-rbac.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/unl-extra/login.html +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/unl-extra/logo.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/unl-extra/logo.png.bin +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/values-prod.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/coffea-casa/values.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/dev-requirements.txt +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/charts/requirements.txt +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/ci/common +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/coffea_casa/__init__.py +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/coffea_casa/_version.pyi +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/coffea_casa/config.py +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/coffea_casa/jobqueue-coffea-casa.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/coffea_casa/plugin.py +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/README.IDAP.md +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/certs/hcc-flatiron.pem +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/certs/isrgrootx1.pem +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/certs/lets-encrypt-r3.pem +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/certs/lets-encrypt-r4.pem +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/condor/condor_config +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/condor/config.d/99-coffea-condor-master-config +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/dask/dask.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/dask/dask_tls.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/dask/distributed/0002-Allow-scheduler-to-preserve-worker-hostnames.patch +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/dask/distributed/0003-Activate-patch.patch +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/dask/distributed/0004-Add-possibility-to-setup-external_adress-for-schedul.patch +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/dask/distributed/0005-Add-nanny-patch.patch +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/dask/jobqueue-coffea-casa.yaml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/jupyterhub/fix-permissions +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/jupyterhub/jupyter_notebook_config.py +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/jupyterhub/jupyterlab-workspace.json +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/jupyterhub/start-notebook.sh +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/jupyterhub/start-singleuser.sh +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/jupyterhub/start.sh +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docker/k8s-worker/supervisord.conf +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/Makefile +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/atlas-auth.web.cern.ch_login.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/browser.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/cc-cilogon.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/cc-email.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/cc-enter.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/cc-invitation.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/cc-login.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/cc-reg1.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/cc-reg2.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/cc-request.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea-casa-authz-approval.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea-casa-authz.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea-casa-connection_success.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea-casa-dashboard.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea-casa-dashboard_taskstream.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea-casa-dashboard_workers.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea-casa-draft.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea-casa-enter.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea-casa-image.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea-casa-labext.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea-casa-newlauncher.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea-casa-newtab.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea-casa-performance_report.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea-casa-pytest.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea-casa-resources.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea-casa-server_stop.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea-casa-start.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea-casa-startr.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea-casa-tutorials.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea.af.uchicago.edu_hub_login.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea.af.uchicago.edu_hub_spawn.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea.af.uchicago.edu_user_clusters.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea.af.uchicago.edu_user_clusters.scale.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/coffea.af.uchicago.edu_user_fengping.hu.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/dask-labextention-address.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/example1-plot.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/examplezpeak-plot.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/git.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/git2.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/servicex-coffea-workflow.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/servicex-dashboard.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/servicex-profile.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/_static/servicex-registration.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/cc_api.rst +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/cc_condor.rst +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/cc_configuration.rst +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/cc_deployment.rst +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/cc_issues.rst +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/cc_metrics.rst +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/cc_packages.rst +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/cc_setup.rst +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/cc_support.rst +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/cc_user.rst +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/cc_user_registration.rst +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/conf.py +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/gallery/agc_schema.py +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/gallery/analysis-casa.ipynb +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/gallery/analysis_tutorial.ipynb +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/gallery/coffea-casa-template.ipynb +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/gallery/coffea_analysis.ipynb +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/gallery/example1.ipynb +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/gallery/example2.ipynb +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/gallery/example3.ipynb +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/gallery/example4.ipynb +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/gallery/example5.ipynb +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/gallery/example6.ipynb +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/gallery/example7.ipynb +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/gallery/example8.ipynb +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/gallery/ttbar_HT.ipynb +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/gallery/utilities/columnar.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/gallery/utilities/processor.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/gallery/zpeak_example.ipynb +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/index.rst +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs/make.bat +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs-img/logo/coffea-casa-img/B&W/CoffeaCasa_B&W_500X500.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs-img/logo/coffea-casa-img/B&W/CoffeaCasa_IconOnlyI_B&W_500X500.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs-img/logo/coffea-casa-img/B&W/CoffeaCasa_InverseB&W_500X500.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs-img/logo/coffea-casa-img/Brown/CoffeaCasa_Brown_1080X1080_TransparentBG.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs-img/logo/coffea-casa-img/Brown/CoffeaCasa_Brown_500X500_TransparentBG.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs-img/logo/coffea-casa-img/Brown/CoffeaCasa_Brown_500X500_WhiteBG.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs-img/logo/coffea-casa-img/Brown/CoffeaCasa_IconOnly_Brown_500X500_TransparentBG.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs-img/logo/coffea-casa-img/Brown/CoffeaCasa_TextOnly_1080X182_Brown.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs-img/logo/coffea-casa-img/Purple/CoffeaCasa_IconOnly_Purple_500X500_TransparentBG.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs-img/logo/coffea-casa-img/Purple/CoffeaCasa_Purple_1080X1080_TransparentBG.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs-img/logo/coffea-casa-img/Purple/CoffeaCasa_Purple_500X500_TransparentBG.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs-img/logo/coffea-casa-img/Purple/CoffeaCasa_Purple_500X500_WhiteBG.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/docs-img/logo/coffea-casa-img/Purple/CoffeaCasa_TextOnly_1080X182_Purple.png +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/pyproject.toml +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/requirements.txt +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/tests/ca.pem +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/tests/key.pem +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/tests/test_coffeacasa.py +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/tests/test_coffeacasa_args.py +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/tests/test_config.py +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/tests-charts/conftest.py +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/tests-charts/test_hub.py +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/tools/generate-json-schema.py +0 -0
- {coffea_casa-2024.8.7.post0 → coffea_casa-2025.9.24.3}/tools/values.lint-validate.yaml +0 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
name: Auto CalVer Tag on Master Push
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- master
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
calver-tag:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
|
|
12
|
+
steps:
|
|
13
|
+
- name: Checkout code
|
|
14
|
+
uses: actions/checkout@v4
|
|
15
|
+
|
|
16
|
+
- name: Set CalVer date
|
|
17
|
+
id: calver
|
|
18
|
+
run: |
|
|
19
|
+
# Get current date in YYYY.MM.DD format
|
|
20
|
+
date_tag=$(date +'%Y.%m.%d')
|
|
21
|
+
echo "base_tag=$date_tag" >> $GITHUB_OUTPUT
|
|
22
|
+
|
|
23
|
+
- name: Fetch all tags
|
|
24
|
+
run: |
|
|
25
|
+
git fetch --tags
|
|
26
|
+
|
|
27
|
+
- name: Determine next CalVer tag
|
|
28
|
+
id: next_tag
|
|
29
|
+
run: |
|
|
30
|
+
base=${{ steps.calver.outputs.base_tag }}
|
|
31
|
+
# List all existing tags that match today's date
|
|
32
|
+
existing=$(git tag --list "${base}*")
|
|
33
|
+
|
|
34
|
+
if ! echo "$existing" | grep -q "^$base$"; then
|
|
35
|
+
# No base tag exists yet, use the base tag (no suffix)
|
|
36
|
+
new_tag="$base"
|
|
37
|
+
else
|
|
38
|
+
# Base tag exists, find the highest numbered suffix
|
|
39
|
+
max=1 # because base tag is already used
|
|
40
|
+
for tag in $existing; do
|
|
41
|
+
suffix=$(echo $tag | sed -n "s/^$base\.//p")
|
|
42
|
+
if [[ "$suffix" =~ ^[0-9]+$ && "$suffix" -gt "$max" ]]; then
|
|
43
|
+
max=$suffix
|
|
44
|
+
fi
|
|
45
|
+
done
|
|
46
|
+
new_tag="$base.$((max + 1))"
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
echo "New tag: $new_tag"
|
|
50
|
+
echo "new_tag=$new_tag" >> $GITHUB_OUTPUT
|
|
51
|
+
|
|
52
|
+
- name: Create and push new tag
|
|
53
|
+
run: |
|
|
54
|
+
git config user.name "github-actions"
|
|
55
|
+
git config user.email "github-actions@github.com"
|
|
56
|
+
git tag ${{ steps.next_tag.outputs.new_tag }}
|
|
57
|
+
git push origin ${{ steps.next_tag.outputs.new_tag }}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
name: Push tag of docker images
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
|
+
release:
|
|
5
|
+
types:
|
|
6
|
+
- published
|
|
4
7
|
push:
|
|
5
|
-
tags:
|
|
6
|
-
- "*"
|
|
7
8
|
paths:
|
|
8
9
|
- docker/**
|
|
9
10
|
branches:
|
|
@@ -20,37 +21,34 @@ jobs:
|
|
|
20
21
|
strategy:
|
|
21
22
|
fail-fast: false
|
|
22
23
|
matrix:
|
|
23
|
-
|
|
24
|
-
image: [cc-dask-alma9, cc-analysis-alma9]
|
|
25
|
-
# Keep this line in sync with gh actions @ coffea-dask repo
|
|
26
|
-
# python: [3.8, 3.9, '3.10']
|
|
27
|
-
#exclude:
|
|
28
|
-
# - image: cc7
|
|
29
|
-
# python: 3.8
|
|
24
|
+
image: [cc-dask-alma9, cc-analysis-alma9, cc-dask-combine-alma9, cc-analysis-combine-alma9]
|
|
30
25
|
name: ${{ matrix.image }}
|
|
31
26
|
runs-on: ubuntu-latest
|
|
32
27
|
steps:
|
|
28
|
+
|
|
29
|
+
- name: Identify event type
|
|
30
|
+
run: |
|
|
31
|
+
echo "Triggered by: ${{ github.event_name }}"
|
|
32
|
+
|
|
33
33
|
- name: Generate tags
|
|
34
34
|
id: tags
|
|
35
35
|
env:
|
|
36
36
|
image: ${{ env.REGISTRY }}/coffea-casa/${{ matrix.image }}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
stable: ${{ startsWith(github.ref, 'refs/tags') }}
|
|
37
|
+
release: ${{ github.event.release.tag_name }}
|
|
38
|
+
GITHUB_EVENT_NAME: ${{ github.event_name }}
|
|
40
39
|
run: |
|
|
41
|
-
if [ "$
|
|
40
|
+
if [ "${GITHUB_EVENT_NAME}" == "release" ]; then
|
|
42
41
|
tag="${image}:${release}"
|
|
43
42
|
tags=$tag
|
|
44
|
-
releasetag=$
|
|
43
|
+
releasetag=$release
|
|
45
44
|
else
|
|
46
45
|
tag="${image}:development"
|
|
47
46
|
tags=$tag
|
|
48
47
|
releasetag="development"
|
|
49
48
|
fi
|
|
50
|
-
|
|
51
|
-
echo "
|
|
52
|
-
echo "
|
|
53
|
-
echo "::set-output name=releasetag::${releasetag}"
|
|
49
|
+
echo "tag=$tag"
|
|
50
|
+
echo "tags=$tags"
|
|
51
|
+
echo "releasetag=$releasetag"
|
|
54
52
|
- name: Check out code
|
|
55
53
|
uses: actions/checkout@v2
|
|
56
54
|
- name: Set up QEMU
|
|
@@ -73,9 +71,9 @@ jobs:
|
|
|
73
71
|
with:
|
|
74
72
|
context: docker/
|
|
75
73
|
file: docker/Dockerfile.${{ matrix.image }}
|
|
76
|
-
push: ${{ github.event_name == 'push' }}
|
|
77
74
|
platforms: linux/amd64
|
|
78
75
|
tags: ${{ steps.tags.outputs.tags }}
|
|
76
|
+
push: true
|
|
79
77
|
build-args: |
|
|
80
78
|
TAG=${{ steps.tags.outputs.releasetag }}
|
|
81
79
|
PROJECT=${{ env.PROJECT }}
|
|
@@ -18,7 +18,7 @@ jobs:
|
|
|
18
18
|
strategy:
|
|
19
19
|
fail-fast: false
|
|
20
20
|
matrix:
|
|
21
|
-
image: [cc-dask-alma9, cc-analysis-alma9]
|
|
21
|
+
image: [cc-dask-alma9, cc-analysis-alma9, cc-dask-combine-alma9, cc-analysis-combine-alma9]
|
|
22
22
|
# Keep this line in sync with gh actions @ coffea-dask repo
|
|
23
23
|
# python: [3.8, 3.9, '3.10']
|
|
24
24
|
#exclude:
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: Deploy to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
release:
|
|
6
|
+
types:
|
|
7
|
+
- published
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
build-and-inspect-package:
|
|
11
|
+
name: Build & inspect package.
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
- uses: hynek/build-and-inspect-python-package@v2
|
|
16
|
+
|
|
17
|
+
upload-to-pypi:
|
|
18
|
+
name: Upload package to PyPI
|
|
19
|
+
needs: build-and-inspect-package
|
|
20
|
+
environment:
|
|
21
|
+
name: pypi
|
|
22
|
+
url: https://pypi.org/project/coffea-casa/
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
permissions:
|
|
25
|
+
# IMPORTANT: this permission is mandatory for trusted publishing, but
|
|
26
|
+
# should NOT be granted anywhere else!
|
|
27
|
+
id-token: write
|
|
28
|
+
steps:
|
|
29
|
+
- name: Download built artifact to dist/
|
|
30
|
+
uses: actions/download-artifact@v4
|
|
31
|
+
with:
|
|
32
|
+
name: Packages
|
|
33
|
+
path: dist
|
|
34
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
name: Auto Update Base Docker Images
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
schedule:
|
|
5
|
+
- cron: '0 6 * * *' # Every day at 6am UTC
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
update-base-images:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- name: Checkout repo
|
|
13
|
+
uses: actions/checkout@v3
|
|
14
|
+
|
|
15
|
+
- name: Get latest base image tag from Docker Hub
|
|
16
|
+
id: latest
|
|
17
|
+
run: |
|
|
18
|
+
LATEST_TAG=$(curl -s https://registry.hub.docker.com/v2/repositories/coffeateam/coffea-dask-almalinux9-noml/tags |
|
|
19
|
+
jq -r '.results[].name' |
|
|
20
|
+
grep 'py3.12$' |
|
|
21
|
+
sort -V |
|
|
22
|
+
head -n 1 )
|
|
23
|
+
echo "Found latest tag: $LATEST_TAG"
|
|
24
|
+
echo "latest_tag=$LATEST_TAG" >> $GITHUB_OUTPUT
|
|
25
|
+
|
|
26
|
+
- name: Find and update all Dockerfiles
|
|
27
|
+
id: update
|
|
28
|
+
run: |
|
|
29
|
+
set -e
|
|
30
|
+
|
|
31
|
+
UPDATED=false
|
|
32
|
+
LATEST_TAG=${{ steps.latest.outputs.latest_tag }}
|
|
33
|
+
IMAGE_NAME="coffeateam/coffea-dask-almalinux9-noml"
|
|
34
|
+
|
|
35
|
+
for dockerfile in $(find . -name "Dockerfile*"); do
|
|
36
|
+
echo "Checking $dockerfile..."
|
|
37
|
+
|
|
38
|
+
# Extract current tag
|
|
39
|
+
CURRENT_TAG=$(grep -E "^FROM $IMAGE_NAME:" "$dockerfile" | sed "s|FROM $IMAGE_NAME:||")
|
|
40
|
+
|
|
41
|
+
if [ -n "$CURRENT_TAG" ] && [ "$CURRENT_TAG" != "$LATEST_TAG" ]; then
|
|
42
|
+
echo "Updating $dockerfile: $CURRENT_TAG → $LATEST_TAG"
|
|
43
|
+
sed -i "s|$IMAGE_NAME:$CURRENT_TAG|$IMAGE_NAME:$LATEST_TAG|" "$dockerfile"
|
|
44
|
+
UPDATED=true
|
|
45
|
+
else
|
|
46
|
+
echo "No update needed in $dockerfile"
|
|
47
|
+
fi
|
|
48
|
+
done
|
|
49
|
+
|
|
50
|
+
echo "UPDATED=$UPDATED" >> $GITHUB_ENV
|
|
51
|
+
|
|
52
|
+
- name: Create Pull Request
|
|
53
|
+
if: env.UPDATED == 'true'
|
|
54
|
+
uses: peter-evans/create-pull-request@v5
|
|
55
|
+
with:
|
|
56
|
+
token: ${{ secrets.REPO_ACCESS_TOKEN }}
|
|
57
|
+
commit-message: "chore: update base image to coffeateam/coffea-dask-almalinux9-noml:${{ steps.latest.outputs.latest_tag }}"
|
|
58
|
+
title: "chore: update base image to coffeateam/coffea-dask-almalinux9-noml:${{ steps.latest.outputs.latest_tag }}"
|
|
59
|
+
author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
|
|
60
|
+
branch: "update-coffea-base-image"
|
|
61
|
+
body: |
|
|
62
|
+
A new Coffea image version has been detected.
|
|
63
|
+
|
|
64
|
+
This PR updates all Dockerfiles that use `coffeateam/coffea-dask-almalinux9-noml:<old>` to `coffeateam/coffea-dask-almalinux9-noml:${{ steps.latest.outputs.latest_tag }}`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: coffea-casa
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2025.9.24.3
|
|
4
4
|
Summary: Wrappers for Dask clusters to be used from coffea-casa AF
|
|
5
5
|
Project-URL: Homepage, https://github.com/CoffeaTeam/coffea-casa
|
|
6
6
|
Project-URL: Documentation, https://coffea-casa.readthedocs.io/en/latest/
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# file generated by setuptools-scm
|
|
2
|
+
# don't change, don't track in version control
|
|
3
|
+
|
|
4
|
+
__all__ = [
|
|
5
|
+
"__version__",
|
|
6
|
+
"__version_tuple__",
|
|
7
|
+
"version",
|
|
8
|
+
"version_tuple",
|
|
9
|
+
"__commit_id__",
|
|
10
|
+
"commit_id",
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
TYPE_CHECKING = False
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from typing import Tuple
|
|
16
|
+
from typing import Union
|
|
17
|
+
|
|
18
|
+
VERSION_TUPLE = Tuple[Union[int, str], ...]
|
|
19
|
+
COMMIT_ID = Union[str, None]
|
|
20
|
+
else:
|
|
21
|
+
VERSION_TUPLE = object
|
|
22
|
+
COMMIT_ID = object
|
|
23
|
+
|
|
24
|
+
version: str
|
|
25
|
+
__version__: str
|
|
26
|
+
__version_tuple__: VERSION_TUPLE
|
|
27
|
+
version_tuple: VERSION_TUPLE
|
|
28
|
+
commit_id: COMMIT_ID
|
|
29
|
+
__commit_id__: COMMIT_ID
|
|
30
|
+
|
|
31
|
+
__version__ = version = '2025.9.24.3'
|
|
32
|
+
__version_tuple__ = version_tuple = (2025, 9, 24, 3)
|
|
33
|
+
|
|
34
|
+
__commit_id__ = commit_id = None
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"""CoffeaCasaCluster class
|
|
2
2
|
"""
|
|
3
3
|
import os
|
|
4
|
-
import sys
|
|
5
4
|
from pathlib import Path
|
|
5
|
+
import sys
|
|
6
6
|
import dask
|
|
7
7
|
from dask_jobqueue.htcondor import HTCondorCluster, HTCondorJob
|
|
8
8
|
from distributed.security import Security
|
|
@@ -17,17 +17,11 @@ DEFAULT_NANNY_PORT = 8001
|
|
|
17
17
|
# REMOVE ME (backward compatibity for now)
|
|
18
18
|
SECRETS_DIR = Path("/etc/cmsaf-secrets")
|
|
19
19
|
SECRETS_DIR_CHOWN = Path("/etc/cmsaf-secrets-chown")
|
|
20
|
-
# CEPH (Skyhook)
|
|
21
|
-
CEPH_DIR = Path("/opt/ceph")
|
|
22
|
-
CEPH_CONF = CEPH_DIR / "ceph.conf"
|
|
23
|
-
KEYRING_CONF = CEPH_DIR / "keyring"
|
|
24
20
|
CA_FILE = SECRETS_DIR / "ca.pem"
|
|
25
21
|
CERT_FILE = SECRETS_DIR / "hostcert.pem"
|
|
26
22
|
HOME_DIR = Path.home()
|
|
27
23
|
# XCache
|
|
28
|
-
#
|
|
29
|
-
XCACHE_FILE = SECRETS_DIR / "xcache_token"
|
|
30
|
-
XCACHE_SCITOKEN_FILE = SECRETS_DIR_CHOWN / "access_token"
|
|
24
|
+
#XCACHE_SCITOKEN_FILE = SECRETS_DIR_CHOWN / "access_token"
|
|
31
25
|
# pip
|
|
32
26
|
PIP_REQUIREMENTS = HOME_DIR / "requirements.txt"
|
|
33
27
|
# conda, with yml/yaml both supported
|
|
@@ -36,6 +30,56 @@ if (HOME_DIR / "environment.yaml").is_file():
|
|
|
36
30
|
else:
|
|
37
31
|
CONDA_ENV = HOME_DIR / "environment.yml"
|
|
38
32
|
|
|
33
|
+
import os
|
|
34
|
+
from pathlib import Path
|
|
35
|
+
|
|
36
|
+
def bearer_token_path():
|
|
37
|
+
"""Return the path to the user's X.509 proxy or None if not found"""
|
|
38
|
+
|
|
39
|
+
def check_token_path(path, suffix=''):
|
|
40
|
+
token_path = f'{path}{suffix}'
|
|
41
|
+
if Path(token_path).is_file():
|
|
42
|
+
return token_path
|
|
43
|
+
return None
|
|
44
|
+
|
|
45
|
+
# 1. Check BEARER_TOKEN_FILE env variable
|
|
46
|
+
try:
|
|
47
|
+
path = check_token_path(os.environ['BEARER_TOKEN_FILE'])
|
|
48
|
+
if path:
|
|
49
|
+
return path
|
|
50
|
+
except KeyError:
|
|
51
|
+
pass
|
|
52
|
+
|
|
53
|
+
# 2. Check XDG_RUNTIME_DIR + /bt_u$UID
|
|
54
|
+
try:
|
|
55
|
+
xdg_runtime_dir = os.environ['XDG_RUNTIME_DIR']
|
|
56
|
+
path = check_token_path(xdg_runtime_dir, suffix=f'/bt_u{os.geteuid()}')
|
|
57
|
+
if path:
|
|
58
|
+
return path
|
|
59
|
+
except KeyError:
|
|
60
|
+
pass
|
|
61
|
+
|
|
62
|
+
# 3. Check /tmp/bt_u$UID
|
|
63
|
+
try:
|
|
64
|
+
path = check_token_path(f'/tmp/bt_u{os.geteuid()}')
|
|
65
|
+
if path:
|
|
66
|
+
return path
|
|
67
|
+
except KeyError:
|
|
68
|
+
pass
|
|
69
|
+
|
|
70
|
+
return None
|
|
71
|
+
|
|
72
|
+
def x509_user_proxy_path():
|
|
73
|
+
"""Return the path to the user's X.509 proxy or raise FileNotFoundError if it doesn't exist on disk
|
|
74
|
+
"""
|
|
75
|
+
try:
|
|
76
|
+
path = os.environ['X509_USER_PROXY']
|
|
77
|
+
except KeyError:
|
|
78
|
+
path = f'/tmp/x509up_u{os.geteuid()}'
|
|
79
|
+
|
|
80
|
+
if open(path):
|
|
81
|
+
return path
|
|
82
|
+
return None # we shouldn't get here; failure to open should raise OSError
|
|
39
83
|
|
|
40
84
|
def merge_dicts(*dict_args):
|
|
41
85
|
"""
|
|
@@ -136,23 +180,21 @@ class CoffeaCasaCluster(HTCondorCluster):
|
|
|
136
180
|
):
|
|
137
181
|
job_config = job_kwargs.copy()
|
|
138
182
|
input_files = []
|
|
139
|
-
if CEPH_CONF.is_file() and KEYRING_CONF.is_file():
|
|
140
|
-
input_files += [CEPH_CONF, KEYRING_CONF]
|
|
141
183
|
if PIP_REQUIREMENTS.is_file():
|
|
142
184
|
input_files += [PIP_REQUIREMENTS]
|
|
143
185
|
if CONDA_ENV.is_file():
|
|
144
186
|
input_files += [CONDA_ENV]
|
|
187
|
+
opendata = os.environ.get('OPENDATA_INSTANCE')
|
|
145
188
|
# If we have certs in env, lets try to use TLS
|
|
146
189
|
if (CA_FILE.is_file() and CERT_FILE.is_file() and cls.security().get_connection_args("scheduler")["require_encryption"]):
|
|
147
190
|
job_config["protocol"] = "tls://"
|
|
148
191
|
job_config["security"] = cls.security()
|
|
149
192
|
input_files += [CA_FILE, CERT_FILE]
|
|
150
|
-
|
|
193
|
+
XCACHE_SCITOKEN_FILE = bearer_token_path()
|
|
194
|
+
if XCACHE_SCITOKEN_FILE:
|
|
151
195
|
input_files += [XCACHE_SCITOKEN_FILE]
|
|
152
|
-
if (XCACHE_FILE.is_file()):
|
|
153
|
-
input_files += [XCACHE_FILE]
|
|
154
196
|
else:
|
|
155
|
-
|
|
197
|
+
print("Warning: No bearer token found — proceeding without it.")
|
|
156
198
|
files = ", ".join(str(path) for path in input_files)
|
|
157
199
|
## Networking settings
|
|
158
200
|
try:
|
|
@@ -187,6 +229,14 @@ class CoffeaCasaCluster(HTCondorCluster):
|
|
|
187
229
|
dask.config.get(f"jobqueue.{cls.config_name}.scheduler-options"),
|
|
188
230
|
),
|
|
189
231
|
)
|
|
232
|
+
# try in case we have x509 proxy
|
|
233
|
+
try:
|
|
234
|
+
proxy = x509_user_proxy_path()
|
|
235
|
+
if proxy:
|
|
236
|
+
use_proxy = True
|
|
237
|
+
except:
|
|
238
|
+
use_proxy = False
|
|
239
|
+
pass
|
|
190
240
|
## Job extra settings (HTCondor ClassAd)
|
|
191
241
|
job_config["job_extra_directives"] = merge_dicts(
|
|
192
242
|
{
|
|
@@ -198,6 +248,7 @@ class CoffeaCasaCluster(HTCondorCluster):
|
|
|
198
248
|
"dask_container_port": DEFAULT_CONTAINER_PORT,
|
|
199
249
|
"nanny_container_port": DEFAULT_NANNY_PORT,
|
|
200
250
|
},
|
|
251
|
+
{"use_x509userproxy": use_proxy},
|
|
201
252
|
{"transfer_input_files": files},
|
|
202
253
|
{"encrypt_input_files": files},
|
|
203
254
|
{"transfer_output_files": ""},
|
|
@@ -205,9 +256,9 @@ class CoffeaCasaCluster(HTCondorCluster):
|
|
|
205
256
|
{"should_transfer_files": "YES"},
|
|
206
257
|
{"Stream_Output": "False"},
|
|
207
258
|
{"Stream_Error": "False"},
|
|
208
|
-
{"+CoffeaCasaWorkerType": "dask"},
|
|
259
|
+
{"+CoffeaCasaWorkerType": '"dask"'},
|
|
209
260
|
{"+DaskSchedulerAddress": external_ip_string},
|
|
210
|
-
{"+AccountingGroup": "cms.other.coffea.$ENV(HOSTNAME)"},
|
|
261
|
+
{"+AccountingGroup": '"cms.other.coffea.$ENV(HOSTNAME)"'},
|
|
211
262
|
job_kwargs.get(
|
|
212
263
|
"job_extra_directives", dask.config.get(f"jobqueue.{cls.config_name}.job_extra_directives")
|
|
213
264
|
),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#FROM coffeateam/coffea-base-almalinux8:0.7.22-py3.10
|
|
2
|
-
FROM coffeateam/coffea-dask-almalinux9:
|
|
2
|
+
FROM coffeateam/coffea-dask-almalinux9-noml:2025.9.0-py3.12
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
USER root
|
|
@@ -9,6 +9,8 @@ ARG TAG="development"
|
|
|
9
9
|
ARG NB_USER="cms-jovyan"
|
|
10
10
|
ARG NB_UID="6440"
|
|
11
11
|
ARG NB_GID="11265"
|
|
12
|
+
ARG CONDOR_USER="condor"
|
|
13
|
+
ARG CONDOR_GID="989"
|
|
12
14
|
ARG CERT_DIR="/etc/cmsaf-secrets"
|
|
13
15
|
# Hack for GH Actions
|
|
14
16
|
ARG GITHUB_ACTIONS="false"
|
|
@@ -38,10 +40,12 @@ ENV LANGUAGE en_US.UTF-8
|
|
|
38
40
|
|
|
39
41
|
# Install all OS dependencies for notebook server that starts but lacks all
|
|
40
42
|
# features (e.g., download as all possible file formats)
|
|
41
|
-
RUN yum -y
|
|
43
|
+
RUN yum install -y https://repo.osg-htc.org/osg/24-main/osg-24-main-el9-release-latest.rpm \
|
|
44
|
+
&& yum -y update \
|
|
42
45
|
&& yum -y group install "Development Tools" \
|
|
43
46
|
&& yum -y install \
|
|
44
47
|
wget \
|
|
48
|
+
osg-ca-certs \
|
|
45
49
|
epel-release \
|
|
46
50
|
gettext \
|
|
47
51
|
bzip2 \
|
|
@@ -50,6 +54,7 @@ RUN yum -y update \
|
|
|
50
54
|
langpacks-en \
|
|
51
55
|
glibc-langpack-en \
|
|
52
56
|
glibc-all-langpacks \
|
|
57
|
+
glibc-headers \
|
|
53
58
|
liberation-fonts \
|
|
54
59
|
wget \
|
|
55
60
|
nss_wrapper \
|
|
@@ -78,11 +83,6 @@ RUN chmod +x /usr/bin/tini
|
|
|
78
83
|
COPY jupyterhub/fix-permissions /usr/local/bin/fix-permissions
|
|
79
84
|
RUN chmod a+rx /usr/local/bin/fix-permissions
|
|
80
85
|
|
|
81
|
-
RUN rm -rf /etc/grid-security && \
|
|
82
|
-
ln -s /usr/local/etc/grid-security /etc/grid-security && \
|
|
83
|
-
chmod 755 /etc/grid-security/certificates && \
|
|
84
|
-
chmod g-w /etc/grid-security/certificates
|
|
85
|
-
|
|
86
86
|
# Enable prompt color in the skeleton .bashrc before creating the default NB_USER
|
|
87
87
|
# hadolint ignore=SC2016
|
|
88
88
|
RUN sed -i 's/^#force_color_prompt=yes/force_color_prompt=yes/' /etc/skel/.bashrc && \
|
|
@@ -113,20 +113,25 @@ RUN mkdir $HOME/work && \
|
|
|
113
113
|
mkdir -p $HOME/.condor/tokens.d && \
|
|
114
114
|
fix-permissions $HOME
|
|
115
115
|
|
|
116
|
+
# FIXME:
|
|
117
|
+
# Terrible bug in all .r0 not allowing to use our xcache +
|
|
118
|
+
# + wrongly activated conda base environment in base image
|
|
119
|
+
RUN conda init && \
|
|
120
|
+
source /home/cms-jovyan/.bashrc && \
|
|
121
|
+
mamba uninstall -y ca-policy-lcg
|
|
122
|
+
|
|
116
123
|
#Dask dependencies and HTCondor
|
|
117
124
|
RUN mamba install --yes \
|
|
118
125
|
-c conda-forge \
|
|
119
126
|
xgboost \
|
|
120
|
-
pyhf \
|
|
121
|
-
xrootd \
|
|
122
|
-
scipy>=1.8.1 \
|
|
123
127
|
cabinetry \
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
mplhep \
|
|
127
|
-
iminuit \
|
|
128
|
+
pyhf \
|
|
129
|
+
atlas-schema \
|
|
128
130
|
cmake \
|
|
129
131
|
ndcctools \
|
|
132
|
+
# last working version with x509
|
|
133
|
+
#htcondor=10.8.0 \
|
|
134
|
+
#openssl=3.3.1 \
|
|
130
135
|
&& mamba clean \
|
|
131
136
|
--all \
|
|
132
137
|
--force-pkgs-dirs \
|
|
@@ -135,15 +140,14 @@ RUN mamba install --yes \
|
|
|
135
140
|
RUN pip install --no-cache-dir \
|
|
136
141
|
aiostream \
|
|
137
142
|
supervisor \
|
|
138
|
-
|
|
139
|
-
|
|
143
|
+
#funcx \ outdated dependencies
|
|
144
|
+
pixi-kernel \
|
|
145
|
+
scikit-hep-testdata \
|
|
140
146
|
pyyaml \
|
|
141
|
-
# ML packages
|
|
142
|
-
dask-ml \
|
|
143
|
-
dask-gateway \
|
|
144
147
|
prometheus_client \
|
|
145
148
|
comm>=0.1.2 \
|
|
146
|
-
mlflow
|
|
149
|
+
mlflow \
|
|
150
|
+
s3fs
|
|
147
151
|
|
|
148
152
|
#RUN if [ "${TAG:-}" == "development" ]; then pip install --no-cache-dir git+https://github.com/CoffeaTeam/coffea-casa.git#egg=coffea_casa ; else pip install --no-cache-dir coffea_casa -U ; fi
|
|
149
153
|
RUN pip install --no-cache-dir git+https://github.com/CoffeaTeam/coffea-casa.git#egg=coffea_casa
|
|
@@ -154,17 +158,13 @@ RUN cd /tmp && \
|
|
|
154
158
|
cd xrdcl-authz-plugin && \
|
|
155
159
|
mkdir build && \
|
|
156
160
|
cd build && \
|
|
157
|
-
cmake /tmp/xrdcl-authz-plugin -DCMAKE_INSTALL_PREFIX=${CONDA_DIR} && \
|
|
161
|
+
cmake /tmp/xrdcl-authz-plugin -DCMAKE_INSTALL_PREFIX=${CONDA_DIR} -DCMAKE_POLICY_VERSION_MINIMUM=3.5 && \
|
|
158
162
|
make && \
|
|
159
163
|
make install
|
|
160
164
|
|
|
161
165
|
ENV XRD_PLUGINCONFDIR="${CONDA_DIR}/etc/xrootd/client.plugins.d/"
|
|
162
166
|
ENV XRD_PLUGIN="${CONDA_DIR}/lib/libXrdClXcachePlugin-5.so"
|
|
163
167
|
|
|
164
|
-
# Include additional CA certificates beyond ca-policy-lcg
|
|
165
|
-
COPY certs/* /etc/grid-security/certificates/
|
|
166
|
-
RUN openssl rehash /etc/grid-security/certificates/
|
|
167
|
-
|
|
168
168
|
# TODO: RETEST IF WE STILL NEED THIS
|
|
169
169
|
ENV LD_LIBRARY_PATH="${CONDA_DIR}/lib/:$LD_LIBRARY_PATH"
|
|
170
170
|
ENV PATH="${CONDA_DIR}/bin/:$PATH"
|
|
@@ -172,21 +172,35 @@ ENV PATH="${CONDA_DIR}/bin/:$PATH"
|
|
|
172
172
|
USER root
|
|
173
173
|
# Setup supervisord files
|
|
174
174
|
COPY k8s-worker/supervisord.conf /etc/supervisor/
|
|
175
|
+
|
|
176
|
+
# Fix permission after all packages installations are done
|
|
177
|
+
RUN fix-permissions "${CONDA_DIR}"
|
|
178
|
+
|
|
179
|
+
# Include additional CA certificates beyond ca-policy-lcg
|
|
180
|
+
COPY certs/* /etc/grid-security/certificates/
|
|
181
|
+
RUN openssl rehash /etc/grid-security/certificates/
|
|
182
|
+
|
|
183
|
+
RUN chmod -R g-w /usr/local/etc/grid-security/ && chmod -R g-w /etc/grid-security/
|
|
184
|
+
#chown -h "${NB_USER}:${NB_GID}" /etc/grid-security && \
|
|
185
|
+
#test -d /usr/local/etc/grid-security && chmod -R 755 /usr/local/etc/grid-security && \
|
|
186
|
+
#find /usr/local/etc/grid-security -type f -exec chmod g-w {} + && \
|
|
187
|
+
#test -d /etc/grid-security && chmod -R 755 /etc/grid-security
|
|
175
188
|
# Setup HTCondor user/group and change group for user $NB_USER
|
|
176
189
|
# Fix error (submitting jobs as user/group 0 (root) is not allowed for security reasons) and
|
|
177
190
|
# it configured from kubernetes side and updated in docker container to match it
|
|
178
|
-
|
|
179
|
-
|
|
191
|
+
|
|
192
|
+
RUN groupadd -g 989 condor && \
|
|
193
|
+
useradd -u 989 -g 989 -d /var/lib/condor -s /sbin/nologin condor && \
|
|
194
|
+
mkdir -p /var/lib/condor/spool && \
|
|
195
|
+
#chown -R "${CONDOR_USER}:${CONDOR_GID}" /var/lib/condor && \
|
|
196
|
+
chmod -R 755 /var/lib/condor
|
|
180
197
|
|
|
181
198
|
# FIXME: merge PRs open in distributed.git (oshadura)
|
|
182
199
|
# Distributed: we need to install patched version of distributed version
|
|
183
|
-
COPY dask/distributed ${CONDA_DIR}/lib/python3.
|
|
184
|
-
RUN cd ${CONDA_DIR}/lib/python3.
|
|
200
|
+
COPY dask/distributed ${CONDA_DIR}/lib/python3.12/site-packages/distributed
|
|
201
|
+
RUN cd ${CONDA_DIR}/lib/python3.12/site-packages/distributed && \
|
|
185
202
|
patch -p2 < 0001-Patch-from-bbockelman-adaptive-scaling.patch && \
|
|
186
203
|
patch -p2 < 0002-Allow-scheduler-to-preserve-worker-hostnames.patch
|
|
187
|
-
# && patch -p2 < 0003-Activate-patch.patch
|
|
188
|
-
# && patch -p2 < 0004-Add-possibility-to-setup-external_adress-for-schedul.patch
|
|
189
|
-
# && patch -p2 < 0005-Add-nanny-patch.patch
|
|
190
204
|
|
|
191
205
|
# FIXME: we have a wrong path, let's make a link.
|
|
192
206
|
# cms-jovyan@jupyter-oksana-2eshadura-40cern-2ech:~$ echo $PATH
|
|
@@ -200,7 +214,7 @@ RUN rm -rf /tmp/* \
|
|
|
200
214
|
&& find ${CONDA_DIR} -type f -name '*.a' -delete \
|
|
201
215
|
&& find ${CONDA_DIR} -type f -name '*.pyc' -delete \
|
|
202
216
|
&& find ${CONDA_DIR} -type f -name '*.js.map' -delete \
|
|
203
|
-
&& (find ${CONDA_DIR}/lib/python3.
|
|
217
|
+
&& (find ${CONDA_DIR}/lib/python3.12/site-packages/bokeh/server/static -type f,l -name '*.js' -not -name '*.min.js' -delete || echo "no bokeh static files to cleanup") \
|
|
204
218
|
&& rm -rf ${CONDA_DIR}/pkgs
|
|
205
219
|
|
|
206
220
|
# Mkdir CVMFS mount directory. Mount done upstream in configs. Harmless
|