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 +2/−3
- src/GitLab/API/Groups.hs +11/−0
- src/GitLab/API/Projects.hs +38/−0
- src/GitLab/Types.hs +79/−0
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 })