packages feed

github 0.15.0 → 0.16.0

raw patch · 13 files changed

+356/−14 lines, 13 filesdep ~basedep ~binarydep ~timePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: base, binary, time

API changes (from Hackage documentation)

+ GitHub: latestReleaseR :: Name Owner -> Name Repo -> Request k Release
+ GitHub: releaseByTagNameR :: Name Owner -> Name Repo -> Text -> Request k Release
+ GitHub: releaseR :: Name Owner -> Name Repo -> Id Release -> Request k Release
+ GitHub: releasesR :: Name Owner -> Name Repo -> FetchCount -> Request k (Vector Release)
+ GitHub: userEventsR :: Name User -> FetchCount -> Request RO (Vector Event)
+ GitHub.Data.Options: StateBlocked :: MergeableState
+ GitHub.Data.PullRequests: [editPullRequestBase] :: EditPullRequest -> !(Maybe Text)
+ GitHub.Data.PullRequests: [editPullRequestMaintainerCanModify] :: EditPullRequest -> !(Maybe Bool)
+ GitHub.Data.Releases: Release :: !URL -> !URL -> !URL -> !URL -> !URL -> !URL -> !(Id Release) -> !Text -> !Text -> !Text -> !Text -> !Bool -> !Bool -> !UTCTime -> !(Maybe UTCTime) -> !SimpleUser -> !(Vector ReleaseAsset) -> Release
+ GitHub.Data.Releases: ReleaseAsset :: !URL -> !Text -> !(Id ReleaseAsset) -> !Text -> !(Maybe Text) -> !Text -> !Text -> !Int -> !Int -> !UTCTime -> !UTCTime -> !SimpleUser -> ReleaseAsset
+ GitHub.Data.Releases: [releaseAssetBrowserDownloadUrl] :: ReleaseAsset -> !Text
+ GitHub.Data.Releases: [releaseAssetContentType] :: ReleaseAsset -> !Text
+ GitHub.Data.Releases: [releaseAssetCreatedAt] :: ReleaseAsset -> !UTCTime
+ GitHub.Data.Releases: [releaseAssetDownloadCount] :: ReleaseAsset -> !Int
+ GitHub.Data.Releases: [releaseAssetId] :: ReleaseAsset -> !(Id ReleaseAsset)
+ GitHub.Data.Releases: [releaseAssetLabel] :: ReleaseAsset -> !(Maybe Text)
+ GitHub.Data.Releases: [releaseAssetName] :: ReleaseAsset -> !Text
+ GitHub.Data.Releases: [releaseAssetSize] :: ReleaseAsset -> !Int
+ GitHub.Data.Releases: [releaseAssetState] :: ReleaseAsset -> !Text
+ GitHub.Data.Releases: [releaseAssetUpdatedAt] :: ReleaseAsset -> !UTCTime
+ GitHub.Data.Releases: [releaseAssetUploader] :: ReleaseAsset -> !SimpleUser
+ GitHub.Data.Releases: [releaseAssetUrl] :: ReleaseAsset -> !URL
+ GitHub.Data.Releases: [releaseAssets] :: Release -> !(Vector ReleaseAsset)
+ GitHub.Data.Releases: [releaseAssetsurl] :: Release -> !URL
+ GitHub.Data.Releases: [releaseAuthor] :: Release -> !SimpleUser
+ GitHub.Data.Releases: [releaseBody] :: Release -> !Text
+ GitHub.Data.Releases: [releaseCreatedAt] :: Release -> !UTCTime
+ GitHub.Data.Releases: [releaseDraft] :: Release -> !Bool
+ GitHub.Data.Releases: [releaseHtmlUrl] :: Release -> !URL
+ GitHub.Data.Releases: [releaseId] :: Release -> !(Id Release)
+ GitHub.Data.Releases: [releaseName] :: Release -> !Text
+ GitHub.Data.Releases: [releasePrerelease] :: Release -> !Bool
+ GitHub.Data.Releases: [releasePublishedAt] :: Release -> !(Maybe UTCTime)
+ GitHub.Data.Releases: [releaseTagName] :: Release -> !Text
+ GitHub.Data.Releases: [releaseTarballUrl] :: Release -> !URL
+ GitHub.Data.Releases: [releaseTargetCommitish] :: Release -> !Text
+ GitHub.Data.Releases: [releaseUploadUrl] :: Release -> !URL
+ GitHub.Data.Releases: [releaseUrl] :: Release -> !URL
+ GitHub.Data.Releases: [releaseZipballUrl] :: Release -> !URL
+ GitHub.Data.Releases: data Release
+ GitHub.Data.Releases: data ReleaseAsset
+ GitHub.Data.Releases: instance Control.DeepSeq.NFData GitHub.Data.Releases.Release
+ GitHub.Data.Releases: instance Control.DeepSeq.NFData GitHub.Data.Releases.ReleaseAsset
+ GitHub.Data.Releases: instance Data.Aeson.Types.FromJSON.FromJSON GitHub.Data.Releases.Release
+ GitHub.Data.Releases: instance Data.Aeson.Types.FromJSON.FromJSON GitHub.Data.Releases.ReleaseAsset
+ GitHub.Data.Releases: instance Data.Binary.Class.Binary GitHub.Data.Releases.Release
+ GitHub.Data.Releases: instance Data.Binary.Class.Binary GitHub.Data.Releases.ReleaseAsset
+ GitHub.Data.Releases: instance Data.Data.Data GitHub.Data.Releases.Release
+ GitHub.Data.Releases: instance Data.Data.Data GitHub.Data.Releases.ReleaseAsset
+ GitHub.Data.Releases: instance GHC.Classes.Eq GitHub.Data.Releases.Release
+ GitHub.Data.Releases: instance GHC.Classes.Eq GitHub.Data.Releases.ReleaseAsset
+ GitHub.Data.Releases: instance GHC.Classes.Ord GitHub.Data.Releases.Release
+ GitHub.Data.Releases: instance GHC.Classes.Ord GitHub.Data.Releases.ReleaseAsset
+ GitHub.Data.Releases: instance GHC.Generics.Generic GitHub.Data.Releases.Release
+ GitHub.Data.Releases: instance GHC.Generics.Generic GitHub.Data.Releases.ReleaseAsset
+ GitHub.Data.Releases: instance GHC.Show.Show GitHub.Data.Releases.Release
+ GitHub.Data.Releases: instance GHC.Show.Show GitHub.Data.Releases.ReleaseAsset
+ GitHub.Endpoints.Activity.Events: userEventsR :: Name User -> FetchCount -> Request RO (Vector Event)
+ GitHub.Endpoints.PullRequests: pullRequestsFor' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error (Vector SimplePullRequest))
+ GitHub.Endpoints.Repos: forkExistingRepoR :: Name Owner -> Name Repo -> Maybe (Name Owner) -> Request RW Repo
+ GitHub.Endpoints.Repos.Releases: latestRelease :: Name Owner -> Name Repo -> IO (Either Error Release)
+ GitHub.Endpoints.Repos.Releases: latestRelease' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error Release)
+ GitHub.Endpoints.Repos.Releases: latestReleaseR :: Name Owner -> Name Repo -> Request k Release
+ GitHub.Endpoints.Repos.Releases: release :: Name Owner -> Name Repo -> Id Release -> IO (Either Error Release)
+ GitHub.Endpoints.Repos.Releases: release' :: Maybe Auth -> Name Owner -> Name Repo -> Id Release -> IO (Either Error Release)
+ GitHub.Endpoints.Repos.Releases: releaseByTagName :: Name Owner -> Name Repo -> Text -> IO (Either Error Release)
+ GitHub.Endpoints.Repos.Releases: releaseByTagName' :: Maybe Auth -> Name Owner -> Name Repo -> Text -> IO (Either Error Release)
+ GitHub.Endpoints.Repos.Releases: releaseByTagNameR :: Name Owner -> Name Repo -> Text -> Request k Release
+ GitHub.Endpoints.Repos.Releases: releaseR :: Name Owner -> Name Repo -> Id Release -> Request k Release
+ GitHub.Endpoints.Repos.Releases: releases :: Name Owner -> Name Repo -> IO (Either Error (Vector Release))
+ GitHub.Endpoints.Repos.Releases: releases' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error (Vector Release))
+ GitHub.Endpoints.Repos.Releases: releasesR :: Name Owner -> Name Repo -> FetchCount -> Request k (Vector Release)
- GitHub.Data.PullRequests: EditPullRequest :: !(Maybe Text) -> !(Maybe Text) -> !(Maybe IssueState) -> EditPullRequest
+ GitHub.Data.PullRequests: EditPullRequest :: !(Maybe Text) -> !(Maybe Text) -> !(Maybe IssueState) -> !(Maybe Text) -> !(Maybe Bool) -> EditPullRequest

