diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
 # Revision history for nvfetcher
 
+## 0.8.1.0
+
+* Fix git commit message format by adding an empty line after summary
+* Add prerelease option for github version source
+
 ## 0.8.0.0
 
 There is a major rework on Source File Extract, which is a *breaking change* and requires users to update their configuration files and the usage of generated Nix expressions.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -185,6 +185,7 @@
 Version source -- how do we track upstream version updates?
 
 - `src.github = owner/repo` - the latest github release
+  - `src.prerelase = true` - optional config: whether to include prereleases when tracking github releases. You need to set GitHub token in nvchecker keyfile to use this option.
 - `src.github_tag = owner/repo` - the max github tag, usually used with list options (see below)
 - `src.pypi = pypi_name` - the latest pypi release
 - `src.git = git_url` (and an optional `src.branch = git_branch`) - **the latest commit** of a repo
diff --git a/app/Config/VersionSource.hs b/app/Config/VersionSource.hs
--- a/app/Config/VersionSource.hs
+++ b/app/Config/VersionSource.hs
@@ -78,7 +78,13 @@
 --------------------------------------------------------------------------------
 
 gitHubReleaseDecoder :: Decoder VersionSource
-gitHubReleaseDecoder = uncurry GitHubRelease <$> getFieldWith gitHubNameDecoder "github"
+gitHubReleaseDecoder =
+  uncurry GitHubRelease
+    <$> getFieldWith gitHubNameDecoder "github"
+    <*> ( getFieldOpt "prerelease" >>= \case
+            Just b -> pure b
+            Nothing -> pure False
+        )
 
 --------------------------------------------------------------------------------
 
diff --git a/nvfetcher.cabal b/nvfetcher.cabal
--- a/nvfetcher.cabal
+++ b/nvfetcher.cabal
@@ -1,6 +1,6 @@
 cabal-version:   2.4
 name:            nvfetcher
-version:         0.8.0.0
+version:         0.8.1.0
 synopsis:
   Generate nix sources expr for the latest version of packages
 
@@ -26,7 +26,7 @@
 
 common common-options
   build-depends:
-    , aeson                 >=1.5.6  && <2.3
+    , aeson                 >=1.5.6  && <2.4
     , aeson-pretty
     , base                  >=4.8    && <5
     , binary
diff --git a/src/NvFetcher.hs b/src/NvFetcher.hs
--- a/src/NvFetcher.hs
+++ b/src/NvFetcher.hs
@@ -128,7 +128,7 @@
   changes <- getVersionChanges
   let commitMsg = case changes of
         [x] -> Just $ show x
-        xs@(_ : _) -> Just $ commitSummary <> "\n" <> unlines (show <$> xs)
+        xs@(_ : _) -> Just $ commitSummary <> "\n\n" <> unlines (show <$> xs)
         [] -> Nothing
   whenJust commitMsg $ \msg -> do
     putInfo "Commiting changes"
diff --git a/src/NvFetcher/Nvchecker.hs b/src/NvFetcher/Nvchecker.hs
--- a/src/NvFetcher/Nvchecker.hs
+++ b/src/NvFetcher/Nvchecker.hs
@@ -49,6 +49,7 @@
 import NvFetcher.Types.ShakeExtras
 import NvFetcher.Utils
 import Prettyprinter (pretty, (<+>))
+import Control.Monad (when)
 
 -- | Rules of nvchecker
 nvcheckerRule :: Rules ()
@@ -140,6 +141,9 @@
         "source" =: "github"
         "github" =: (_owner <> "/" <> _repo)
         "use_latest_release" =: "true"
+        -- Even include_prereleases = false would require github token
+        -- So only set it if it's true
+        when _prerelase $ "include_prereleases" =: "true"
       GitHubTag {..} -> do
         "source" =: "github"
         "github" =: (_owner <> "/" <> _repo)
diff --git a/src/NvFetcher/PackageSet.hs b/src/NvFetcher/PackageSet.hs
--- a/src/NvFetcher/PackageSet.hs
+++ b/src/NvFetcher/PackageSet.hs
@@ -52,6 +52,7 @@
 
     -- ** Version sources
     sourceGitHub,
+    sourceGitHub',
     sourceGitHubTag,
     sourceGit,
     sourceGit',
@@ -383,7 +384,11 @@
 
 -- | This package follows the latest github release
 sourceGitHub :: Attach VersionSource (Text, Text)
