From f57082824bf15d5990b07f139ff30eb43c1b6d45 Mon Sep 17 00:00:00 2001 From: Peter Becich Date: Mon, 12 Dec 2022 22:10:05 -0800 Subject: [PATCH 01/10] GitHub Actions work from peterbecich --- .github/workflows/ci.yml | 57 +++++++++++++++++++++++ README.md | 1 + cabal.project | 4 ++ examples/.gitignore | 1 - examples/kubernetes-examples.cabal | 54 +++++++++++++++++++++ examples/package.yaml | 2 +- kubernetes-client/kubernetes-client.cabal | 6 +++ kubernetes-client/package.yaml | 2 + 8 files changed, 125 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 cabal.project create mode 100644 examples/kubernetes-examples.cabal diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..31abec99 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,57 @@ +on: [push] +name: CI +jobs: + Cabal_build: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + ghc: + - "8.10.7" + - "9.0.2" + - "9.2.7" + - "9.4.4" + + name: Cabal GHC ${{ matrix.ghc }} + steps: + - uses: actions/checkout@v3 + - name: Setup Haskell + uses: haskell/actions/setup@v2 + with: + ghc-version: ${{ matrix.ghc }} + cabal-version: '3.8.1.0' + - run: cabal build all --enable-tests + - run: cabal test all + + Stack_build: + name: Stack GHC ${{ matrix.ghc }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + ghc: + - "8.10.7" + - "9.0.2" + - "9.2.7" + - "9.4.4" + steps: + - uses: actions/checkout@v3 + + - uses: haskell/actions/setup@v2 + name: Setup Haskell Stack + with: + ghc-version: ${{ matrix.ghc }} + enable-stack: true + stack-version: "latest" + + - uses: actions/cache@v3 + name: Cache ~/.stack + with: + path: ~/.stack + key: ${{ runner.os }}-${{ matrix.ghc }}-stack + + - name: Build + run: stack build --system-ghc --test --bench --no-run-tests --no-run-benchmarks + + - name: Test + run: stack test --system-ghc diff --git a/README.md b/README.md index 1f4cb715..4267735c 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # Kubernetes Haskell Client +[![Stack and Cabal](https://github.com/kubernetes-client/haskell/actions/workflows/ci.yml/badge.svg)](https://github.com/kubernetes-client/haskell/actions/workflows/ci.yml) [![Build Status](https://travis-ci.org/kubernetes-client/haskell.svg?branch=master)](https://travis-ci.org/kubernetes-client/haskell) Haskell client for the [kubernetes](http://kubernetes.io/) API. diff --git a/cabal.project b/cabal.project new file mode 100644 index 00000000..a6f6b90a --- /dev/null +++ b/cabal.project @@ -0,0 +1,4 @@ +packages: + kubernetes + kubernetes-client + examples \ No newline at end of file diff --git a/examples/.gitignore b/examples/.gitignore index 403847d5..b81a6033 100644 --- a/examples/.gitignore +++ b/examples/.gitignore @@ -1,4 +1,3 @@ dist dist-newstyle -*.cabal .stack-work diff --git a/examples/kubernetes-examples.cabal b/examples/kubernetes-examples.cabal new file mode 100644 index 00000000..92e942cb --- /dev/null +++ b/examples/kubernetes-examples.cabal @@ -0,0 +1,54 @@ +cabal-version: 1.12 + +-- This file has been generated from package.yaml by hpack version 0.34.4. +-- +-- see: https://github.com/sol/hpack + +name: kubernetes-examples +version: 0.1.0.1 +synopsis: Kubernetes examples with Haskell +description: Examples to interact with Kubernetes using kubernetes-client and kubernetes-client-core +category: Examples, Kubernetes +maintainer: Shimin Guo , + Akshay Mankar +license: Apache-2.0 +license-file: LICENSE +build-type: Simple + +executable in-cluster + main-is: Main.hs + other-modules: + Paths_kubernetes_examples + hs-source-dirs: + in-cluster + ghc-options: -Wall + build-depends: + base <5 + , containers + , http-client + , http-types + , kubernetes-client + , kubernetes-client-core + , safe-exceptions + , stm + , text + default-language: Haskell2010 + +executable simple + main-is: Main.hs + other-modules: + Paths_kubernetes_examples + hs-source-dirs: + simple + ghc-options: -Wall + build-depends: + base <5 + , containers + , http-client + , http-types + , kubernetes-client + , kubernetes-client-core + , safe-exceptions + , stm + , text + default-language: Haskell2010 diff --git a/examples/package.yaml b/examples/package.yaml index b926d257..283b23f6 100644 --- a/examples/package.yaml +++ b/examples/package.yaml @@ -22,7 +22,7 @@ executables: ghc-options: - -Wall dependencies: -- base +- base < 5 - containers - http-client - http-types diff --git a/kubernetes-client/kubernetes-client.cabal b/kubernetes-client/kubernetes-client.cabal index b00c3450..f420e736 100644 --- a/kubernetes-client/kubernetes-client.cabal +++ b/kubernetes-client/kubernetes-client.cabal @@ -44,6 +44,8 @@ library hs-source-dirs: src ghc-options: -Wall + build-tool-depends: + hspec-discover:hspec-discover build-depends: aeson >=1.2 && <3 , attoparsec >=0.13 @@ -88,6 +90,8 @@ test-suite example Paths_kubernetes_client hs-source-dirs: example + build-tool-depends: + hspec-discover:hspec-discover build-depends: aeson >=1.2 && <3 , attoparsec >=0.13 @@ -138,6 +142,8 @@ test-suite spec Paths_kubernetes_client hs-source-dirs: test + build-tool-depends: + hspec-discover:hspec-discover build-depends: aeson >=1.2 && <3 , attoparsec >=0.13 diff --git a/kubernetes-client/package.yaml b/kubernetes-client/package.yaml index a5596801..7e93497e 100644 --- a/kubernetes-client/package.yaml +++ b/kubernetes-client/package.yaml @@ -15,6 +15,8 @@ library: source-dirs: src ghc-options: - -Wall +build-tools: + - hspec-discover tests: spec: main: Spec.hs From ac75bcc6104544ac94076aafe066c4d84da0da3d Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Thu, 22 Jun 2023 18:16:18 -0700 Subject: [PATCH 02/10] Bump GHC versions in CI --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 31abec99..2cf7fc00 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,8 +9,8 @@ jobs: ghc: - "8.10.7" - "9.0.2" - - "9.2.7" - - "9.4.4" + - "9.2.8" + - "9.4.5" name: Cabal GHC ${{ matrix.ghc }} steps: @@ -32,8 +32,8 @@ jobs: ghc: - "8.10.7" - "9.0.2" - - "9.2.7" - - "9.4.4" + - "9.2.8" + - "9.4.5" steps: - uses: actions/checkout@v3 From bc1985b60b9a64d2b9d1e090bd3fbfcdcaaa69ad Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Thu, 22 Jun 2023 19:13:05 -0700 Subject: [PATCH 03/10] Fix CI issues by specifying resolver properly --- .github/workflows/ci.yml | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2cf7fc00..46432904 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,7 +1,8 @@ on: [push] name: CI jobs: - Cabal_build: + cabal: + name: Cabal / GHC ${{ matrix.ghc }} runs-on: ubuntu-latest strategy: fail-fast: false @@ -11,34 +12,34 @@ jobs: - "9.0.2" - "9.2.8" - "9.4.5" - - name: Cabal GHC ${{ matrix.ghc }} steps: - uses: actions/checkout@v3 - - name: Setup Haskell - uses: haskell/actions/setup@v2 + - uses: haskell/actions/setup@v2 with: ghc-version: ${{ matrix.ghc }} cabal-version: '3.8.1.0' - run: cabal build all --enable-tests - run: cabal test all - Stack_build: - name: Stack GHC ${{ matrix.ghc }} + stack: + name: Stack / GHC ${{ matrix.ghc }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: - ghc: - - "8.10.7" - - "9.0.2" - - "9.2.8" - - "9.4.5" + include: + - ghc: "8.10.7" + resolver: "lts-18.28" + - ghc: "9.0.2" + resolver: "lts-19.33" + - ghc: "9.2.8" + resolver: "lts-20.26" + - ghc: "9.4.5" + resolver: "lts-21.0" steps: - uses: actions/checkout@v3 - uses: haskell/actions/setup@v2 - name: Setup Haskell Stack with: ghc-version: ${{ matrix.ghc }} enable-stack: true @@ -48,10 +49,12 @@ jobs: name: Cache ~/.stack with: path: ~/.stack - key: ${{ runner.os }}-${{ matrix.ghc }}-stack + key: ${{ runner.os }}-${{ matrix.ghc }}-${{ matrix.resolver }}-stack2 - name: Build - run: stack build --system-ghc --test --bench --no-run-tests --no-run-benchmarks + run: | + stack build --resolver ${{matrix.resolver}} --system-ghc --test --bench --no-run-tests --no-run-benchmarks - name: Test - run: stack test --system-ghc + run: | + stack test --resolver ${{matrix.resolver}} --system-ghc From 0911424e9abf599a0425e4e4187858f676e485f1 Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Thu, 22 Jun 2023 22:03:21 -0700 Subject: [PATCH 04/10] Almost there with Stackage lts-21.0 --- kubernetes-client/kubernetes-client.cabal | 20 ++++++++-------- kubernetes-client/package.yaml | 6 ++--- .../src/Kubernetes/Client/Auth/OIDC.hs | 11 ++++++--- .../src/Kubernetes/Data/K8sJSONPath.hs | 16 ++++++++++--- kubernetes/kubernetes-client-core.cabal | 6 ++--- stack.yaml | 7 +----- stack.yaml.lock | 24 ++++--------------- 7 files changed, 43 insertions(+), 47 deletions(-) diff --git a/kubernetes-client/kubernetes-client.cabal b/kubernetes-client/kubernetes-client.cabal index f420e736..abbfe939 100644 --- a/kubernetes-client/kubernetes-client.cabal +++ b/kubernetes-client/kubernetes-client.cabal @@ -1,6 +1,6 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.35.1. +-- This file has been generated from package.yaml by hpack version 0.35.2. -- -- see: https://github.com/sol/hpack @@ -61,7 +61,7 @@ library , http-client >=0.5 && <0.8 , http-client-tls >=0.3 , jose-jwt >=0.8 - , jsonpath >=0.1 && <0.3 + , jsonpath >=0.1 && <0.4 , kubernetes-client-core ==0.4.3.0 , microlens >=0.4 , mtl >=2.2 @@ -69,8 +69,8 @@ library , pem >=0.2 , safe-exceptions >=0.1.0.0 , stm >=2.4 - , streaming-bytestring >=0.1 && <0.3 - , text >=0.11 && <1.3 + , streaming-bytestring >=0.1 && <0.4 + , text >=0.11 && <3 , time >=1.8 , timerep >=2.0 , tls >=1.4.1 @@ -107,7 +107,7 @@ test-suite example , http-client >=0.5 && <0.8 , http-client-tls >=0.3 , jose-jwt >=0.8 - , jsonpath >=0.1 && <0.3 + , jsonpath >=0.1 && <0.4 , kubernetes-client , kubernetes-client-core ==0.4.3.0 , microlens >=0.4 @@ -116,8 +116,8 @@ test-suite example , pem >=0.2 , safe-exceptions >=0.1.0.0 , stm >=2.4 - , streaming-bytestring >=0.1 && <0.3 - , text >=0.11 && <1.3 + , streaming-bytestring >=0.1 && <0.4 + , text >=0.11 && <3 , time >=1.8 , timerep >=2.0 , tls >=1.4.1 @@ -162,7 +162,7 @@ test-suite spec , http-client >=0.5 && <0.8 , http-client-tls >=0.3 , jose-jwt >=0.8 - , jsonpath >=0.1 && <0.3 + , jsonpath >=0.1 && <0.4 , kubernetes-client , kubernetes-client-core ==0.4.3.0 , microlens >=0.4 @@ -171,8 +171,8 @@ test-suite spec , pem >=0.2 , safe-exceptions >=0.1.0.0 , stm >=2.4 - , streaming-bytestring >=0.1 && <0.3 - , text >=0.11 && <1.3 + , streaming-bytestring >=0.1 && <0.4 + , text >=0.11 && <3 , time >=1.8 , timerep >=2.0 , tls >=1.4.1 diff --git a/kubernetes-client/package.yaml b/kubernetes-client/package.yaml index 7e93497e..1c868312 100644 --- a/kubernetes-client/package.yaml +++ b/kubernetes-client/package.yaml @@ -41,7 +41,7 @@ dependencies: - bytestring >=0.10 - aeson >=1.2 && <3 - attoparsec >=0.13 - - jsonpath >=0.1 && <0.3 + - jsonpath >=0.1 && <0.4 - connection >=0.2 - containers >= 0.5 - data-default-class >=0.1 @@ -58,8 +58,8 @@ dependencies: - pem >=0.2 - safe-exceptions >=0.1.0.0 - stm >=2.4 - - streaming-bytestring >= 0.1 && < 0.3 - - text >=0.11 && <1.3 + - streaming-bytestring >= 0.1 && < 0.4 + - text >=0.11 && <3 - time >=1.8 - timerep >=2.0 - tls >=1.4.1 diff --git a/kubernetes-client/src/Kubernetes/Client/Auth/OIDC.hs b/kubernetes-client/src/Kubernetes/Client/Auth/OIDC.hs index 4c8f23f6..f7874640 100644 --- a/kubernetes-client/src/Kubernetes/Client/Auth/OIDC.hs +++ b/kubernetes-client/src/Kubernetes/Client/Auth/OIDC.hs @@ -60,9 +60,14 @@ instance AuthMethod OIDCAuth where $ setHeader req [("Authorization", "Bearer " <> (Text.encodeUtf8 token))] & L.set rAuthTypesL [] -data OIDCGetTokenException = OIDCOAuthException (OAuth2Error OAuth2TokenRequest.Errors) - | OIDCURIException URIParseError - | OIDCGetTokenException String +data OIDCGetTokenException = +#if MIN_VERSION_hoauth2(2,8,0) + OIDCOAuthException TokenRequestError +#else + OIDCOAuthException (OAuth2Error OAuth2TokenRequest.Errors) +#endif + | OIDCURIException URIParseError + | OIDCGetTokenException String deriving Show instance Exception OIDCGetTokenException diff --git a/kubernetes-client/src/Kubernetes/Data/K8sJSONPath.hs b/kubernetes-client/src/Kubernetes/Data/K8sJSONPath.hs index bfa3166c..a9b51257 100644 --- a/kubernetes-client/src/Kubernetes/Data/K8sJSONPath.hs +++ b/kubernetes-client/src/Kubernetes/Data/K8sJSONPath.hs @@ -1,16 +1,17 @@ {-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE CPP #-} module Kubernetes.Data.K8sJSONPath where +import Control.Applicative ((<|>)) import Data.Aeson import Data.Aeson.Text +import Data.Attoparsec.Text ( many1, char, takeWhile1, Parser ) import Data.JSONPath import Data.Monoid ((<>)) import Data.Text as Text - -import Control.Applicative ((<|>)) -import Data.Attoparsec.Text import Data.Text.Lazy (toStrict) + data K8sPathElement = PlainText Text | JSONPath [JSONPathElement] deriving (Show, Eq) @@ -25,7 +26,11 @@ plainTextParser :: Parser K8sPathElement plainTextParser = PlainText <$> takeWhile1 (/= '{') jsonpathParser :: Parser K8sPathElement +#if MIN_VERSION_jsonpath(0,3,0) +jsonpathParser = JSONPath <$> (char '{' *> jsonPath undefined <* char '}') +#else jsonpathParser = JSONPath <$> (char '{' *> jsonPath <* char '}') +#endif runJSONPath :: [K8sPathElement] -> Value -> Either String Text runJSONPath [] _ = pure "" @@ -38,10 +43,15 @@ runPathElement :: K8sPathElement -> Value -> Either String Text runPathElement (PlainText t) _ = pure t runPathElement (JSONPath p) v = encodeResult $ executeJSONPath p v +#if MIN_VERSION_jsonpath(0,3,0) +encodeResult :: [Value] -> Either String Text +encodeResult vals = return $ (intercalate " " $ Prelude.map jsonToText vals) +#else encodeResult :: ExecutionResult Value -> Either String Text encodeResult (ResultValue val) = return $ jsonToText val encodeResult (ResultList vals) = return $ (intercalate " " $ Prelude.map jsonToText vals) encodeResult (ResultError err) = Left err +#endif jsonToText :: Value -> Text jsonToText (String t) = t diff --git a/kubernetes/kubernetes-client-core.cabal b/kubernetes/kubernetes-client-core.cabal index 1f636261..bd137cc2 100644 --- a/kubernetes/kubernetes-client-core.cabal +++ b/kubernetes/kubernetes-client-core.cabal @@ -43,7 +43,7 @@ library , containers >=0.5.0.0 && <0.8 , deepseq >= 1.4 && <1.6 , exceptions >= 0.4 - , http-api-data >= 0.3.4 && <0.5 + , http-api-data >= 0.3.4 && <0.6 , http-client >=0.5 && <0.8 , http-client-tls , http-media >= 0.4 && < 0.9 @@ -54,11 +54,11 @@ library , network >=2.6.2 && <3.9 , random >=1.1 , safe-exceptions <0.2 - , text >=0.11 && <1.3 + , text >=0.11 && <3 , time >=1.5 , transformers >=0.4.0.0 , unordered-containers - , vector >=0.10.9 && <0.13 + , vector >=0.10.9 && <0.14 other-modules: Paths_kubernetes_client_core Kubernetes.OpenAPI.ImportMappings diff --git a/stack.yaml b/stack.yaml index 73be0316..2d8f25a8 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1,9 +1,4 @@ -resolver: lts-20.11 -compiler: ghc-9.2.5 - -extra-deps: -- jsonpath-0.2.1.0 -- oidc-client-0.7.0.1 +resolver: lts-21.0 packages: - kubernetes diff --git a/stack.yaml.lock b/stack.yaml.lock index e09f394f..ad1be6c8 100644 --- a/stack.yaml.lock +++ b/stack.yaml.lock @@ -3,24 +3,10 @@ # For more information, please see the documentation at: # https://docs.haskellstack.org/en/stable/lock_files -packages: -- completed: - hackage: jsonpath-0.2.1.0@sha256:0a16677ca023ce46344d0f4812e076578f7b21fc0bec6a21fda227b7b33e1447,1929 - pantry-tree: - sha256: b477413421c0856e2ac2ba85f7308fe1192d7a9f9ec7c1f4be3de3c0d4cf6de5 - size: 1097 - original: - hackage: jsonpath-0.2.1.0 -- completed: - hackage: oidc-client-0.7.0.1@sha256:557341f7521e62c09abddf0d06c8e8acce119d3a9a4c4ffac1ab8ca3fc0e5067,3382 - pantry-tree: - sha256: 51cfcd6c170923db24ba297ac9937961f6b26e041ceec8ff09500e61017b433b - size: 1298 - original: - hackage: oidc-client-0.7.0.1 +packages: [] snapshots: - completed: - sha256: adbc602422dde10cc330175da7de8609e70afc41449a7e2d6e8b1827aa0e5008 - size: 649342 - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/20/11.yaml - original: lts-20.11 + sha256: 1867d84255dff8c87373f5dd03e5a5cb1c10a99587e26c8793e750c54e83ffdc + size: 639139 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/21/0.yaml + original: lts-21.0 From c0e41edcccc644f8e17d5ad6b76d46e871aac3f1 Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Mon, 26 Jun 2023 00:23:43 -0700 Subject: [PATCH 05/10] Version with megaparsec and attoparsec --- kubernetes-client/kubernetes-client.cabal | 4 +++ kubernetes-client/package.yaml | 2 ++ .../src/Kubernetes/Client/Auth/GCP.hs | 2 -- .../src/Kubernetes/Data/K8sJSONPath.hs | 28 +++++++++++++++++-- .../test/Kubernetes/Data/K8sJSONPathSpec.hs | 17 +++++++++-- 5 files changed, 47 insertions(+), 6 deletions(-) diff --git a/kubernetes-client/kubernetes-client.cabal b/kubernetes-client/kubernetes-client.cabal index abbfe939..d4897231 100644 --- a/kubernetes-client/kubernetes-client.cabal +++ b/kubernetes-client/kubernetes-client.cabal @@ -63,6 +63,7 @@ library , jose-jwt >=0.8 , jsonpath >=0.1 && <0.4 , kubernetes-client-core ==0.4.3.0 + , megaparsec ==9.* , microlens >=0.4 , mtl >=2.2 , oidc-client >=0.4 @@ -110,6 +111,7 @@ test-suite example , jsonpath >=0.1 && <0.4 , kubernetes-client , kubernetes-client-core ==0.4.3.0 + , megaparsec ==9.* , microlens >=0.4 , mtl >=2.2 , oidc-client >=0.4 @@ -159,12 +161,14 @@ test-suite spec , hoauth2 >=1.11 && <=3 , hspec , hspec-attoparsec + , hspec-megaparsec , http-client >=0.5 && <0.8 , http-client-tls >=0.3 , jose-jwt >=0.8 , jsonpath >=0.1 && <0.4 , kubernetes-client , kubernetes-client-core ==0.4.3.0 + , megaparsec ==9.* , microlens >=0.4 , mtl >=2.2 , oidc-client >=0.4 diff --git a/kubernetes-client/package.yaml b/kubernetes-client/package.yaml index 1c868312..9263ca97 100644 --- a/kubernetes-client/package.yaml +++ b/kubernetes-client/package.yaml @@ -25,6 +25,7 @@ tests: - kubernetes-client - hspec - hspec-attoparsec + - hspec-megaparsec - yaml - file-embed example: @@ -52,6 +53,7 @@ dependencies: - http-client-tls >=0.3 - jose-jwt >=0.8 - kubernetes-client-core ==0.4.3.0 + - megaparsec >=9 && <10 - microlens >=0.4 - mtl >=2.2 - oidc-client >=0.4 diff --git a/kubernetes-client/src/Kubernetes/Client/Auth/GCP.hs b/kubernetes-client/src/Kubernetes/Client/Auth/GCP.hs index 6766fb98..c0de1a96 100644 --- a/kubernetes-client/src/Kubernetes/Client/Auth/GCP.hs +++ b/kubernetes-client/src/Kubernetes/Client/Auth/GCP.hs @@ -6,7 +6,6 @@ where import Control.Concurrent.STM import Control.Exception.Safe (Exception, throwM) -import Data.Attoparsec.Text import Data.Either.Combinators import Data.Function ((&)) import Data.JSONPath @@ -126,7 +125,6 @@ parseGCPAuthInfo authInfo = do Just expiryText -> Just <$> parseExpiryTime expiryText lookupEither key = Map.lookup key authInfo & maybeToRight (GCPAuthMissingInformation $ Text.unpack key) - parseK8sJSONPath = parseOnly (k8sJSONPath <* endOfInput) readJSONPath key defaultPath = maybe (Right defaultPath) parseK8sJSONPath $ Map.lookup key authInfo diff --git a/kubernetes-client/src/Kubernetes/Data/K8sJSONPath.hs b/kubernetes-client/src/Kubernetes/Data/K8sJSONPath.hs index a9b51257..8cde7af3 100644 --- a/kubernetes-client/src/Kubernetes/Data/K8sJSONPath.hs +++ b/kubernetes-client/src/Kubernetes/Data/K8sJSONPath.hs @@ -5,29 +5,53 @@ module Kubernetes.Data.K8sJSONPath where import Control.Applicative ((<|>)) import Data.Aeson import Data.Aeson.Text -import Data.Attoparsec.Text ( many1, char, takeWhile1, Parser ) +import Data.Bifunctor import Data.JSONPath import Data.Monoid ((<>)) import Data.Text as Text import Data.Text.Lazy (toStrict) +#if MIN_VERSION_jsonpath(0,3,0) +import Data.Void (Void) +import Text.Megaparsec ( Parsec, eof, runParser, some, takeWhile1P ) +import Text.Megaparsec.Char ( char ) +type Parser a = Parsec Void Text a +#else +import Data.Attoparsec.Text ( many1, char, takeWhile1, Parser ) +#endif + data K8sPathElement = PlainText Text | JSONPath [JSONPathElement] deriving (Show, Eq) +parseK8sJSONPath :: Text -> Either String [K8sPathElement] +#if MIN_VERSION_jsonpath(0,3,0) +parseK8sJSONPath = first show . runParser (k8sJSONPath <* eof) "nothing" +#else +parseK8sJSONPath = parseOnly (k8sJSONPath <* endOfInput) +#endif + k8sJSONPath :: Parser [K8sPathElement] +#if MIN_VERSION_jsonpath(0,3,0) +k8sJSONPath = some pathElementParser +#else k8sJSONPath = many1 pathElementParser +#endif pathElementParser :: Parser K8sPathElement pathElementParser = jsonpathParser <|> plainTextParser plainTextParser :: Parser K8sPathElement +#if MIN_VERSION_jsonpath(0,3,0) +plainTextParser = PlainText <$> takeWhile1P (Just "non_open_brace") (/= '{') +#else plainTextParser = PlainText <$> takeWhile1 (/= '{') +#endif jsonpathParser :: Parser K8sPathElement #if MIN_VERSION_jsonpath(0,3,0) -jsonpathParser = JSONPath <$> (char '{' *> jsonPath undefined <* char '}') +jsonpathParser = JSONPath <$> (char '{' *> jsonPath (char '}') <* char '}') #else jsonpathParser = JSONPath <$> (char '{' *> jsonPath <* char '}') #endif diff --git a/kubernetes-client/test/Kubernetes/Data/K8sJSONPathSpec.hs b/kubernetes-client/test/Kubernetes/Data/K8sJSONPathSpec.hs index 7585c54d..6246deea 100644 --- a/kubernetes-client/test/Kubernetes/Data/K8sJSONPathSpec.hs +++ b/kubernetes-client/test/Kubernetes/Data/K8sJSONPathSpec.hs @@ -1,14 +1,28 @@ {-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE CPP #-} + module Kubernetes.Data.K8sJSONPathSpec where import Test.Hspec -import Test.Hspec.Attoparsec import Kubernetes.Data.K8sJSONPath import Data.Text import Data.JSONPath import Data.Aeson +#if MIN_VERSION_jsonpath(0,3,0) +import Data.Void (Void) +import Test.Hspec.Megaparsec +import Text.Megaparsec (runParser) +import Text.Megaparsec.Error (ParseErrorBundle) + +(~>) :: Text -> Parser [K8sPathElement] -> Either (ParseErrorBundle Text Void) [K8sPathElement] +(~>) text parser = runParser parser "nothing" text +#else +import Test.Hspec.Attoparsec +#endif + + spec :: Spec spec = do describe "K8sJSONPath" $ do @@ -30,4 +44,3 @@ spec = do let path = [PlainText "kind is ", JSONPath [KeyChild "kind"]] val = (object ["kind" .= ("Pod" :: Text)]) runJSONPath path val `shouldBe` Right "kind is Pod" - From 61856031cb554898dff20eddb4676ce0849f5b11 Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Mon, 26 Jun 2023 00:54:21 -0700 Subject: [PATCH 06/10] Remove old stack-8.8.4.yaml files --- stack-8.8.4.yaml | 6 ------ stack-8.8.4.yaml.lock | 19 ------------------- 2 files changed, 25 deletions(-) delete mode 100644 stack-8.8.4.yaml delete mode 100644 stack-8.8.4.yaml.lock diff --git a/stack-8.8.4.yaml b/stack-8.8.4.yaml deleted file mode 100644 index 8361a980..00000000 --- a/stack-8.8.4.yaml +++ /dev/null @@ -1,6 +0,0 @@ -resolver: lts-16.24 -extra-deps: -- oidc-client-0.4.0.0 -packages: -- kubernetes -- kubernetes-client diff --git a/stack-8.8.4.yaml.lock b/stack-8.8.4.yaml.lock deleted file mode 100644 index 3ef896b1..00000000 --- a/stack-8.8.4.yaml.lock +++ /dev/null @@ -1,19 +0,0 @@ -# This file was autogenerated by Stack. -# You should not edit this file by hand. -# For more information, please see the documentation at: -# https://docs.haskellstack.org/en/stable/lock_files - -packages: -- completed: - hackage: oidc-client-0.4.0.0@sha256:f72a496ab27d9a5071be44e750718c539118ac52c2f1535a5fb3dde7f9874a55,3306 - pantry-tree: - size: 1153 - sha256: 68c285c6365360975d50bbb18cb07755d5ef19af8bf0e998d3ea46d35ef4a4e1 - original: - hackage: oidc-client-0.4.0.0 -snapshots: -- completed: - size: 532835 - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/16/24.yaml - sha256: cf2b52420b2262fe9cf0f6744929120131abd6675b1c3fb2d8b155a47f80d103 - original: lts-16.24 From a9ee8b4e657d41d7ca3025c3deb54e96520eb977 Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Mon, 26 Jun 2023 00:54:47 -0700 Subject: [PATCH 07/10] stack-8.10.2.yaml -> stack-8.10.7.yaml --- stack-8.10.2.yaml => stack-8.10.7.yaml | 4 +++- stack-8.10.2.yaml.lock => stack-8.10.7.yaml.lock | 10 +++++----- 2 files changed, 8 insertions(+), 6 deletions(-) rename stack-8.10.2.yaml => stack-8.10.7.yaml (72%) rename stack-8.10.2.yaml.lock => stack-8.10.7.yaml.lock (77%) diff --git a/stack-8.10.2.yaml b/stack-8.10.7.yaml similarity index 72% rename from stack-8.10.2.yaml rename to stack-8.10.7.yaml index 707bf4c2..406d02a7 100644 --- a/stack-8.10.2.yaml +++ b/stack-8.10.7.yaml @@ -1,6 +1,8 @@ -resolver: nightly-2020-12-06 +resolver: lts-18.28 + extra-deps: - oidc-client-0.4.0.0 + packages: - kubernetes - kubernetes-client diff --git a/stack-8.10.2.yaml.lock b/stack-8.10.7.yaml.lock similarity index 77% rename from stack-8.10.2.yaml.lock rename to stack-8.10.7.yaml.lock index 256f4968..706b73ff 100644 --- a/stack-8.10.2.yaml.lock +++ b/stack-8.10.7.yaml.lock @@ -7,13 +7,13 @@ packages: - completed: hackage: oidc-client-0.4.0.0@sha256:f72a496ab27d9a5071be44e750718c539118ac52c2f1535a5fb3dde7f9874a55,3306 pantry-tree: - size: 1153 sha256: 68c285c6365360975d50bbb18cb07755d5ef19af8bf0e998d3ea46d35ef4a4e1 + size: 1153 original: hackage: oidc-client-0.4.0.0 snapshots: - completed: - size: 556330 - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2020/12/6.yaml - sha256: 53a2f3fe06fcac029ccf4fd54b5bb1745dc52451d9f023ef94721839bf991d8e - original: nightly-2020-12-06 + sha256: 428ec8d5ce932190d3cbe266b9eb3c175cd81e984babf876b64019e2cbe4ea68 + size: 590100 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/18/28.yaml + original: lts-18.28 From 3e695764cd379f8f3496968d376c6f338814134f Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Mon, 26 Jun 2023 01:20:33 -0700 Subject: [PATCH 08/10] Switch to using explicit stack.yaml files in CI --- .github/workflows/ci.yml | 18 ++++++++++-------- .../src/Kubernetes/Data/K8sJSONPath.hs | 2 +- stack-9.0.2-aeson2.yaml | 6 +++--- stack-9.0.2-aeson2.yaml.lock | 18 +++++++++--------- stack-9.2.8.yaml | 8 ++++++++ stack-9.2.8.yaml.lock | 19 +++++++++++++++++++ 6 files changed, 50 insertions(+), 21 deletions(-) create mode 100644 stack-9.2.8.yaml create mode 100644 stack-9.2.8.yaml.lock diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 46432904..47e625ab 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,13 +29,15 @@ jobs: matrix: include: - ghc: "8.10.7" - resolver: "lts-18.28" - - ghc: "9.0.2" - resolver: "lts-19.33" + yaml: "stack-8.10.7.yaml" + - ghc: "9.0.2 (aeson-1)" + yaml: "stack-9.0.2-aeson1.yaml" + - ghc: "9.0.2 (aeson-2)" + yaml: "stack-9.0.2-aeson2.yaml" - ghc: "9.2.8" - resolver: "lts-20.26" + yaml: "stack-9.2.8.yaml" - ghc: "9.4.5" - resolver: "lts-21.0" + yaml: "stack.yaml" steps: - uses: actions/checkout@v3 @@ -49,12 +51,12 @@ jobs: name: Cache ~/.stack with: path: ~/.stack - key: ${{ runner.os }}-${{ matrix.ghc }}-${{ matrix.resolver }}-stack2 + key: ${{ runner.os }}-${{ matrix.ghc }}-${{ matrix.yaml }}-stack2 - name: Build run: | - stack build --resolver ${{matrix.resolver}} --system-ghc --test --bench --no-run-tests --no-run-benchmarks + stack build --stack-yaml ${{matrix.yaml}} --system-ghc --test --bench --no-run-tests --no-run-benchmarks - name: Test run: | - stack test --resolver ${{matrix.resolver}} --system-ghc + stack test --stack-yaml ${{matrix.yaml}} --system-ghc diff --git a/kubernetes-client/src/Kubernetes/Data/K8sJSONPath.hs b/kubernetes-client/src/Kubernetes/Data/K8sJSONPath.hs index 8cde7af3..2bc74f8b 100644 --- a/kubernetes-client/src/Kubernetes/Data/K8sJSONPath.hs +++ b/kubernetes-client/src/Kubernetes/Data/K8sJSONPath.hs @@ -17,7 +17,7 @@ import Text.Megaparsec ( Parsec, eof, runParser, some, takeWhile1P ) import Text.Megaparsec.Char ( char ) type Parser a = Parsec Void Text a #else -import Data.Attoparsec.Text ( many1, char, takeWhile1, Parser ) +import Data.Attoparsec.Text ( Parser, char, endOfInput, many1, parseOnly, takeWhile1 ) #endif diff --git a/stack-9.0.2-aeson2.yaml b/stack-9.0.2-aeson2.yaml index 134bf3a8..0215b0f2 100644 --- a/stack-9.0.2-aeson2.yaml +++ b/stack-9.0.2-aeson2.yaml @@ -1,9 +1,9 @@ -resolver: lts-19.7 +resolver: lts-19.33 extra-deps: -- oidc-client-0.6.0.0@sha256:2079dc5c9dfb5b3e2fa93098254ca16787c01a0cd3634b1d84afe84c9a6c4825,3368 -- jose-jwt-0.9.4@sha256:6db77f81cfcf81cf7faf8a4dc4b2110c1603dbb94249d49d069a17b4897e9d69,3560 +- oidc-client-0.6.0.0 +- jose-jwt-0.9.5 packages: - kubernetes diff --git a/stack-9.0.2-aeson2.yaml.lock b/stack-9.0.2-aeson2.yaml.lock index d54effc8..830cd226 100644 --- a/stack-9.0.2-aeson2.yaml.lock +++ b/stack-9.0.2-aeson2.yaml.lock @@ -7,20 +7,20 @@ packages: - completed: hackage: oidc-client-0.6.0.0@sha256:2079dc5c9dfb5b3e2fa93098254ca16787c01a0cd3634b1d84afe84c9a6c4825,3368 pantry-tree: - size: 1298 sha256: c8dac64944a1e60d14958067e1992732effe723d60353690720c34b4d126af48 + size: 1298 original: - hackage: oidc-client-0.6.0.0@sha256:2079dc5c9dfb5b3e2fa93098254ca16787c01a0cd3634b1d84afe84c9a6c4825,3368 + hackage: oidc-client-0.6.0.0 - completed: - hackage: jose-jwt-0.9.4@sha256:6db77f81cfcf81cf7faf8a4dc4b2110c1603dbb94249d49d069a17b4897e9d69,3560 + hackage: jose-jwt-0.9.5@sha256:c02db1ef32e582330054d8befa412215afeeb597cb8756dadc75407ba776a159,3557 pantry-tree: + sha256: 778e69fddd33a43f9a2322d4404a27c3f7474295bbdad6f65325fe9c9fee3d86 size: 1231 - sha256: fd3145cd8ab15be77d49522c454e86f17cf0f233ada7a623457926dbf6ea47e4 original: - hackage: jose-jwt-0.9.4@sha256:6db77f81cfcf81cf7faf8a4dc4b2110c1603dbb94249d49d069a17b4897e9d69,3560 + hackage: jose-jwt-0.9.5 snapshots: - completed: - size: 618884 - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/19/7.yaml - sha256: 57d4ce67cc097fea2058446927987bc1f7408890e3a6df0da74e5e318f051c20 - original: lts-19.7 + sha256: 6d1532d40621957a25bad5195bfca7938e8a06d923c91bc52aa0f3c41181f2d4 + size: 619204 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/19/33.yaml + original: lts-19.33 diff --git a/stack-9.2.8.yaml b/stack-9.2.8.yaml new file mode 100644 index 00000000..ae83d7c3 --- /dev/null +++ b/stack-9.2.8.yaml @@ -0,0 +1,8 @@ +resolver: lts-20.26 + +extra-deps: +- oidc-client-0.7.0.1 + +packages: +- kubernetes +- kubernetes-client diff --git a/stack-9.2.8.yaml.lock b/stack-9.2.8.yaml.lock new file mode 100644 index 00000000..efd3968f --- /dev/null +++ b/stack-9.2.8.yaml.lock @@ -0,0 +1,19 @@ +# This file was autogenerated by Stack. +# You should not edit this file by hand. +# For more information, please see the documentation at: +# https://docs.haskellstack.org/en/stable/lock_files + +packages: +- completed: + hackage: oidc-client-0.7.0.1@sha256:557341f7521e62c09abddf0d06c8e8acce119d3a9a4c4ffac1ab8ca3fc0e5067,3382 + pantry-tree: + sha256: 51cfcd6c170923db24ba297ac9937961f6b26e041ceec8ff09500e61017b433b + size: 1298 + original: + hackage: oidc-client-0.7.0.1 +snapshots: +- completed: + sha256: 5a59b2a405b3aba3c00188453be172b85893cab8ebc352b1ef58b0eae5d248a2 + size: 650475 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/20/26.yaml + original: lts-20.26 From b59287f5003cce7e36e7bc27b61c874808a7ddfc Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Mon, 26 Jun 2023 01:24:38 -0700 Subject: [PATCH 09/10] Tweak ci.yml --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 47e625ab..65721d8c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,9 +30,9 @@ jobs: include: - ghc: "8.10.7" yaml: "stack-8.10.7.yaml" - - ghc: "9.0.2 (aeson-1)" + - ghc: "9.0.2" yaml: "stack-9.0.2-aeson1.yaml" - - ghc: "9.0.2 (aeson-2)" + - ghc: "9.0.2" yaml: "stack-9.0.2-aeson2.yaml" - ghc: "9.2.8" yaml: "stack-9.2.8.yaml" @@ -51,7 +51,7 @@ jobs: name: Cache ~/.stack with: path: ~/.stack - key: ${{ runner.os }}-${{ matrix.ghc }}-${{ matrix.yaml }}-stack2 + key: ${{ runner.os }}-${{ matrix.ghc }}-${{ matrix.yaml }} - name: Build run: | From 8990d265dcbb0c07e192c902f42bd90c114722ab Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Mon, 26 Jun 2023 18:09:30 -0700 Subject: [PATCH 10/10] Try bumping connection bound to >=0.3 --- kubernetes-client/kubernetes-client.cabal | 6 +++--- kubernetes-client/package.yaml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/kubernetes-client/kubernetes-client.cabal b/kubernetes-client/kubernetes-client.cabal index d4897231..00eb495c 100644 --- a/kubernetes-client/kubernetes-client.cabal +++ b/kubernetes-client/kubernetes-client.cabal @@ -52,7 +52,7 @@ library , base >=4.7 && <5.0 , base64-bytestring , bytestring >=0.10 - , connection >=0.2 + , connection >=0.3 , containers >=0.5 , data-default-class >=0.1 , either >=5.0 @@ -99,7 +99,7 @@ test-suite example , base >=4.7 && <5.0 , base64-bytestring , bytestring >=0.10 - , connection >=0.2 + , connection >=0.3 , containers >=0.5 , data-default-class >=0.1 , either >=5.0 @@ -152,7 +152,7 @@ test-suite spec , base >=4.7 && <5.0 , base64-bytestring , bytestring >=0.10 - , connection >=0.2 + , connection >=0.3 , containers >=0.5 , data-default-class >=0.1 , either >=5.0 diff --git a/kubernetes-client/package.yaml b/kubernetes-client/package.yaml index 9263ca97..88d7c5d1 100644 --- a/kubernetes-client/package.yaml +++ b/kubernetes-client/package.yaml @@ -43,7 +43,7 @@ dependencies: - aeson >=1.2 && <3 - attoparsec >=0.13 - jsonpath >=0.1 && <0.4 - - connection >=0.2 + - connection >=0.3 - containers >= 0.5 - data-default-class >=0.1 - either >=5.0