packages feed

gitlab-haskell 0.1.0.2 → 0.1.1

raw patch · 4 files changed

+130/−3 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ GitLab.API.Groups: groupsWithName :: (MonadUnliftIO m, MonadIO m) => Text -> GitLab m [Group]
+ GitLab.API.Projects: projectDiffs :: MonadIO m => Project -> Text -> GitLab m [Diff]
+ GitLab.API.Projects: projectDiffs' :: MonadIO m => Int -> Text -> GitLab m [Diff]
+ GitLab.API.Projects: shareProjectWithGroup :: MonadIO m => Int -> Int -> AccessLevel -> GitLab m (Either Status GroupShare)
+ GitLab.Types: Diff :: Text -> Text -> Text -> Maybe Text -> Maybe Text -> Bool -> Bool -> Bool -> Diff
+ GitLab.Types: Group :: Int -> Text -> Text -> Text -> Text -> Bool -> Maybe Text -> Text -> Bool -> Text -> Text -> Maybe Int -> Maybe Int -> Group
+ GitLab.Types: GroupShare :: Int -> Int -> Int -> Int -> Maybe Text -> GroupShare
+ GitLab.Types: [a_mode] :: Diff -> Maybe Text
+ GitLab.Types: [b_mode] :: Diff -> Maybe Text
+ GitLab.Types: [deleted_file] :: Diff -> Bool
+ GitLab.Types: [diff] :: Diff -> Text
+ GitLab.Types: [group_avatar_url] :: Group -> Maybe Text
+ GitLab.Types: [group_description] :: Group -> Text
+ GitLab.Types: [group_file_template_project_id] :: Group -> Maybe Int
+ GitLab.Types: [group_full_name] :: Group -> Text
+ GitLab.Types: [group_full_path] :: Group -> Text
+ GitLab.Types: [group_id] :: Group -> Int
+ GitLab.Types: [group_lfs_enabled] :: Group -> Bool
+ GitLab.Types: [group_name] :: Group -> Text
+ GitLab.Types: [group_parent_id] :: Group -> Maybe Int
+ GitLab.Types: [group_path] :: Group -> Text
+ GitLab.Types: [group_request_access_enabled] :: Group -> Bool
+ GitLab.Types: [group_visibility] :: Group -> Text
+ GitLab.Types: [group_web_url] :: Group -> Text
+ GitLab.Types: [new_file] :: Diff -> Bool
+ GitLab.Types: [new_path] :: Diff -> Text
+ GitLab.Types: [old_path] :: Diff -> Text
+ GitLab.Types: [renamed_file] :: Diff -> Bool
+ GitLab.Types: [share_expires_at] :: GroupShare -> Maybe Text
+ GitLab.Types: [share_group_access] :: GroupShare -> Int
+ GitLab.Types: [share_group_id] :: GroupShare -> Int
+ GitLab.Types: [share_id] :: GroupShare -> Int
+ GitLab.Types: [share_project_id] :: GroupShare -> Int
+ GitLab.Types: data Diff
+ GitLab.Types: data Group
+ GitLab.Types: data GroupShare
+ GitLab.Types: instance Data.Aeson.Types.FromJSON.FromJSON GitLab.Types.Diff
+ GitLab.Types: instance Data.Aeson.Types.FromJSON.FromJSON GitLab.Types.Group
+ GitLab.Types: instance Data.Aeson.Types.FromJSON.FromJSON GitLab.Types.GroupShare
+ GitLab.Types: instance GHC.Generics.Generic GitLab.Types.Diff
+ GitLab.Types: instance GHC.Generics.Generic GitLab.Types.Group
+ GitLab.Types: instance GHC.Generics.Generic GitLab.Types.GroupShare
+ GitLab.Types: instance GHC.Show.Show GitLab.Types.Diff
+ GitLab.Types: instance GHC.Show.Show GitLab.Types.Group
+ GitLab.Types: instance GHC.Show.Show GitLab.Types.GroupShare
+ GitLab.WebRequests.GitLabWebCalls: gitlab :: (MonadIO m, FromJSON a) => Text -> GitLab m [a]
+ GitLab.WebRequests.GitLabWebCalls: gitlabOne :: (MonadIO m, FromJSON a) => Text -> GitLab m (Maybe a)
+ GitLab.WebRequests.GitLabWebCalls: gitlabPost :: (MonadIO m, FromJSON b) => Text -> Text -> GitLab m (Either Status b)
+ GitLab.WebRequests.GitLabWebCalls: gitlabWithAttrs :: (MonadIO m, FromJSON a) => Text -> Text -> GitLab m [a]
+ GitLab.WebRequests.GitLabWebCalls: gitlabWithAttrsOne :: (MonadIO m, FromJSON a) => Text -> Text -> GitLab m (Maybe a)