-sourceGitHub e (owner, repo) = src e $ GitHubRelease owner repo
+sourceGitHub e (owner, repo) = src e $ GitHubRelease owner repo False
+
+-- | Similar to 'sourceGitHub', but allows to specify whether to include prereleases
+sourceGitHub' :: Attach VersionSource (Text, Text, Bool)
+sourceGitHub' e (owner, repo, prerelease) = src e $ GitHubRelease owner repo prerelease
 
 -- | This package follows the a tag from github
 --
diff --git a/src/NvFetcher/Types.hs b/src/NvFetcher/Types.hs
--- a/src/NvFetcher/Types.hs
+++ b/src/NvFetcher/Types.hs
@@ -240,7 +240,7 @@
 
 -- | Upstream version source for nvchecker to check
 data VersionSource
-  = GitHubRelease {_owner :: Text, _repo :: Text}
+  = GitHubRelease {_owner :: Text, _repo :: Text, _prerelase :: Bool}
   | GitHubTag {_owner :: Text, _repo :: Text, _listOptions :: ListOptions}
   | Git {_vurl :: Text, _vbranch :: Branch}
   | Pypi {_pypi :: Text}
diff --git a/test/CheckVersionSpec.hs b/test/CheckVersionSpec.hs
--- a/test/CheckVersionSpec.hs
+++ b/test/CheckVersionSpec.hs
@@ -30,7 +30,7 @@
       runNvcheckerRule (Pypi "example") `shouldReturnJust` Version "0.1.0"
 
     specifyChan "archpkg" $
-      runNvcheckerRule (ArchLinux "xfce4-artwork") `shouldReturnJust` Version "0.1.1a_git20110420"
+      runNvcheckerRule (ArchLinux "intltool") `shouldReturnJust` Version "0.51.0"
 
     specifyChan "aur" $
       runNvcheckerRule (Aur "ssed") `shouldReturnJust` Version "3.62"
@@ -41,9 +41,13 @@
         `shouldReturnJust` Version "ddd0f15ae83993f5cb66a927a28673882e99100b"
 
     specifyChan "github latest release" $
-      runNvcheckerRule (GitHubRelease "harry-sanabria" "ReleaseTestRepo")
+      runNvcheckerRule (GitHubRelease "harry-sanabria" "ReleaseTestRepo" False)
         `shouldReturnJust` Version "release3"
 
+    specifyChan "github latest release (including prerelease)" $
+      runNvcheckerRule (GitHubRelease "dpeukert" "ReleaseTestRepo" True)
+        `shouldReturnJust` Version "v0.0.1-pre"
+
     specifyChan "github max tag" $
       runNvcheckerRule (GitHubTag "harry-sanabria" "ReleaseTestRepo" def)
         `shouldReturnJust` "second_release"
@@ -66,8 +70,8 @@
     specifyChan "openvsx" $
       runNvcheckerRule (OpenVsx "usernamehw" "indent-one-space") `shouldReturnJust` Version "0.3.0"
 
-    specifyChan "repology" $
-      runNvcheckerRule (Repology "ssed" "aur") `shouldReturnJust` Version "3.62"
+    -- specifyChan "repology" $
+    --   runNvcheckerRule (Repology "ssed" "aur") `shouldReturnJust` Version "3.62"
 
     specifyChan "vsmarketplace" $
       runNvcheckerRule (VscodeMarketplace "usernamehw" "indent-one-space") `shouldReturnJust` Version "1.0.0"
diff --git a/test/Utils.hs b/test/Utils.hs
--- a/test/Utils.hs
+++ b/test/Utils.hs
@@ -22,6 +22,7 @@
 import NvFetcher.Types
 import NvFetcher.Types.ShakeExtras
 import qualified System.Directory.Extra as Extra
+import System.Environment (lookupEnv)
 import qualified System.IO.Extra as Extra
 import System.Time.Extra
 import Test.Hspec
@@ -71,9 +72,12 @@
 aroundShake = aroundShake' mempty def
 
 aroundShake' :: Map PackageKey Package -> Config -> SpecWith ActionQueue -> Spec
-aroundShake' pkgs config = aroundAll $ \f ->
+aroundShake' pkgs config = aroundAll $ \f -> Extra.withTempFile $ \fp -> do
+  -- for CI
+  githubToken <- lookupEnv "GITHUB_TOKEN"
+  writeFile fp $ maybe "" (\token -> "[keys]\n" <> "github = \"" <> token <> "\"\n") githubToken
   bracket
-    (newAsyncActionQueue pkgs config)
+    (newAsyncActionQueue pkgs config {keyfile = Just fp})
     (\(_, runnerTask) -> cancel runnerTask)
     (\(chan, _) -> f chan)
 