Files

CHANGELOG.md view
@@ -1,3 +1,11 @@+Changes for 0.16.0+- Add support for `mergeable_state = "blocked".`+- Fix HTTP status code of merge PR+- Supports newest versions of dependencies+- user events+- release endpoints+- forkExistingRepo+ Changes for 0.15.0  - Reworked `PullRequest` (notably `pullRequestsFor`)
github.cabal view
@@ -1,5 +1,5 @@ name:                github-version:             0.15.0+version:             0.16.0 synopsis:            Access to the GitHub API, v3. description:   The GitHub API provides programmatic access to the full@@ -25,7 +25,7 @@ copyright:           Copyright 2012-2013 Mike Burns, Copyright 2013-2015 John Wiegley, Copyright 2016 Oleg Grenrus category:            Network build-type:          Simple-tested-with:         GHC==7.8.4, GHC==7.10.3, GHC==8.0.1+tested-with:         GHC==7.8.4, GHC==7.10.3, GHC==8.0.2, GHC==8.2.1 cabal-version:       >=1.10 extra-source-files:   README.md,@@ -81,6 +81,7 @@     GitHub.Data.Name     GitHub.Data.Options     GitHub.Data.PullRequests+    GitHub.Data.Releases     GitHub.Data.Repos     GitHub.Data.Request     GitHub.Data.Search@@ -111,20 +112,21 @@     GitHub.Endpoints.Repos.Collaborators     GitHub.Endpoints.Repos.Comments     GitHub.Endpoints.Repos.Commits+    GitHub.Endpoints.Repos.DeployKeys     GitHub.Endpoints.Repos.Forks+    GitHub.Endpoints.Repos.Releases     GitHub.Endpoints.Repos.Webhooks-    GitHub.Endpoints.Repos.DeployKeys     GitHub.Endpoints.Search     GitHub.Endpoints.Users     GitHub.Endpoints.Users.Followers     GitHub.Request    -- Packages needed in order to build this package.-  build-depends: base                  >=4.7       && <4.10,-                 aeson                 >=0.7.0.6   && <1.1,+  build-depends: base                  >=4.7       && <4.11,+                 aeson                 >=0.7.0.6   && <1.3,                  base-compat           >=0.9.1     && <0.10,                  base16-bytestring     >=0.1.1.6   && <0.2,-                 binary                >=0.7.1.0   && <0.9,+                 binary                >=0.7.1.0   && <0.10,                  binary-orphans        >=0.1.0.0   && <0.2,                  byteable              >=0.1.1     && <0.2,                  bytestring            >=0.10.4.0  && <0.11,@@ -143,12 +145,12 @@                  network-uri           >=2.6.0.3   && <2.7,                  semigroups            >=0.16.2.2  && <0.19,                  text                  >=1.2.0.6   && <1.3,-                 time                  >=1.4       && <1.7,+                 time                  >=1.4       && <1.9,                  transformers          >=0.3.0.0   && <0.6,                  transformers-compat   >=0.4.0.3   && <0.6,                  unordered-containers  >=0.2       && <0.3,-                 vector                >=0.10.12.3 && <0.12,-                 vector-instances      >=3.3.0.1   && <3.4,+                 vector                >=0.10.12.3 && <0.13,+                 vector-instances      >=3.3.0.1   && <3.5,                   tls                   >=1.3.5 @@ -169,9 +171,11 @@     GitHub.OrganizationsSpec     GitHub.IssuesSpec     GitHub.PullRequestsSpec+    GitHub.ReleasesSpec     GitHub.ReposSpec     GitHub.SearchSpec     GitHub.UsersSpec+    GitHub.EventsSpec   main-is: Spec.hs   ghc-options: -Wall   build-depends: base,
+ spec/GitHub/EventsSpec.hs view
@@ -0,0 +1,36 @@+{-# LANGUAGE OverloadedStrings #-}+module GitHub.EventsSpec where++import Data.Either        (isRight)+import Data.String        (fromString)+import Prelude ()+import Prelude.Compat+import System.Environment (lookupEnv)+import Test.Hspec         (Spec, describe, it, shouldSatisfy,+                           pendingWith)++import qualified GitHub+import GitHub.Data (Auth(..))++fromRightS :: Show a => Either a b -> b+fromRightS (Left xs) = error $ "Should be Right" ++ show xs+fromRightS (Right xs) = xs++withAuth :: (Auth -> IO ()) -> IO ()+withAuth action = do+  mtoken <- lookupEnv "GITHUB_TOKEN"+  case mtoken of+    Nothing    -> pendingWith "no GITHUB_TOKEN"+    Just token -> action (OAuth $ fromString token)++spec :: Spec+spec = do+  describe "repositoryEventsR" $ do+    it "returns non empty list of events" $ shouldSucceed $+      GitHub.repositoryEventsR "phadej" "github" 1+  describe "userEventsR" $ do+    it "returns non empty list of events" $ shouldSucceed $ GitHub.userEventsR "phadej" 1 +  where shouldSucceed f = withAuth $ \auth -> do+          cs <- GitHub.executeRequest auth $ f+          cs `shouldSatisfy` isRight+          length (fromRightS cs) `shouldSatisfy` (> 1)
+ spec/GitHub/ReleasesSpec.hs view
@@ -0,0 +1,54 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TemplateHaskell   #-}+module GitHub.ReleasesSpec where++import qualified GitHub++import GitHub.Auth                     (Auth (..))+import GitHub.Endpoints.Repos.Releases+       (Release (..), latestReleaseR, releaseByTagNameR, releaseR, releasesR)+import GitHub.Request                  (executeRequest)++import Data.Either.Compat (isRight)+import Data.Proxy         (Proxy (..))+import Data.String        (fromString)+import System.Environment (lookupEnv)+import Test.Hspec+       (Spec, describe, it, pendingWith, shouldBe, shouldSatisfy)++import qualified Data.Vector as V++fromRightS :: Show a => Either a b -> b+fromRightS (Right b) = b+fromRightS (Left a) = error $ "Expected a Right and got a Left" ++ show a++withAuth :: (Auth -> IO ()) -> IO ()+withAuth action = do+  mtoken <- lookupEnv "GITHUB_TOKEN"+  case mtoken of+    Nothing    -> pendingWith "no GITHUB_TOKEN"+    Just token -> action (OAuth $ fromString token)++spec :: Spec+spec = do+  let v154Id   = GitHub.mkId (Proxy :: Proxy Release) 5254449+      v154Text = "v1.5.4"+  describe "releasesR" $ do+    it "works" $ withAuth $ \auth -> do+      rs <- executeRequest auth $ releasesR "calleerlandsson" "pick" GitHub.FetchAll+      rs `shouldSatisfy` isRight+      V.length (fromRightS rs) `shouldSatisfy` (> 14)+  describe "releaseR" $ do+    it "works" $ withAuth $ \auth -> do+      rs <- executeRequest auth $ releaseR "calleerlandsson" "pick" v154Id+      rs `shouldSatisfy` isRight+      releaseTagName (fromRightS rs)`shouldBe` v154Text+  describe "latestReleaseR" $ do+    it "works" $ withAuth $ \auth -> do+      rs <- executeRequest auth $ latestReleaseR "calleerlandsson" "pick"+      rs `shouldSatisfy` isRight+  describe "releaseByTagNameR" $ do+    it "works" $ withAuth $ \auth -> do+      rs <- executeRequest auth $ releaseByTagNameR "calleerlandsson" "pick" v154Text+      rs `shouldSatisfy` isRight+      releaseId (fromRightS rs)`shouldBe` v154Id
src/GitHub.hs view
@@ -18,7 +18,7 @@     -- ** Events     -- | See https://developer.github.com/v3/activity/events/#events     repositoryEventsR,-+    userEventsR,     -- ** Starring     -- | See <https://developer.github.com/v3/activity/starring/>     --@@ -270,6 +270,12 @@     pingRepoWebhookR,     deleteRepoWebhookR, +    -- * Releases+    releasesR,+    releaseR,+    latestReleaseR,+    releaseByTagNameR,+     -- * Search     -- | See <https://developer.github.com/v3/search/>     --@@ -334,6 +340,7 @@ import GitHub.Endpoints.Repos.Comments import GitHub.Endpoints.Repos.Commits import GitHub.Endpoints.Repos.Forks+import GitHub.Endpoints.Repos.Releases import GitHub.Endpoints.Repos.Webhooks import GitHub.Endpoints.Search import GitHub.Endpoints.Users
src/GitHub/Data.hs view
@@ -43,6 +43,7 @@     module GitHub.Data.Milestone,     module GitHub.Data.Options,     module GitHub.Data.PullRequests,+    module GitHub.Data.Releases,     module GitHub.Data.Repos,     module GitHub.Data.Request,     module GitHub.Data.Search,@@ -69,6 +70,7 @@ import GitHub.Data.Name import GitHub.Data.Options import GitHub.Data.PullRequests+import GitHub.Data.Releases import GitHub.Data.Repos import GitHub.Data.Request import GitHub.Data.Search
src/GitHub/Data/Options.hs view
@@ -95,6 +95,7 @@     | StateClean     | StateDirty     | StateUnstable+    | StateBlocked   deriving     (Eq, Ord, Show, Enum, Bounded, Generic, Typeable, Data) @@ -103,13 +104,15 @@     toJSON StateClean    = String "clean"     toJSON StateDirty    = String "dirty"     toJSON StateUnstable = String "unstable"+    toJSON StateBlocked  = String "blocked"  instance FromJSON MergeableState where     parseJSON (String "unknown")  = pure StateUnknown     parseJSON (String "clean")    = pure StateClean     parseJSON (String "dirty")    = pure StateDirty     parseJSON (String "unstable") = pure StateUnstable-    parseJSON v                 = typeMismatch "MergeableState" v+    parseJSON (String "blocked")  = pure StateBlocked+    parseJSON v                   = typeMismatch "MergeableState" v  instance NFData MergeableState where rnf = genericRnf instance Binary MergeableState
src/GitHub/Data/PullRequests.hs view
@@ -90,6 +90,9 @@     { editPullRequestTitle :: !(Maybe Text)     , editPullRequestBody  :: !(Maybe Text)     , editPullRequestState :: !(Maybe IssueState)+    , editPullRequestBase  :: !(Maybe Text)+    , editPullRequestMaintainerCanModify+                           :: !(Maybe Bool)     }   deriving (Show, Generic) @@ -198,8 +201,15 @@         <*> o .: "id"  instance ToJSON EditPullRequest where-    toJSON (EditPullRequest t b s) =-        object $ filter notNull [ "title" .= t, "body" .= b, "state" .= s ]+    toJSON (EditPullRequest t b s base mcm) =+        object $ filter notNull+            [ "title" .= t+            , "body"  .= b+            , "state" .= s+            , "base"  .= base+            , "maintainer_can_modify"+                      .= mcm+            ]       where         notNull (_, Null) = False         notNull (_, _) = True@@ -299,7 +309,7 @@  statusMerge :: StatusMap MergeResult statusMerge =-    [ (204, MergeSuccessful)+    [ (200, MergeSuccessful)     , (405, MergeCannotPerform)     , (409, MergeConflict)     ]
+ src/GitHub/Data/Releases.hs view
@@ -0,0 +1,85 @@+module GitHub.Data.Releases where++import GitHub.Data.Definitions+import GitHub.Data.Id          (Id)+import GitHub.Data.URL         (URL)+import GitHub.Internal.Prelude+import Prelude ()++data Release = Release+    { releaseUrl             :: !URL+    , releaseHtmlUrl         :: !URL+    , releaseAssetsurl       :: !URL+    , releaseUploadUrl       :: !URL+    , releaseTarballUrl      :: !URL+    , releaseZipballUrl      :: !URL+    , releaseId              :: !(Id Release)+    , releaseTagName         :: !Text+    , releaseTargetCommitish :: !Text+    , releaseName            :: !Text+    , releaseBody            :: !Text+    , releaseDraft           :: !Bool+    , releasePrerelease      :: !Bool+    , releaseCreatedAt       :: !UTCTime+    , releasePublishedAt     :: !(Maybe UTCTime)+    , releaseAuthor          :: !SimpleUser+    , releaseAssets          :: !(Vector ReleaseAsset)+    }+    deriving (Show, Data, Typeable, Eq, Ord, Generic)++instance FromJSON Release where+    parseJSON = withObject "Event" $ \o -> Release+        <$> o .: "url"+        <*> o .: "html_url"+        <*> o .: "assets_url"+        <*> o .: "upload_url"+        <*> o .: "tarball_url"+        <*> o .: "zipball_url"+        <*> o .: "id"+        <*> o .: "tag_name"+        <*> o .: "target_commitish"+        <*> o .: "name"+        <*> o .: "body"+        <*> o .: "draft"+        <*> o .: "prerelease"+        <*> o .: "created_at"+        <*> o .:? "published_at"+        <*> o .: "author"+        <*> o .: "assets"++instance NFData Release where rnf = genericRnf+instance Binary Release++data ReleaseAsset = ReleaseAsset+    { releaseAssetUrl                :: !URL+    , releaseAssetBrowserDownloadUrl :: !Text+    , releaseAssetId                 :: !(Id ReleaseAsset)+    , releaseAssetName               :: !Text+    , releaseAssetLabel              :: !(Maybe Text)+    , releaseAssetState              :: !Text+    , releaseAssetContentType        :: !Text+    , releaseAssetSize               :: !Int+    , releaseAssetDownloadCount      :: !Int+    , releaseAssetCreatedAt          :: !UTCTime+    , releaseAssetUpdatedAt          :: !UTCTime+    , releaseAssetUploader           :: !SimpleUser+    }+    deriving (Show, Data, Typeable, Eq, Ord, Generic)++instance FromJSON ReleaseAsset where+    parseJSON = withObject "Event" $ \o -> ReleaseAsset+        <$> o .: "url"+        <*> o .: "browser_download_url"+        <*> o .: "id"+        <*> o .: "name"+        <*> o .:? "label"+        <*> o .: "state"+        <*> o .: "content_type"+        <*> o .: "size"+        <*> o .: "download_count"+        <*> o .: "created_at"+        <*> o .: "updated_at"+        <*> o .: "uploader"++instance NFData ReleaseAsset where rnf = genericRnf+instance Binary ReleaseAsset
src/GitHub/Endpoints/Activity/Events.hs view
@@ -7,6 +7,7 @@ module GitHub.Endpoints.Activity.Events (     -- * Events     repositoryEventsR,+    userEventsR,     module GitHub.Data,     ) where @@ -19,3 +20,9 @@ repositoryEventsR :: Name Owner -> Name Repo -> FetchCount -> Request 'RO (Vector Event) repositoryEventsR user repo =     pagedQuery  ["repos", toPathPart user, toPathPart repo, "events"] []++-- | List user public events.+-- See <https://developer.github.com/v3/activity/events/#list-public-events-performed-by-a-user>+userEventsR :: Name User -> FetchCount -> Request 'RO (Vector Event)+userEventsR user =+    pagedQuery ["users", toPathPart user, "events", "public"] []
src/GitHub/Endpoints/PullRequests.hs view
@@ -7,6 +7,7 @@ -- <http://developer.github.com/v3/pulls/>. module GitHub.Endpoints.PullRequests (     pullRequestsFor,+    pullRequestsFor',     pullRequestsForR,     pullRequest',     pullRequest,@@ -39,6 +40,13 @@ pullRequestsFor :: Name Owner -> Name Repo -> IO (Either Error (Vector SimplePullRequest)) pullRequestsFor user repo =     executeRequest' $ pullRequestsForR user repo mempty FetchAll++-- | All open pull requests for the repo, by owner and repo name.+--+-- > pullRequestsFor "rails" "rails"+pullRequestsFor' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error (Vector SimplePullRequest))+pullRequestsFor' auth user repo =+    executeRequestMaybe auth $ pullRequestsForR user repo mempty FetchAll  -- | List pull requests. -- See <https://developer.github.com/v3/pulls/#list-pull-requests>
src/GitHub/Endpoints/Repos.hs view
@@ -42,6 +42,7 @@     createRepoR,     createOrganizationRepo',     createOrganizationRepoR,+    forkExistingRepoR,      -- ** Edit     editRepo,@@ -171,6 +172,13 @@ createRepoR :: NewRepo -> Request 'RW Repo createRepoR nrepo =     command Post ["user", "repos"] (encode nrepo)++-- | Fork an existing repository.+-- See <https://developer.github.com/v3/repos/forks/#create-a-fork>+-- TODO: The third paramater (an optional Organisation) is not used yet.+forkExistingRepoR :: Name Owner -> Name Repo -> Maybe (Name Owner) -> Request 'RW Repo+forkExistingRepoR owner repo _morg =+    command Post ["repos", toPathPart owner, toPathPart repo, "forks" ] mempty  -- | Create a new repository for an organization. --
+ src/GitHub/Endpoints/Repos/Releases.hs view
@@ -0,0 +1,110 @@+-- The Release API, as described at+-- <https://developer.github.com/v3/repos/releases/>.+module GitHub.Endpoints.Repos.Releases (+    releases,+    releases',+    releasesR,+    release,+    release',+    releaseR,+    latestRelease,+    latestRelease',+    latestReleaseR,+    releaseByTagName,+    releaseByTagName',+    releaseByTagNameR,+    module GitHub.Data,+    ) where++import GitHub.Data+import GitHub.Internal.Prelude+import GitHub.Request+import Prelude ()++-- | All releases for the given repo.+--+-- > releases "calleerlandsson" "pick"+releases :: Name Owner -> Name Repo -> IO (Either Error  (Vector Release))+releases = releases' Nothing++-- | All releases for the given repo with authentication.+--+-- > releases' (Just (User (user, password))) "calleerlandsson" "pick"+releases' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error  (Vector Release))+releases' auth user repo =+    executeRequestMaybe auth $ releasesR user repo FetchAll++-- | List releases for a repository.+-- See <https://developer.github.com/v3/repos/releases/#list-releases-for-a-repository>+releasesR :: Name Owner -> Name Repo -> FetchCount -> Request k (Vector Release)+releasesR user repo =+    pagedQuery ["repos", toPathPart user, toPathPart repo, "releases"] []++-- | Query a single release.+--+-- > release "calleerlandsson" "pick"+release :: Name Owner -> Name Repo -> Id Release -> IO (Either Error Release)+release = release' Nothing++-- | Query a single release with authentication.+--+-- > release' (Just (User (user, password))) "calleerlandsson" "pick"+release' :: Maybe Auth -> Name Owner -> Name Repo -> Id Release -> IO (Either Error Release)+release' auth user repo reqReleaseId =+    executeRequestMaybe auth $ releaseR user repo reqReleaseId++-- | Get a single release.+-- See <https://developer.github.com/v3/repos/releases/#get-a-single-release>+releaseR :: Name Owner -> Name Repo -> Id Release -> Request k Release+releaseR user repo reqReleaseId =+    query ["repos", toPathPart user, toPathPart repo, "releases", toPathPart reqReleaseId ] []++-- | Query latest release.+--+-- > latestRelease "calleerlandsson" "pick"+latestRelease :: Name Owner -> Name Repo -> IO (Either Error Release)+latestRelease = latestRelease' Nothing++-- | Query latest release with authentication.+--+-- > latestRelease' (Just (User (user, password))) "calleerlandsson" "pick"+latestRelease' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error Release)+latestRelease' auth user repo  =+    executeRequestMaybe auth $ latestReleaseR user repo++-- | Get the latest release.+-- See <https://developer.github.com/v3/repos/releases/#get-the-latest-release>+latestReleaseR :: Name Owner -> Name Repo -> Request k Release+latestReleaseR user repo =+    query ["repos", toPathPart user, toPathPart repo, "releases", "latest" ] []++-- | Query release by tag name.+--+-- > releaseByTagName "calleerlandsson" "pick"+releaseByTagName :: Name Owner -> Name Repo -> Text -> IO (Either Error Release)+releaseByTagName = releaseByTagName' Nothing++-- | Query release by tag name with authentication.+--+-- > releaseByTagName' (Just (User (user, password))) "calleerlandsson" "pick"+releaseByTagName' :: Maybe Auth -> Name Owner -> Name Repo -> Text -> IO (Either Error Release)+releaseByTagName' auth user repo reqTagName =+    executeRequestMaybe auth $ releaseByTagNameR user repo reqTagName++-- | Get a release by tag name+-- See <https://developer.github.com/v3/repos/releases/#get-a-release-by-tag-name>+releaseByTagNameR :: Name Owner -> Name Repo -> Text -> Request k Release+releaseByTagNameR user repo reqTagName =+    query ["repos", toPathPart user, toPathPart repo, "releases", "tags" , reqTagName ] []++{-+--  TODO: implement the following:+    https://developer.github.com/v3/repos/releases/#create-a-release+    https://developer.github.com/v3/repos/releases/#edit-a-release+    https://developer.github.com/v3/repos/releases/#delete-a-release+    https://developer.github.com/v3/repos/releases/#list-assets-for-a-release+    https://developer.github.com/v3/repos/releases/#upload-a-release-asset+    https://developer.github.com/v3/repos/releases/#get-a-single-release-asset+    https://developer.github.com/v3/repos/releases/#edit-a-release-asset+    https://developer.github.com/v3/repos/releases/#delete-a-release-asset+-}