File tree Expand file tree Collapse file tree 4 files changed +157
-0
lines changed Expand file tree Collapse file tree 4 files changed +157
-0
lines changed Original file line number Diff line number Diff line change 1+ name : parse-cabal-file
2+ on :
3+ pull_request :
4+ push :
5+ branches :
6+ - main
7+
8+ jobs :
9+ build :
10+ runs-on : ubuntu-latest
11+ steps :
12+ -
13+ uses : actions/checkout@v3
14+ -
15+ run : ghc -Wall -Werror ParseCabalFile.hs
16+
17+ test :
18+ runs-on : ${{ matrix.os }}
19+ strategy :
20+ matrix :
21+ os :
22+ - ubuntu-latest
23+ - ubuntu-22.04
24+ - ubuntu-20.04
25+ - ubuntu-18.04
26+ - macos-latest
27+ - macos-12
28+ - macos-11
29+ - windows-latest
30+ - windows-2022
31+ - windows-2019
32+ defaults :
33+ run :
34+ shell : bash
35+ steps :
36+ -
37+ uses : actions/checkout@v3
38+ -
39+ name : Write test cabal file
40+ run : |
41+ echo 'name: foo' >> foo.cabal
42+ echo 'version: 12.34' >> foo.cabal
43+ -
44+ name : Run action
45+ uses : ./
46+ id : cabal_file
47+ with :
48+ cabal_file : foo.cabal
49+ -
50+ name : Check action worked
51+ run : |
52+ if [[ "${{ steps.cabal_file.outputs.version }}" != "12.34" ]]; then
53+ echo 'Action failed!' >&2
54+ exit 1
55+ fi
56+
57+ lint :
58+ runs-on : ubuntu-latest
59+ steps :
60+ -
61+ uses : actions/checkout@v3
62+ -
63+ uses : fourmolu/fourmolu-action@v7
64+ with :
65+ pattern : ' *.hs'
66+ extra-args : >
67+ --indentation 2
68+ --indent-wheres true
Original file line number Diff line number Diff line change 1+ {-# LANGUAGE ImportQualifiedPost #-}
2+ {-# LANGUAGE LambdaCase #-}
3+
4+ import Data.ByteString qualified as BS
5+ import Data.List (intercalate )
6+ import Distribution.Package (packageVersion )
7+ import Distribution.PackageDescription.Parsec (parseGenericPackageDescriptionMaybe )
8+ import Distribution.Version (versionNumbers )
9+ import System.Environment (getArgs )
10+ import System.IO (hPutStrLn , stderr , stdout )
11+
12+ main :: IO ()
13+ main = do
14+ cabalFile <-
15+ getArgs >>= \ case
16+ [cabalFile] -> return cabalFile
17+ _ -> errorWithoutStackTrace " Expected exactly one argument: CABAL_FILE"
18+
19+ cabalFileContents <- BS. readFile cabalFile
20+ packageDesc <-
21+ maybe (errorWithoutStackTrace " Could not parse cabal file" ) return $
22+ parseGenericPackageDescriptionMaybe cabalFileContents
23+
24+ output
25+ [ (" version" , intercalate " ." . map show . versionNumbers . packageVersion $ packageDesc)
26+ ]
27+
28+ output :: [(String , String )] -> IO ()
29+ output = mapM_ (uncurry output')
30+ where
31+ output' key value = do
32+ let kv = key ++ " =" ++ value
33+ -- log to stderr
34+ hPutStrLn stderr $ " Setting: " ++ kv
35+ -- output to stdout into $GITHUB_OUTPUT
36+ hPutStrLn stdout kv
Original file line number Diff line number Diff line change 1+ # ` haskell-actions/parse-cabal-file `
2+
3+ GitHub Action: Parse Cabal file
4+
5+ Assumes the runner has GHC installed.
6+
7+ ## Inputs
8+
9+ * ` cabal_file ` (required): The path to a cabal file
10+
11+ ## Outputs
12+
13+ * ` version ` : The version in the Cabal file
14+
15+ ## Example
16+
17+ ``` yaml
18+ jobs :
19+ my-job :
20+ runs-on : ubuntu-latest
21+ steps :
22+ - uses : actions/checkout@v3
23+
24+ - uses : haskell-actions/parse-cabal-file@v1
25+ id : cabal_file
26+ with :
27+ cabal_file : my-library.cabal
28+
29+ - run : echo ${{ steps.cabal_file.outputs.version }}
30+ ` ` `
Original file line number Diff line number Diff line change 1+ name : Parse Cabal File
2+ description : Parse information in a provided cabal file
3+
4+ inputs :
5+ cabal_file :
6+ description : Path to cabal file
7+ required : true
8+
9+ outputs :
10+ version :
11+ description : The version in the cabal file
12+ value : ${{ steps.cabal_file.outputs.version }}
13+
14+ runs :
15+ using : composite
16+ steps :
17+ - run : |
18+ BINDIR=${GITHUB_ACTION_PATH}/bin
19+ mkdir -p ${BINDIR}
20+ ghc ${GITHUB_ACTION_PATH}/ParseCabalFile.hs -outputdir /tmp -o ${BINDIR}/parse-cabal-file
21+ ${BINDIR}/parse-cabal-file "${{ inputs.cabal_file }}" >> "${GITHUB_OUTPUT}"
22+ id: cabal_file
23+ shell: bash
You can’t perform that action at this time.
0 commit comments