From 335812d367ee71cb91bc933df552355d8a75db19 Mon Sep 17 00:00:00 2001 From: Daniela Plascencia Date: Mon, 27 May 2024 15:54:07 +0200 Subject: [PATCH] chore: remove argo-server from repository (#170) It has been decided by the CKF team that this component will no longer be supported, as the main use of the components of this repository is by the Kubeflow pipelines, specifically the argo-controller. This commit removes all traces of the argo-server charm. Fixes #167 --- .github/workflows/integrate.yaml | 17 +- bundle.yaml | 7 +- charms/argo-server/CONTRIBUTING.md | 64 -------- charms/argo-server/README.md | 7 - charms/argo-server/charmcraft.yaml | 14 -- charms/argo-server/config.yaml | 8 - charms/argo-server/icon.svg | 170 -------------------- charms/argo-server/metadata.yaml | 20 --- charms/argo-server/pyproject.toml | 40 ----- charms/argo-server/requirements-fmt.in | 2 - charms/argo-server/requirements-fmt.txt | 24 --- charms/argo-server/requirements-lint.in | 8 - charms/argo-server/requirements-lint.txt | 51 ------ charms/argo-server/requirements-unit.in | 22 --- charms/argo-server/requirements-unit.txt | 39 ----- charms/argo-server/requirements.in | 5 - charms/argo-server/requirements.txt | 14 -- charms/argo-server/src/charm.py | 160 ------------------ charms/argo-server/tests/unit/test_charm.py | 44 ----- charms/argo-server/tox.ini | 74 --------- tox.ini | 5 +- 21 files changed, 6 insertions(+), 789 deletions(-) delete mode 100644 charms/argo-server/CONTRIBUTING.md delete mode 100644 charms/argo-server/README.md delete mode 100644 charms/argo-server/charmcraft.yaml delete mode 100644 charms/argo-server/config.yaml delete mode 100644 charms/argo-server/icon.svg delete mode 100755 charms/argo-server/metadata.yaml delete mode 100644 charms/argo-server/pyproject.toml delete mode 100644 charms/argo-server/requirements-fmt.in delete mode 100644 charms/argo-server/requirements-fmt.txt delete mode 100644 charms/argo-server/requirements-lint.in delete mode 100644 charms/argo-server/requirements-lint.txt delete mode 100644 charms/argo-server/requirements-unit.in delete mode 100644 charms/argo-server/requirements-unit.txt delete mode 100644 charms/argo-server/requirements.in delete mode 100644 charms/argo-server/requirements.txt delete mode 100755 charms/argo-server/src/charm.py delete mode 100644 charms/argo-server/tests/unit/test_charm.py delete mode 100644 charms/argo-server/tox.ini diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index 75b331d..1645e62 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -10,43 +10,32 @@ on: jobs: lib-check: name: Check libraries - strategy: - matrix: - charm: - - argo-controller - - argo-server uses: canonical/charmed-kubeflow-workflows/.github/workflows/_quality-checks.yaml@main secrets: inherit with: - charm-path: ./charms/${{ matrix.charm }} + charm-path: ./charms/argo-controller lint: name: Lint Code runs-on: ubuntu-20.04 - strategy: - matrix: - charm: [argo-controller, argo-server] steps: - name: Check out repo uses: actions/checkout@v3 - run: | sudo apt update sudo apt install tox - - run: tox -vve ${{ matrix.charm }}-lint + - run: tox -vve argo-controller-lint unit: name: Unit Tests runs-on: ubuntu-20.04 - strategy: - matrix: - charm: [argo-controller, argo-server] steps: - name: Check out repo uses: actions/checkout@v3 - run: | sudo apt update sudo apt install tox - - run: tox -vve ${{ matrix.charm }}-unit + - run: tox -vve argo-controller-unit integration: name: Integration Test diff --git a/bundle.yaml b/bundle.yaml index 04aba98..6530d3e 100644 --- a/bundle.yaml +++ b/bundle.yaml @@ -1,4 +1,4 @@ -# Copyright 2023 Canonical Ltd. +# Copyright 2024 Canonical Ltd. # See LICENSE file for licensing details. bundle: kubernetes @@ -9,11 +9,6 @@ applications: channel: latest/edge source: ./operators/argo-controller scale: 1 - argo-server: - charm: ch:argo-server - channel: latest/edge - source: ./operators/argo-server - scale: 1 minio: charm: ch:minio channel: latest/edge diff --git a/charms/argo-server/CONTRIBUTING.md b/charms/argo-server/CONTRIBUTING.md deleted file mode 100644 index 904586e..0000000 --- a/charms/argo-server/CONTRIBUTING.md +++ /dev/null @@ -1,64 +0,0 @@ -# Contributing - -## Overview - -This document outlines the processes and practices recommended for contributing enhancements to `argo-server`. - -## Talk to us First - -Before developing enhancements to this charm, you should [open an issue](/../../issues) explaining your use case. If you would like to chat with us about your use-cases or proposed implementation, you can reach us at [MLOps Mattermost public channel](https://chat.charmhub.io/charmhub/channels/mlops-documentation) or on [Discourse](https://discourse.charmhub.io/). - -## Pull Requests - -Please help us out in ensuring easy to review branches by rebasing your pull request branch onto the `main` branch. This also avoids merge commits and creates a linear Git commit history. - -All pull requests require review before being merged. Code review typically examines: - - code quality - - test coverage - - user experience for Juju administrators of this charm. - -## Recommended Knowledge - -Familiarising yourself with the [Charmed Operator Framework](https://juju.is/docs/sdk) library will help you a lot when working on new features or bug fixes. - -## Build Charm - -To build `argo-server` run: - -```shell -charmcraft pack -``` - -## Developing - -You can use the environments created by `tox` for development. For example, to load the `unit` environment into your shell, run: - -```shell -tox --notest -e unit -source .tox/unit/bin/activate -``` - -### Testing - -Use tox for testing. For example to test the `lint` environment, run: - -```shell -tox -e lint -``` - -See `tox.ini` for all available environments. - -### Deploy - -```bash -# Create a model -juju add-model dev -# Enable DEBUG logging -juju model-config logging-config="=INFO;unit=DEBUG" -# Deploy the charm -juju deploy ./argo-server_ubuntu-20.04-amd64.charm \ - --resource oci-image=$(yq '.resources."oci-image"."upstream-source"' metadata.yaml) - -## Canonical Contributor Agreement - -Canonical welcomes contributions to this charm. Please check out our [contributor agreement](https://ubuntu.com/legal/contributors) if you're interested in contributing. \ No newline at end of file diff --git a/charms/argo-server/README.md b/charms/argo-server/README.md deleted file mode 100644 index 8c1c843..0000000 --- a/charms/argo-server/README.md +++ /dev/null @@ -1,7 +0,0 @@ -Charmed Argo -============ - -This charm is part of the Argo bundle. For instructions on how to deploy it, -see https://jaas.ai/argo. - -Upstream documentation can be found at https://argoproj.github.io/argo/ diff --git a/charms/argo-server/charmcraft.yaml b/charms/argo-server/charmcraft.yaml deleted file mode 100644 index 0e99362..0000000 --- a/charms/argo-server/charmcraft.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright 2023 Canonical Ltd. -# See LICENSE file for licensing details. - -type: charm -bases: - - build-on: - - name: "ubuntu" - channel: "20.04" - run-on: - - name: "ubuntu" - channel: "20.04" -parts: - charm: - charm-python-packages: [setuptools, pip] diff --git a/charms/argo-server/config.yaml b/charms/argo-server/config.yaml deleted file mode 100644 index 7bbd4a3..0000000 --- a/charms/argo-server/config.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright 2023 Canonical Ltd. -# See LICENSE file for licensing details. - -options: - port: - type: int - default: 2746 - description: Argo Server port diff --git a/charms/argo-server/icon.svg b/charms/argo-server/icon.svg deleted file mode 100644 index aac8971..0000000 --- a/charms/argo-server/icon.svg +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - image/svg+xml - - Argo logo - - - - - - Argo logo - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/charms/argo-server/metadata.yaml b/charms/argo-server/metadata.yaml deleted file mode 100755 index cb16ea3..0000000 --- a/charms/argo-server/metadata.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright 2023 Canonical Ltd. -# See LICENSE file for licensing details. -name: argo-server -summary: Container-Native Workflow Engine for Kubernetes -description: Container-Native Workflow Engine for Kubernetes -website: https://charmhub.io/argo-server -source: https://github.com/canonical/argo-operators/argo-server -issues: https://github.com/canonical/argo-operators/issues -docs: https://discourse.charmhub.io/t/8213 -min-juju-version: "2.9.0" -series: [kubernetes] -resources: - oci-image: - type: oci-image - description: 'Backing OCI image' - auto-fetch: true - upstream-source: argoproj/argocli:v3.3.10 -deployment: - type: stateless - service: omit diff --git a/charms/argo-server/pyproject.toml b/charms/argo-server/pyproject.toml deleted file mode 100644 index de8987a..0000000 --- a/charms/argo-server/pyproject.toml +++ /dev/null @@ -1,40 +0,0 @@ -# Copyright 2023 Canonical Ltd. -# See LICENSE file for licensing details. - -# Testing tools configuration -[tool.coverage.run] -branch = true - -[tool.coverage.report] -show_missing = true - -[tool.pytest.ini_options] -minversion = "6.0" -log_cli_level = "INFO" - -# Formatting tools configuration -[tool.black] -line-length = 99 -target-version = ["py38"] - -[tool.isort] -line_length = 99 -profile = "black" - -# Linting tools configuration -[tool.flake8] -max-line-length = 99 -max-doc-length = 99 -max-complexity = 10 -exclude = [".git", "__pycache__", ".tox", "build", "dist", "*.egg_info", "venv"] -select = ["E", "W", "F", "C", "N", "R", "D", "H"] -# Ignore W503, E501 because using black creates errors with this -# Ignore D107 Missing docstring in __init__ -ignore = ["W503", "E501", "D107"] -# D100, D101, D102, D103: Ignore missing docstrings in tests -per-file-ignores = ["tests/*:D100,D101,D102,D103,D104"] -docstring-convention = "google" -# Check for properly formatted copyright header in each file -copyright-check = "True" -copyright-author = "Canonical Ltd." -copyright-regexp = "Copyright\\s\\d{4}([-,]\\d{4})*\\s+%(author)s" diff --git a/charms/argo-server/requirements-fmt.in b/charms/argo-server/requirements-fmt.in deleted file mode 100644 index 7559a40..0000000 --- a/charms/argo-server/requirements-fmt.in +++ /dev/null @@ -1,2 +0,0 @@ -black -isort diff --git a/charms/argo-server/requirements-fmt.txt b/charms/argo-server/requirements-fmt.txt deleted file mode 100644 index a0318fe..0000000 --- a/charms/argo-server/requirements-fmt.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile requirements-fmt.in -# -black==23.7.0 - # via -r requirements-fmt.in -click==8.1.6 - # via black -isort==5.12.0 - # via -r requirements-fmt.in -mypy-extensions==1.0.0 - # via black -packaging==23.1 - # via black -pathspec==0.11.2 - # via black -platformdirs==3.10.0 - # via black -tomli==2.0.1 - # via black -typing-extensions==4.7.1 - # via black diff --git a/charms/argo-server/requirements-lint.in b/charms/argo-server/requirements-lint.in deleted file mode 100644 index 07a4a51..0000000 --- a/charms/argo-server/requirements-lint.in +++ /dev/null @@ -1,8 +0,0 @@ -black -codespell -flake8 -flake8-builtins -flake8-copyright -isort -pep8-naming -pyproject-flake8 diff --git a/charms/argo-server/requirements-lint.txt b/charms/argo-server/requirements-lint.txt deleted file mode 100644 index 1edc2e8..0000000 --- a/charms/argo-server/requirements-lint.txt +++ /dev/null @@ -1,51 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile requirements-lint.in -# -black==23.7.0 - # via -r requirements-lint.in -click==8.1.6 - # via black -codespell==2.2.5 - # via -r requirements-lint.in -flake8==6.0.0 - # via - # -r requirements-lint.in - # flake8-builtins - # pep8-naming - # pyproject-flake8 -flake8-builtins==2.1.0 - # via -r requirements-lint.in -flake8-copyright==0.2.4 - # via -r requirements-lint.in -isort==5.12.0 - # via -r requirements-lint.in -mccabe==0.7.0 - # via flake8 -mypy-extensions==1.0.0 - # via black -packaging==23.1 - # via black -pathspec==0.11.2 - # via black -pep8-naming==0.13.3 - # via -r requirements-lint.in -platformdirs==3.10.0 - # via black -pycodestyle==2.10.0 - # via flake8 -pyflakes==3.0.1 - # via flake8 -pyproject-flake8==6.0.0.post1 - # via -r requirements-lint.in -tomli==2.0.1 - # via - # black - # pyproject-flake8 -typing-extensions==4.7.1 - # via black - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/charms/argo-server/requirements-unit.in b/charms/argo-server/requirements-unit.in deleted file mode 100644 index 421af66..0000000 --- a/charms/argo-server/requirements-unit.in +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright 2023 Canonical Ltd. -# See LICENSE file for licensing details. -# Please note this file introduces dependencies from the charm's requirements.in, -# special attention must be taken when updating this or the other .in file to try -# to avoid incompatibilities. -# Rules for editing this file: -# * Removing a dependency that is no longer used in the unit test file(s) -# is allowed, and should not represent any risk. -# * Adding a dependency in this file means the dependency is directly used -# in the unit test files(s). -# * ALL python packages/libs used directly in the unit test file(s) must be -# listed here even if requirements.in is already adding them. This will -# add clarity to the dependency list. -# * Pinning a version of a python package/lib shared with requirements.in -# must not introduce any incompatibilities. -coverage -ops -pytest -pytest-mock -pytest-lazy-fixture -pyyaml --r requirements.in diff --git a/charms/argo-server/requirements-unit.txt b/charms/argo-server/requirements-unit.txt deleted file mode 100644 index bd67e5a..0000000 --- a/charms/argo-server/requirements-unit.txt +++ /dev/null @@ -1,39 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile requirements-unit.in -# -coverage==7.3.0 - # via -r requirements-unit.in -exceptiongroup==1.1.3 - # via pytest -iniconfig==2.0.0 - # via pytest -oci-image==1.0.0 - # via -r requirements.in -ops==2.5.1 - # via - # -r requirements-unit.in - # -r requirements.in -packaging==23.1 - # via pytest -pluggy==1.2.0 - # via pytest -pytest==7.4.0 - # via - # -r requirements-unit.in - # pytest-lazy-fixture - # pytest-mock -pytest-lazy-fixture==0.6.3 - # via -r requirements-unit.in -pytest-mock==3.11.1 - # via -r requirements-unit.in -pyyaml==6.0.1 - # via - # -r requirements-unit.in - # ops -tomli==2.0.1 - # via pytest -websocket-client==1.6.1 - # via ops diff --git a/charms/argo-server/requirements.in b/charms/argo-server/requirements.in deleted file mode 100644 index 95ad381..0000000 --- a/charms/argo-server/requirements.in +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright 2023 Canonical Ltd. -# See LICENSE file for licensing details. - -oci-image -ops diff --git a/charms/argo-server/requirements.txt b/charms/argo-server/requirements.txt deleted file mode 100644 index f8e3110..0000000 --- a/charms/argo-server/requirements.txt +++ /dev/null @@ -1,14 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile requirements.in -# -oci-image==1.0.0 - # via -r requirements.in -ops==2.5.1 - # via -r requirements.in -pyyaml==6.0.1 - # via ops -websocket-client==1.6.1 - # via ops diff --git a/charms/argo-server/src/charm.py b/charms/argo-server/src/charm.py deleted file mode 100755 index 09f9b6d..0000000 --- a/charms/argo-server/src/charm.py +++ /dev/null @@ -1,160 +0,0 @@ -#!/usr/bin/env python3 -# Copyright 2023 Canonical Ltd. -# See LICENSE file for licensing details. - -import logging - -from oci_image import OCIImageResource, OCIImageResourceError -from ops.charm import CharmBase -from ops.main import main -from ops.model import ActiveStatus, MaintenanceStatus, WaitingStatus - - -class CheckFailed(Exception): - """Raise this exception if one of the checks in main fails.""" - - def __init__(self, msg, status_type=None): - super().__init__() - - self.msg = msg - self.status_type = status_type - self.status = status_type(msg) - - -class Operator(CharmBase): - def __init__(self, *args): - super().__init__(*args) - - self.log = logging.getLogger(__name__) - self.image = OCIImageResource(self, "oci-image") - - for event in [ - self.on.install, - self.on.leader_elected, - self.on.upgrade_charm, - self.on.config_changed, - ]: - self.framework.observe(event, self.main) - - def main(self, event): - try: - self._check_leader() - - image_details = self._check_image_details() - - except CheckFailed as check_failed: - self.model.unit.status = check_failed.status - return - - self.model.unit.status = MaintenanceStatus("Setting pod spec") - - self.model.pod.set_spec( - { - "version": 3, - "serviceAccount": { - "roles": [ - { - "global": True, - "rules": [ - { - "apiGroups": [""], - "resources": ["configmaps"], - "verbs": ["get", "watch", "list"], - }, - { - "apiGroups": [""], - "resources": ["secrets"], - "verbs": ["get", "create"], - }, - { - "apiGroups": [""], - "resources": ["pods", "pods/exec", "pods/log"], - "verbs": ["get", "list", "watch", "delete"], - }, - { - "apiGroups": [""], - "resources": ["events"], - "verbs": ["watch", "create", "patch"], - }, - { - "apiGroups": [""], - "resources": ["serviceaccounts"], - "verbs": ["get", "list", "watch"], - }, - { - "apiGroups": ["argoproj.io"], - "resources": [ - "eventsources", - "sensors", - "workflows", - "workfloweventbindings", - "workflowtemplates", - "cronworkflows", - "cronworkflows/finalizers", - "clusterworkflowtemplates", - ], - "verbs": [ - "create", - "get", - "list", - "watch", - "update", - "patch", - "delete", - ], - }, - ], - }, - ], - }, - "containers": [ - { - "name": self.model.app.name, - "imageDetails": image_details, - "imagePullPolicy": "Always", - "args": ["server"], - "ports": [{"name": "web", "containerPort": self.model.config["port"]}], - "kubernetes": { - "readinessProbe": { - "httpGet": { - "port": self.model.config["port"], - "scheme": "HTTPS", - "path": "/", - }, - "initialDelaySeconds": 10, - "periodSeconds": 20, - }, - "securityContext": { - "runAsNonRoot": True, - "capabilities": {"drop": ["ALL"]}, - }, - }, - "volumeConfig": [ - { - "name": "tmp", - "mountPath": "/tmp", - "emptyDir": {"medium": "Memory"}, - } - ], - }, - ], - } - ) - - self.model.unit.status = ActiveStatus() - - def _check_leader(self): - if not self.unit.is_leader(): - # We can't do anything useful when not the leader, so do nothing. - raise CheckFailed("Waiting for leadership", WaitingStatus) - - def _check_image_details(self): - try: - image_details = self.image.fetch() - except OCIImageResourceError as e: - raise CheckFailed(f"{e.status.message}", e.status_type) - return image_details - - -if __name__ == "__main__": - main(Operator) diff --git a/charms/argo-server/tests/unit/test_charm.py b/charms/argo-server/tests/unit/test_charm.py deleted file mode 100644 index 85fdd54..0000000 --- a/charms/argo-server/tests/unit/test_charm.py +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright 2023 Canonical Ltd. -# See LICENSE file for licensing details. - -import pytest -import yaml -from ops.model import ActiveStatus, BlockedStatus, WaitingStatus -from ops.testing import Harness - -from charm import Operator - - -@pytest.fixture -def harness(): - return Harness(Operator) - - -def test_not_leader(harness): - harness.begin_with_initial_hooks() - assert isinstance(harness.charm.model.unit.status, WaitingStatus) - - -def test_missing_image(harness): - harness.set_leader(True) - harness.begin_with_initial_hooks() - assert isinstance(harness.charm.model.unit.status, BlockedStatus) - - -def test_main(harness): - harness.set_leader(True) - harness.add_oci_resource( - "oci-image", - { - "registrypath": "test-ci", - "username": "", - "password": "", - }, - ) - harness.begin_with_initial_hooks() - pod_spec = harness.get_pod_spec() - - # confirm that we can serialize the pod spec - yaml.safe_dump(pod_spec) - - assert isinstance(harness.charm.model.unit.status, ActiveStatus) diff --git a/charms/argo-server/tox.ini b/charms/argo-server/tox.ini deleted file mode 100644 index d64d46d..0000000 --- a/charms/argo-server/tox.ini +++ /dev/null @@ -1,74 +0,0 @@ -# Copyright 2023 Canonical Ltd. -# See LICENSE file for licensing details. - -[flake8] -max-line-length = 100 - -[tox] -skipsdist = True -skip_missing_interpreters = True -envlist = fmt, lint, unit - -[vars] -all_path = {[vars]src_path} {[vars]tst_path} -src_path = {toxinidir}/src/ -tst_path = {toxinidir}/tests/ - -[testenv] -passenv = - PYTHONPATH - CHARM_BUILD_DIR - MODEL_SETTINGS - KUBECONFIG -setenv = - PYTHONPATH = {toxinidir}:{toxinidir}/lib:{[vars]src_path} - PYTHONBREAKPOINT=ipdb.set_trace - PY_COLORS=1 - -[testenv:update-requirements] -allowlist_externals = - bash - find - pip-compile - xargs -commands = - ; we must preserve the order of compilation, since each *.in file depends on some *.txt file. - ; For example, requirements-unit.in depends on requirements.txt and we must compile first - ; requirements.txt to ensure that requirements-unit.txt get the same dependency as the requirements.txt - bash -c 'for pattern in "requirements.in" "requirements-fmt.in" "requirements*.in"; do find . -type f -name "$pattern" -exec bash -c "cd \$(dirname "{}") && pip-compile --resolver=backtracking \$(basename "{}")" \;; done' -deps = - pip-tools -description = Update requirements files by executing pip-compile on all requirements*.in files, including those in subdirs. - -[testenv:fmt] -commands = - isort {[vars]all_path} - black {[vars]all_path} -deps = - -r requirements-fmt.txt -description = Apply coding style standards to code - -[testenv:lint] -commands = - # uncomment the following line if this charm owns a lib - # codespell {[vars]lib_path} - codespell {toxinidir}/. --skip {toxinidir}/./.git --skip {toxinidir}/./.tox \ - --skip {toxinidir}/./build --skip {toxinidir}/./lib --skip {toxinidir}/./venv \ - --skip {toxinidir}/./.mypy_cache \ - --skip {toxinidir}/./icon.svg --skip *.json.tmpl - # pflake8 wrapper supports config from pyproject.toml - pflake8 {[vars]all_path} - isort --check-only --diff {[vars]all_path} - black --check --diff {[vars]all_path} -deps = - -r requirements-lint.txt -description = Check code against coding style standards - -[testenv:unit] -commands = - coverage run --source={[vars]src_path} \ - -m pytest --ignore={[vars]tst_path}integration -vv --tb native {posargs} - coverage report -deps = - -r requirements-unit.txt -description = Run unit tests diff --git a/tox.ini b/tox.ini index 1e25df3..256b4ad 100644 --- a/tox.ini +++ b/tox.ini @@ -6,7 +6,7 @@ max-line-length = 100 [tox] skipsdist = True -envlist = {argo-controller,argo-server}-{lint,unit,integration} +envlist = argo-controller-{lint,unit,integration} [testenv] basepython = python3 @@ -15,7 +15,6 @@ passenv = HOME ignore_errors=true setenv = argo-controller: CHARM = argo-controller - argo-server: CHARM = argo-server lint: TYPE = lint unit: TYPE = unit integration: TYPE = integration @@ -36,4 +35,4 @@ commands = bash -c 'for pattern in "requirements.in" "requirements-fmt.in" "requirements*.in"; do find . -type f -name "$pattern" -exec bash -c "cd \$(dirname "{}") && pip-compile --resolver=backtracking \$(basename "{}")" \;; done' deps = pip-tools -description = Update requirements files by executing pip-compile on all requirements*.in files, including those in subdirs. \ No newline at end of file +description = Update requirements files by executing pip-compile on all requirements*.in files, including those in subdirs.