diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ab62b51..c3ef84d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,58 +3,54 @@ name: CI on: push: branches: - - '*' + - "*" tags: - - '*' + - "*" pull_request: branches: - - '*' + - "*" jobs: build: if: "!contains(github.event.head_commit.message, 'skip ci')" runs-on: ubuntu-latest + timeout-minutes: 15 strategy: fail-fast: false matrix: - php: - - '8.1' - - '8.2' - - '8.3' - kubernetes: - - '1.26.11' - - '1.27.8' - - '1.28.4' - laravel: - - 9.* - - 10.* - prefer: - - 'prefer-lowest' - - 'prefer-stable' + php: ['8.1', '8.2', '8.3'] + kubernetes: ['1.26.11', '1.27.8', '1.28.4'] + laravel: ['9.*', '10.*', '11.*'] + prefer: [prefer-lowest, prefer-stable] include: - - laravel: 9.* - testbench: 7.* - - laravel: 10.* - testbench: 8.* + - laravel: "9.*" + testbench: "7.*" + - laravel: "10.*" + testbench: "8.*" + - laravel: "11.*" + testbench: "9.*" + exclude: + - laravel: "11.*" + php: "8.1" name: PHP ${{ matrix.php }} - Laravel ${{ matrix.laravel }} - K8s v${{ matrix.kubernetes }} --${{ matrix.prefer }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v4 - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: ${{ matrix.php }} - extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, bcmath, soap, intl, gd, exif, iconv, yaml - coverage: pcov + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, bcmath, soap, intl, gd, exif, iconv, yaml + coverage: pcov - - name: Get composer cache directory - id: composer-cache - run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT + - name: Get composer cache directory + id: composer-cache + run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - name: Prepare cache key id: prep @@ -68,49 +64,45 @@ jobs: echo "cache-key=composer-php-$PHP_VERSION-$LARAVEL_VERSION-$PREFER_VERSION-${{ hashFiles('composer.json') }}" >> $GITHUB_OUTPUT - - uses: actions/cache@v3 - name: Cache dependencies - with: - path: ${{ steps.composer-cache.outputs.dir }} - key: ${{ steps.prep.outputs.cache-key }} - - - uses: medyagh/setup-minikube@latest - name: Setup Minikube - with: - minikube-version: 1.32.0 - driver: docker - container-runtime: containerd - kubernetes-version: "v${{ matrix.kubernetes }}" - - - name: Run Kubernetes Proxy - run: | - kubectl proxy --port=8080 --reject-paths="^/non-existent-path" & - - - name: Install dependencies - run: | - composer require "laravel/framework:${{ matrix.laravel }}" "orchestra/testbench:${{ matrix.testbench }}" --no-interaction --no-update - composer update --${{ matrix.prefer }} --prefer-dist --no-interaction - - - name: Setup in-cluster config - run: | - sudo mkdir -p /var/run/secrets/kubernetes.io/serviceaccount - echo "some-token" | sudo tee /var/run/secrets/kubernetes.io/serviceaccount/token - echo "c29tZS1jZXJ0Cg==" | sudo tee /var/run/secrets/kubernetes.io/serviceaccount/ca.crt - echo "some-namespace" | sudo tee /var/run/secrets/kubernetes.io/serviceaccount/namespace - sudo chmod -R 777 /var/run/secrets/kubernetes.io/serviceaccount/ - - - name: Setting CRDs for testing - run: | - kubectl apply -f https://raw.githubusercontent.com/bitnami-labs/sealed-secrets/main/helm/sealed-secrets/crds/bitnami.com_sealedsecrets.yaml - -# - name: Run static analysis -# run: | -# vendor/bin/psalm - - - name: Run tests - run: | - vendor/bin/phpunit --coverage-text --coverage-clover=coverage.xml - - - uses: codecov/codecov-action@v3.1.0 - with: - fail_ci_if_error: false + - uses: actions/cache@v3 + name: Cache dependencies + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ steps.prep.outputs.cache-key }} + + - uses: medyagh/setup-minikube@latest + name: Setup Minikube + with: + minikube-version: 1.32.0 + driver: docker + container-runtime: containerd + kubernetes-version: "v${{ matrix.kubernetes }}" + + - name: Run Kubernetes Proxy + run: | + kubectl proxy --port=8080 --reject-paths="^/non-existent-path" & + + - name: Install dependencies + run: | + composer require "laravel/framework:${{ matrix.laravel }}" "orchestra/testbench:${{ matrix.testbench }}" --no-interaction --no-update + composer update --${{ matrix.prefer }} --prefer-dist --no-interaction + + - name: Setup in-cluster config + run: | + sudo mkdir -p /var/run/secrets/kubernetes.io/serviceaccount + echo "some-token" | sudo tee /var/run/secrets/kubernetes.io/serviceaccount/token + echo "c29tZS1jZXJ0Cg==" | sudo tee /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + echo "some-namespace" | sudo tee /var/run/secrets/kubernetes.io/serviceaccount/namespace + sudo chmod -R 777 /var/run/secrets/kubernetes.io/serviceaccount/ + + - name: Setting CRDs for testing + run: | + kubectl apply -f https://raw.githubusercontent.com/bitnami-labs/sealed-secrets/main/helm/sealed-secrets/crds/bitnami.com_sealedsecrets.yaml + + - name: Run tests + run: | + vendor/bin/phpunit --coverage-text --coverage-clover=coverage.xml + + - uses: codecov/codecov-action@v3.1.0 + with: + fail_ci_if_error: false diff --git a/composer.json b/composer.json index 1bd2077..122ec2e 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,19 @@ { "name": "renoki-co/php-k8s", "description": "Control your Kubernetes clusters with this PHP-based Kubernetes client. It supports any form of authentication, the exec API, and it has an easy implementation for CRDs.", - "keywords": ["laravel", "php", "kubernetes", "k8s", "k3s", "k0s", "cluster", "api", "kubeadm", "kubeapi", "kube"], + "keywords": [ + "laravel", + "php", + "kubernetes", + "k8s", + "k3s", + "k0s", + "cluster", + "api", + "kubeadm", + "kubeapi", + "kube" + ], "license": "Apache-2.0", "homepage": "https://github.com/renoki-co/php-k8s", "authors": [ @@ -13,11 +25,12 @@ ], "require": { "guzzlehttp/guzzle": "^6.5|^7.0", - "illuminate/macroable": "^9.35|^10.1", - "illuminate/support": "^9.35|^10.1", + "illuminate/macroable": "^9.35|^10.1|^11.0", + "illuminate/support": "^9.35|^10.1|^11.0", "ratchet/pawl": "^0.4.1", - "symfony/process": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0|^7.0", "composer/semver": "^3.0" + }, "suggest": { "ext-yaml": "YAML extension is used to read or generate YAML from PHP K8s internal classes." @@ -37,9 +50,9 @@ }, "require-dev": { "mockery/mockery": "^1.5", - "orchestra/testbench": "^8.15.0", + "orchestra/testbench": "^7.23|^8.1|^9.0", "phpunit/phpunit": "^9.5.20|^10.0", - "vimeo/psalm": "^5.16" + "vimeo/psalm": "^4.20|^5.22" }, "config": { "sort-packages": true diff --git a/src/KubernetesCluster.php b/src/KubernetesCluster.php index 5c30db1..da1fc86 100644 --- a/src/KubernetesCluster.php +++ b/src/KubernetesCluster.php @@ -202,17 +202,14 @@ public function setResourceClass(string $resourceClass) public function runOperation(string $operation, string $path, $payload = '', array $query = ['pretty' => 1]) { switch ($operation) { - case static::WATCH_OP: - return $this->watchPath($path, $payload, $query); + case static::WATCH_OP: return $this->watchPath($path, $payload, $query); break; - case static::WATCH_LOGS_OP: - return $this->watchLogsPath($path, $payload, $query); + case static::WATCH_LOGS_OP: return $this->watchLogsPath($path, $payload, $query); break; - case static::EXEC_OP: - return $this->execPath($path, $query); + case static::EXEC_OP: return $this->execPath($path, $query); break; - case static::ATTACH_OP: - return $this->attachPath($path, $payload, $query); + case static::ATTACH_OP: return $this->attachPath($path, $payload, $query); + break; default: break; }