Files

gitlab-haskell.cabal view
@@ -1,7 +1,7 @@ cabal-version: 2.4 name:           gitlab-haskell category:       Git-version:        0.1.0.2+version:        0.1.1 synopsis:       A Haskell library for the GitLab web API description:   This Haskell library queries and updates the database of a GitLab instance using the GitLab web API: <https://docs.gitlab.com/ee/api/>@@ -40,8 +40,7 @@                 , GitLab.API.Repositories                 , GitLab.API.MergeRequests                 , GitLab.API.RepositoryFiles-  other-modules:-                GitLab.WebRequests.GitLabWebCalls+                , GitLab.WebRequests.GitLabWebCalls   hs-source-dirs:                  src   build-depends:
src/GitLab/API/Groups.hs view
@@ -12,6 +12,7 @@ module GitLab.API.Groups where  import Control.Monad.IO.Class+import Control.Monad.IO.Unlift import Data.Maybe import Data.Text (Text) import qualified Data.Text as T@@ -21,6 +22,16 @@ import GitLab.API.Users import GitLab.Types import GitLab.WebRequests.GitLabWebCalls++-- | gets groups with the given group name.+--+-- > projectsWithName "group1"+groupsWithName :: (MonadUnliftIO m, MonadIO m)+  => Text -- ^ group name being searched for.+  -> GitLab m [Group]+groupsWithName groupName =+  filter (\group -> groupName == group_path group) <$>+  gitlabWithAttrs "/groups" ("&search=" <> groupName)  -- | adds all registered users to a group. addAllUsersToGroup ::
src/GitLab/API/Projects.hs view
@@ -19,10 +19,12 @@ import qualified Data.Text as T import qualified Data.Text.Encoding as T import Network.HTTP.Types.URI+import Network.HTTP.Types.Status import UnliftIO.Async  import GitLab.API.Commits import GitLab.API.Issues+import GitLab.API.Members import GitLab.API.Pipelines import GitLab.API.Users import GitLab.Types@@ -201,3 +203,39 @@   case user_maybe of     Nothing -> return Nothing     Just usr -> return (Just (user_id usr))++-- | gets all diffs in a project for a given commit SHA.+projectDiffs :: (MonadIO m) => Project -> Text -> GitLab m [Diff]+projectDiffs proj commitSha =+  projectDiffs' (project_id proj) commitSha++-- | gets all diffs in a project for a given project ID, for a given+-- commit SHA.+projectDiffs' :: (MonadIO m) => Int -> Text -> GitLab m [Diff]+projectDiffs' projId commitSha =+  gitlab+  ("/projects/"+   <> T.pack (show projId)+   <> "/repository/commits/"+   <> commitSha+   <> "/diff/")++-- | share a project with a group.+shareProjectWithGroup ::+     (MonadIO m)+  => Int -- ^ group ID+  -> Int -- ^ project ID+  -> AccessLevel -- ^ level of access granted+  -> GitLab m (Either Status GroupShare)+shareProjectWithGroup groupId projectId access =+  gitlabPost addr dataBody+  where+    dataBody :: Text+    dataBody =+      "group_id="+      <> T.pack (show groupId)+      <> "&group_access="+      <> T.pack (show access)+    addr = "/projects/"+           <> T.pack (show projectId)+           <> "/share"
src/GitLab/Types.hs view
@@ -29,9 +29,12 @@   , Pipeline(..)   , Commit(..)   , CommitStats(..)+  , Diff(..)   , Repository(..)   , Job(..)   , Artifact(..)+  , Group(..)+  , GroupShare(..)   , Branch(..)   , RepositoryFile(..)   , MergeRequest(..)@@ -288,6 +291,18 @@   , total :: Int   } deriving (Generic, Show) +data Diff =+  Diff+  { diff :: Text+  , new_path :: Text+  , old_path :: Text+  , a_mode :: Maybe Text+  , b_mode :: Maybe Text+  , new_file :: Bool+  , renamed_file :: Bool+  , deleted_file :: Bool+  } deriving (Generic, Show)+ -- | repositories. data Repository =   Repository@@ -331,6 +346,36 @@   , file_format :: Maybe Text   } deriving (Generic, Show) +-- | groups.+data Group =+  Group+  {+    group_id :: Int+  , group_name :: Text+  , group_path :: Text+  , group_description :: Text+  , group_visibility :: Text+  , group_lfs_enabled :: Bool+  , group_avatar_url :: Maybe Text+  , group_web_url :: Text+  , group_request_access_enabled :: Bool+  , group_full_name :: Text+  , group_full_path :: Text+  , group_file_template_project_id :: Maybe Int+  , group_parent_id :: Maybe Int+  } deriving (Generic, Show)++  +-- | response to sharing a project with a group.+data GroupShare =+  GroupShare+  { share_id :: Int+  , share_project_id :: Int+  , share_group_id :: Int+  , share_group_access :: Int+  , share_expires_at :: Maybe Text+  } deriving (Generic, Show)+ -- | code branches. data Branch =   Branch@@ -512,8 +557,27 @@ bodyNoPrefix "project_stats" = "statistics" bodyNoPrefix "commit_stats" = "stats" +bodyNoPrefix "share_id" = "id"+bodyNoPrefix "share_project_id" = "project_id"+bodyNoPrefix "share_group_id" = "group_id"+bodyNoPrefix "share_group_access" = "group_access"+bodyNoPrefix "share_expires_at" = "expires_at" +bodyNoPrefix "group_id" = "id"+bodyNoPrefix "group_name" = "name"+bodyNoPrefix "group_path" = "path"+bodyNoPrefix "group_description" = "description"+bodyNoPrefix "group_visibility" = "visibility"+bodyNoPrefix "group_lfs_enabled" = "lfs_enabled"+bodyNoPrefix "group_avatar_url" = "avatar_url"+bodyNoPrefix "group_web_url" = "web_url"+bodyNoPrefix "group_request_access_enabled" = "request_access_enabled"+bodyNoPrefix "group_full_name" = "full_name"+bodyNoPrefix "group_full_path" = "full_path"+bodyNoPrefix "group_file_template_project_id" = "file_template_project_id"+bodyNoPrefix "group_parent_id" = "parent_id" + -- TODO field names for Issues data type bodyNoPrefix s = s @@ -602,6 +666,16 @@               (defaultOptions                { fieldLabelModifier = bodyNoPrefix }) +instance FromJSON Group where+  parseJSON = genericParseJSON+              (defaultOptions+               { fieldLabelModifier = bodyNoPrefix })++instance FromJSON GroupShare where+  parseJSON = genericParseJSON+              (defaultOptions+               { fieldLabelModifier = bodyNoPrefix })+ instance FromJSON Branch where   parseJSON = genericParseJSON               (defaultOptions@@ -613,6 +687,11 @@                { fieldLabelModifier = bodyNoPrefix })  instance FromJSON MergeRequest where+  parseJSON = genericParseJSON+              (defaultOptions+               { fieldLabelModifier = bodyNoPrefix })++instance FromJSON Diff where   parseJSON = genericParseJSON               (defaultOptions                { fieldLabelModifier = bodyNoPrefix })