This library lifts the GitLab REST API into Haskell. It supports queries about and updates to:
- Branches
- Commits
- Groups
- Issues
- Jobs
- Members
- Merge requests
- Pipelines
- Projects
- Repositories
- Repository files
- Users
- Discussions
- Tags
- Todos
- Version
- Notes
- Boards
The library parses JSON results into Haskell data types in the
GitLab.Types module, allowing you to work with statically typed
GitLab data with data types and functions that the library
provides. E.g.
searchUser :: Text -> GitLab (Maybe User)
userProjects :: User -> ProjectSearchAttrs -> GitLab (Maybe [Project])
This library can also be used to implement rule based GitLab file system hooks that, when deployed a GitLab server, react in real time to GitLab events like project creation, new users, merge requests etc.
The rule based API for implementing file hooks is:
receive :: [Rule] -> GitLab ()
class (FromJSON a) => SystemHook a where
match :: String -> (a -> GitLab ()) -> Rule
matchIf :: String -> (a -> GitLab Bool) -> (a -> GitLab ()) -> Rule
For more details about the file system hooks support, see post: GitLab automation with file hook rules.
This library has almost 100% coverage of the GitLab REST API. For the complete
gitlab-haskell API, see the hackage
documentation.
Run all GitLab actions with runGitLab:
runGitLab ::
=> GitLabServerConfig
-> GitLab a
-> IO (Either GitLabError a)
For example the following project returns all GitLab projects for the user "joe".
myProjects <- fromRight <$>
runGitLab
(defaultGitLabServer
{ url = "https://gitlab.example.com"
, token = AuthMethodToken "my_token"} )
(searchUser "joe" >>= \usr -> userProjects (fromJust usr) defaultProjectSearchAttrs)
It was initially developed to automate and support computer science education. See our ICSE-SEET 2024 paper for the details: "Integrating Canvas and GitLab to Enrich Learning Processes".
An example of an application using this library is gitlab-tools,
which is a command line tool for bulk GitLab transactions link.
Unsurprisingly, this library is maintained on GitLab: GitLab project.