h$Q}:       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                    !!"""""""""""""""""""""""""""""""""""""""""########################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&''(((((None 5678:<' haskell-ci(Return the part after the first argumentafterInfix "BAR" "FOOBAR XYZZY" Just " XYZZY" haskell-ciafterPrefix "FOO" "FOOBAR" Just "BAR" haskell-ci4findMaybe readMaybe ["foo", "1", "bar"] :: Maybe IntJust 1 haskell-ci"Whether two ranges are equivalent. &'(e)* +,-t. /fghijk01234567s%#$89:;<" !=IL>?@ABCJKDQOPEFGHMNRTUVWXYZ[\]^_`abcdlmnopqruvwxyz{|}~ &'(e)* +,-t. /fghijk0123457s%#$89;<" !=IL>?@ABCJKDQOPEFGHMNbcdlmnouxyz{|}~ 6:RTUVWXYZ[\]^_`apqrvwNone 5678:<& haskell-ci!File fields to final value parser haskell-ci File to readNone5678:<> haskell-ciMore general version of . haskell-ciThis is a bit tricky since it has to cover globs which have embedded , chars. But we don't just want to parse strictly as a glob since we want to allow http urls which don't parse as globs, and possibly some system-dependent file paths. So we parse fairly liberally as a token, but we allow , inside matched {} braces.None-5678:<>? haskell-ci8Bash completion action for option argument. Example: "file" or  "directory".See  https://github.com/pcapriotti/optparse-applicative#actions-and-completers and  https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion-Builtins.html. haskell-ci"Meta variable for option argument. haskell-ciHelp text for option. S SNone '(5678:<>YNone5678:<> haskell-ci is  MonadError without catchNone 5678:<None 5678:<9 None  5678:< haskell-ciRead . On error, return  emptyGitConfg. None 5678:<   None 5678:<8 None 5678:<u None 5678:<  haskell-ciJobsN:M - N ghcs (cabal -j), M threads (ghc -j)6let parseJobs = C.simpleParsec :: String -> Maybe JobsparseJobs "2:2"Just (BothJobs 2 2)parseJobs ":2"Just (GhcJobs 2) parseJobs "2"Just (CabalJobs 2)parseJobs "garbage"NothingNone 5678:<"w haskell-ci Normalised9parseI = maybe (error "foo") id . traverse C.simpleParsec&normaliseInstalled $ parseI ["-Cabal"].InstalledDiff (fromList [PackageName "Cabal"])$normaliseInstalled $ parseI ["-all"]InstalledOnly (fromList [])5normaliseInstalled $ parseI ["-all", "+transformers"]5InstalledOnly (fromList [PackageName "transformers"])  None -/5678:<# haskell-cirun with latest GHC haskell-cirun with specified GHC versionNone5678:<>#None 5678:<#None  /5678:<$6  None  /5678:<$None5678:<>$None  /5678:<%  None 5678:<&  haskell-ciAlphas, RCs and HEAD. haskell-ciPreferred Cabal Version haskell-ci GHC Version haskell-cihead.hackage rangeNone 5678:<&None 5678:<&  None 5678:<(c haskell-ci ShellCheck disagrees. haskell-cimade by . haskell-ciWrite shell command haskell-ci Write comment haskell-ciCommented block.If the block is empty (or comments only), nothing might be written. haskell-cicommand haskell-cicommentNone 5678:<(None 5678:<)None -/5678:<>)J::None #$5678:<* haskell-ciall jobs haskell-ciosx jobs: GHC only haskell-ciconfigNone #$%5678:<+G haskell-ci7Auxiliary definitions, probably useful for all backendsNone 5678:<- haskell-ci Modules arguments to the libraryWe check the library component%If there are hs-source-dirs, use them%otherwise use exposed + other modulesAlso add default-extensionsNote:2 same argument work for hlint too, but not exactly haskell-ci all compilers haskell-ci head.hackage haskell-ci hlint-jobs None #$%5678:<-@!None 5678:<-n"None 5678:<- haskell-ci .cabal haskell-ci@cabal.project###None '(5678:<5 haskell-ciThis is not complete YAML document tree; only as much as we need in  haskell-ci. haskell-ciinline JSON (for compactness) haskell-ciRe-annotate top-level term haskell-ciConvert  to o. ann can be converted to comments.Examples$let demo = putStr . prettyYaml lines demo "foo"foodemo "foo: bar" "foo: bar" demo $ YString "a comment" "foo" # a commentfoodemo $ YBool "a comment" True # a commenttruedemo $ YList "" [][]#demo $ YList "" ["foo", "foo: bar"]- foo - "foo: bar"demo $ YList "comment1" [YString "comment2" "foo", YString "comment3" "foo: bar"] # comment1# # comment2- foo # comment3 - "foo: bar"demo $ YKeyValues "" []{}demo $ YKeyValues "" [("", "foo", "bar"), ("", "help", "welcome")]foo: bar help: welcomelet nested = YKeyValues "comment1" [("comment2", "foo", YString "comment3" "bar"), ("comment4", "help", YString "comment5" "welcome")] demo nested # comment1# # comment2# # comment3foo: bar # comment4# # comment5 help: welcome0demo $ YKeyValues "top" [("", "nested", nested)] # topnested: # comment1 # # comment2 # # comment3 foo: bar # comment4 # # comment5 help: welcome>demo $ YValue "inline json" $ Aeson.toJSON [True, False, True] # inline json[true,false,true]demo $ YKeyValues "" [ ("", "addons", YValue "" $ Aeson.toJSON $ [Just "foo", Just "bar", Nothing]) ]addons: ["foo","bar",null]/demo $ YString "" $ unlines ["foo","bar","baz"]"foo\nbar\nbaz\n":let multiline = YString "" $ unlines ["foo", "bar", "baz"]&demo $ YList "" [multiline, multiline]- | foo bar baz- | foo bar bazdemo $ YKeyValues "" [("", "keyA", multiline), ("", "keyB", multiline)]keyA: | foo bar bazkeyB: | foo bar baz  $None #$5678:<6G haskell-cisourceline with optional key<<%None #$%5678:<7d&None #$5678:<7 haskell-ci Steps with uses haskell-ci Steps with run,,'None #$%5678:<8(None /5678:<8)*+,-.)/0)/1)23)45)46)*7)*8)*9,-:);<);=)>?)@A)@B)@C)@D,EF,EG);H)*I)*J)*K)*L)MN)OP)>Q)>R)>S)>T)*U)*V)*W)*X)*Y)*Z)*[)@\)@],E^)_`)>a)>b)*c)*d);e,Ef)gh)>i)_j)>k)lm)Mn)Oo)*p)qr)st)uv)*w)*x,yz,y{,y|,y},y~),y)>,y,y),y)),y)),y,y,y,E,E,E,E,E,E,E,E,E,E))))*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*);););););)4)4)))))))))/)/)/)/)/)/)/)/)/)/)/)/)/)/)/)/)/)/)/)/)/)/)/)l)l)l)l)l)l)l)l)@)@)@)@)@)@)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>)>))))_)_)_)_)_)_)_)_)_)_)_)_)_)_)_)_)_)_)_)_)_)_)_)_)_)_)_)_)_)_)_)_))g)g)g)g))))))))))))))q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q)q))))))))))2)2)2)2)2)2)2)2)2)2)2)2))))s)s))))q)s)s)*)))))))))))))))))))q)q)))/)/                                                    !!"""""""""""""""""""""""""""""""""""""""""########################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&''((((:haskell-ci-0.12-7jCvWkDOf9r32De8zrFcpD-haskell-ci-internalHaskellCI.PreludeHaskellCI.OptionsGrammarHaskellCI.ParsecUtilsHaskellCI.NewtypesHaskellCI.OptparseGrammarHaskellCI.MonadErrHaskellCI.ListHaskellCI.HeadHackageHaskellCI.GitConfigHaskellCI.DiagnosticsHaskellCI.Config.UbuntuHaskellCI.Config.PackageScopeHaskellCI.Config.JobsHaskellCI.Config.InstalledHaskellCI.Config.HLintHaskellCI.Config.FoldsHaskellCI.Config.DumpHaskellCI.Config.DoctestHaskellCI.Config.DocspecHaskellCI.Config.CopyFieldsHaskellCI.Config.ConstraintSetHaskellCI.CompilerHaskellCI.PackageHaskellCI.Bash.Template HaskellCI.ShHaskellCI.ShVersionRangeHaskellCI.TestedWithHaskellCI.ConfigHaskellCI.JobsHaskellCI.AuxiliaryHaskellCI.ToolsHaskellCI.BashHaskellCI.VersionInfo HaskellCI.CliHaskellCI.YamlSyntaxHaskellCI.Travis.YamlHaskellCI.TravisHaskellCI.GitHub.YamlHaskellCI.GitHub HaskellCIbaseGHC.Base++ghc-primGHC.PrimseqGHC.Listfilterzip System.IOprint Data.Tuplefstsnd otherwisemap$coerceGHC.Num fromInteger-GHC.Real fromRationalGHC.EnumenumFrom enumFromThen enumFromToenumFromThenTo GHC.Classes==>=negate>>=>>fmapreturnControl.Monad.Failfail Data.String fromString fromIntegral realToFrac toInteger toRational<>memptymappendmconcat<*>pure*>BoundedEnumEq GHC.FloatFloating FractionalIntegralMonadFunctorNumOrdGHC.ReadReadReal RealFloatRealFracGHC.ShowShow MonadFailIsString Applicative Data.FoldableFoldableData.Traversable Traversable GHC.GenericsGeneric SemigroupMonoid GHC.TypesBoolCharDoubleFloatIntinteger-wired-inGHC.Integer.TypeInteger GHC.MaybeMaybeOrderingRationalIOWord Data.EitherEitherFalseNothingJustTrueLeftRightLTEQGTbytestring-0.10.10.0Data.ByteString.Internal ByteString$Cabal-3.4.0.0-87V2bvTScjS3xdojmsQSEWDistribution.FieldGrammar^^^(Distribution.Types.VersionRange.Internal noVersion anyVersion VersionRangeDistribution.Types.Version mkVersionVersionDistribution.Parsec simpleParsecDistribution.Pretty prettyShowDistribution.Compat.Lens.~^.&toListOfovercontainers-0.6.2.1Data.Set.InternalSetbinary-0.8.8.0Data.Binary.ClassBinarynot||&&/=minmax><=<compareGHC.ErrerrorerrorWithoutStackTrace undefinedStringNonEmpty:|<|><*<$=<<whenapidconst.flip$!untilasTypeOf+*abssignumsubtractcurryuncurry Data.Functor<$>void Data.Functionon Data.MaybemaybeisJust isNothing fromMaybemapMaybescanlscanl1scanrscanr1iteraterepeat replicatecycle takeWhile dropWhiletakedropsplitAtspanbreakreverselookup!!zip3zipWithzipWith3unzipunzip3 showsPrecshowshowListShowSshowsshowChar showString showParensuccpredtoEnumfromEnumminBoundmaxBoundproperFractiontruncateroundceilingfloor/recipquotremdivmodquotRemdivModevenodd^^^gcdlcm GHC.UnicodeisSpaceisUppertoLower floatRadix floatDigits floatRange decodeFloat encodeFloatexponent significand scaleFloatisNaN isInfiniteisDenormalizedisNegativeZeroisIEEEatan2piexplogsqrt**logBasesincostanasinacosatansinhcoshtanhasinhacoshatanhText.ParserCombinators.ReadPReadS readsPrecreadList readParenlex Data.ProxyProxyeitherpartitionEithers Text.Readreads readMaybe Data.OldList isPrefixOfnub intercalatelinesunlineswordsunwordsfoldMapfoldrfoldlfoldl'toListnulllengthelemmaximumminimumsumproduct traverse_for_ sequence_concat concatMapandoranyallnotElemGHC.Exception.Type Exception toException fromExceptiondisplayExceptionGHC.IO.ExceptionIOError IOException userErrorGHC.IOFilePathioErrorputCharputStrputStrLngetChargetLine getContentsinteractreadFile writeFile appendFilereadLnreadIOData.Functor.IdentityIdentity runIdentitytraverse sequenceA Control.Monadunless Data.VoidVoid text-1.2.3.2Data.Text.InternalText<&>mapM_sequencemapMliftA2Data.Bifunctorbimap BifunctorreadData.BitraversablebifoldMapDefault bimapDefault bitraverse BitraversableData.Bifoldablebifoldlbifoldr bifoldMapbifold BifoldablesecondfirstData.List.NonEmptygroupByControl.Monad.IO.ClassliftIOMonadIOControl.Exception.Basehandlefoldl1foldr1tails stripPrefixinitlast*network-uri-2.6.4.1-3rjR9AKf8Rm5zFnzIORPH4 Network.URIURIexceptions-0.10.4Control.Monad.Catch MonadThrow MonadCatch MonadMask,generic-lens-lite-0.1-6c9NdqTQFs5HTRkDu8fyHvData.Generics.Lens.Litefield0indexed-traversable-0.1.1-Dw8MIJyvCj8IZQDXOa8TBp WithIndexifoldr%lattices-2.0.2-AUqEZivgWXs2TPKdFmMePCAlgebra.Lattice/\\/LatticebottomBoundedJoinSemiLatticetopBoundedMeetSemiLatticeBoundedLattice uriToStringparseURImappedhead afterInfix afterPrefix findMaybeequivVersionRanges$fLatticeVersionRangereadAndParseFileAlaSet getAlaSetRangeInt' HeadVersiongetHeadVersionNoCommasPackageLocationalaSetalaSet'hack$fPrettyPackageLocation$fParsecPackageLocation$fPrettyNoCommas$fParsecNoCommas$fPrettyHeadVersion$fParsecHeadVersion $fPrettyInt' $fParsecInt' $fPrettyRange $fParsecRange$fPrettyAlaSet$fParsecAlaSet$fNewtypeSetAlaSet$fNewtypeVersionRangeRange$fNewtypeIntInt'$fNewtypeMaybeHeadVersion$fNewtype[]NoCommas$fNewtype[]PackageLocation ParsecPrettyOptionsGrammarmetaCompleterHelpmetahelphelp rangeFieldBashCompletionActionMetaVarHelpmetaActionHelp($fOptionsGrammarParsecParsecFieldGrammar$fParsecPrettyaOptparseGrammarrunOptparseGrammar+$fOptionsGrammarParsecPrettyOptparseGrammar)$fFieldGrammarParsecPrettyOptparseGrammar$fApplicativeOptparseGrammar$fFunctorOptparseGrammarMonadErrthrowErr$fMonadErreEither ListBuilder buildListitem$fMonadListBuilder$fApplicativeListBuilder$fFunctorListBuilderheadHackageRepoStanza GitConfig gitCfgRemotesemptyGitConfig readGitConfig$fShowGitConfig DiagnosticsT Diagnostics unDiagnosticsMonadDiagnostics putStrLnErr putStrLnErrs putStrLnWarn putStrLnInforunDiagnosticsT$fMonadDiagnosticsIO$fMonadDiagnosticsDiagnosticsT$fFunctorDiagnosticsT$fApplicativeDiagnosticsT$fMonadDiagnosticsT$fMonadIODiagnosticsT$fMonadCatchDiagnosticsT$fMonadMaskDiagnosticsT$fMonadThrowDiagnosticsTUbuntuXenialBionicFocal showUbuntu$fPrettyUbuntu$fParsecUbuntu $fEqUbuntu $fOrdUbuntu $fShowUbuntu PackageScopePackageScopeNonePackageScopeLocalPackageScopeAll$fPrettyPackageScope$fParsecPackageScope$fEqPackageScope$fShowPackageScopeJobs CabalJobsGhcJobsBothJobs cabalJobsghcJobs $fPrettyJobs $fParsecJobs $fShowJobsInstalledNormalised InstalledDiff InstalledOnly Installed InstalledAll InstalledNoneAddRemovenormaliseInstalled$fParsecInstalled$fPrettyInstalled$fShowInstalledNormalised $fEqInstalled$fShowInstalledHLintJobHLintJobLatest HLintConfigcfgHLintEnabled cfgHLintJob cfgHLintYamlcfgHLintOptionscfgHLintVersioncfgHLintDownloaddefaultHLintVersiondefaultHLintConfighlintConfigGrammar$fPrettyHLintJob$fParsecHLintJob$fShowHLintConfig$fGenericHLintConfig$fBinaryHLintConfig $fEqHLintJob$fShowHLintJob$fGenericHLintJob$fBinaryHLintJobFoldsgetFoldsFold FoldSDist FoldUnpack FoldBuildFoldBuildInstalledFoldBuildEverythingFoldTest FoldHaddock FoldStackage FoldCheck FoldDoctest FoldHLintFoldConstraintSetsshowFold possibleFolds $fPrettyFolds $fParsecFolds$fNewtypeSetFolds$fEqFold $fOrdFold $fShowFold $fEnumFold $fBoundedFold DumpGrammarDGrunDG!$fOptionsGrammarPrettyDumpGrammar$fFieldGrammarPrettyDumpGrammar$fApplicativeDumpGrammar$fFunctorDumpGrammar DoctestConfigcfgDoctestEnabledcfgDoctestOptionscfgDoctestVersioncfgDoctestFilterEnvPkgscfgDoctestFilterSrcPkgsdefaultDoctestVersiondefaultDoctestConfigdoctestConfigGrammar$fShowDoctestConfig$fGenericDoctestConfig$fBinaryDoctestConfig DocspecConfigcfgDocspecEnabledcfgDocspecOptions cfgDocspecUrlcfgDocspecHashdefaultDocspecConfigdocspecConfigGrammar$fShowDocspecConfig$fGenericDocspecConfig$fBinaryDocspecConfig CopyFieldsCopyFieldsNoneCopyFieldsSome CopyFieldsAllshowCopyFields$fParsecCopyFields$fPrettyCopyFields$fEqCopyFields$fOrdCopyFields$fShowCopyFields$fEnumCopyFields$fBoundedCopyFields ConstraintSetcsName csGhcVersions csConstraintscsTests csRunTests csDocspec csBenchmarks csHaddockemptyConstraintSetconstraintSetGrammar$fShowConstraintSet$fGenericConstraintSet CompilerRangeRangeGHC RangeGHCJS RangePoints RangeInter RangeUnionCompilerVersionGHCHeadGHCGHCJSmaybeGHCisGHCJS maybeGHCJScompilerWithinRangeinvertCompilerRangeknownGhcVersionsknownGhcjsVersionscorrespondingCabalVersiondispGhcVersiondispGhcVersionShortdispCabalVersion previewGHC ghcMajVer%$fBoundedMeetSemiLatticeCompilerRange%$fBoundedJoinSemiLatticeCompilerRange$fLatticeCompilerRange$fShowCompilerRange$fEqCompilerVersion$fOrdCompilerVersion$fShowCompilerVersionPackagePkgpkgNamepkgJobspkgDirpkgGpd $fEqPackage $fShowPackage$fGenericPackageZzJobs zRegendatazBlocks zTestsCond zBenchCondzAptzNotNullzUnwordsdefaultZrenderIOrender$fZinzaZ $fGenericZShMunShM FromShError fromShErrorShErrorShellCheckErrorMonadShsh'commentcommentedBlockShComment isCommentshrunSh$fExceptionShError$fFromShErrorShError $fMonadShShM$fMonadErrShErrorShM $fMonadShM$fApplicativeShM $fFunctorShM $fShowShError$fShowShcompilerVersionPredicatecompilerVersionArithPredicate$fShowRTestedWithJobsTestedWithUniform TestedWithAny checkVersions$fPrettyTestedWithJobs$fParsecTestedWithJobs$fEqTestedWithJobs$fShowTestedWithJobsEnvConfigcfgCabalInstallVersioncfgJobs cfgUbuntu cfgTestedWith cfgCopyFieldscfgLocalGhcOptions cfgSubmodulescfgCachecfgInstallDeps cfgInstalledcfgTests cfgRunTests cfgBenchmarks cfgHaddockcfgNoTestsNoBenchcfgUnconstraintedcfgHeadHackage cfgGhcjsTests cfgGhcjsToolscfgTestOutputDirectcfgCheckcfgOnlyBranchescfgIrcChannelscfgIrcIfInOriginRepocfgEmailNotificationscfgProjectNamecfgFolds cfgGhcHead cfgPostgrescfgGoogleChromecfgEnvcfgAllowFailurescfgLastInSeriescfgOsxcfgAptcfgTravisPatchescfgGitHubPatchescfgInsertVersioncfgErrorMissingMethods cfgDoctest cfgDocspeccfgHLintcfgConstraintSets cfgRawProject cfgRawTraviscfgGitHubActionNamedefaultHeadHackagedefaultCabalInstallVersion emptyConfig configGrammarreadConfigFileparseConfigFile parseName parseNameBS $fPrettyEnv $fParsecEnv$fNewtypeMapEnv$fGenericConfig JobVersionsversions osxVersionsomittedOsxVersions describeJobsmakeJobVersions Auxiliarypkgsuris projectNamedoctestEnableddocspecEnabledhasTests hasLibraryextraCabalProjectFieldstestShowDetails auxiliarypkgNameDirVariable'pkgNameDirVariabledoctestJobVersionRange doctestArgshlintJobVersionRange hlintArgsmakeBashhaskellCIVerStr dependencies InputTypeInputTypePackageInputTypeProject ConfigOpt ConfigOptAuto ConfigOptNoOutput OutputStdout OutputFileOptions optOutput optConfigoptCwd optInputTypeoptConfigMorphismCommand CommandTravis CommandBash CommandGitHubCommandRegenerateCommandListGHCCommandDumpConfigCommandVersionInfodefaultOptionsoptionsWithOutputFile optInputType'optionsP configOptPoutputPversionP inputTypeP cliParserInfo parseOptions$fSemigroupConfigOpt$fSemigroupOptions$fShowInputType $fEqConfigOpt$fShowConfigOpt $fShowCommandToYamltoYamlYamlYStringYBoolYList YKeyValuesYValuereann prettyYaml~>ykeyValuesFilt ylistFilt$fIsStringYaml $fToYamlMap $fToYamlValue $fToYaml[] $fToYamlBool $fToYamlYaml$fEqYaml $fShowYaml $fFunctorYaml$fFoldableYaml$fTraversableYamlTravisAllowFailure tafCompilerTravisAptSourceTravisAptSourceLine TravisApt taPackages taSources TravisAddonstaApt taPostgrestaGoogleChrome TravisJob tjCompilertjEnvtjAddonstjOS TravisMatrix tmIncludetmAllowFailures TravisIRC tiChannels tiSkipJoin tiTemplateTravisNotificationstnIRCtnEmailTravisBranchestbOnly TravisCache tcDirectories TravisGit tgSubmodulesTravis travisUbuntutravisLanguage travisGit travisCachetravisBranchestravisNotificationstravisServices travisAddons travisMatrixtravisBeforeCachetravisBeforeInstall travisInstall travisScript shListToYaml$fToYamlTravisGit$fToYamlTravisCache$fToYamlTravisBranches$fToYamlTravisIRC$fToYamlTravisNotifications$fToJSONTravisAptSource$fToJSONTravisApt$fToJSONTravisAddons$fToYamlTravisAddons$fToYamlTravisJob$fToYamlTravisAllowFailure$fToYamlTravisMatrix$fToYamlTravis $fShowTravis$fShowTravisMatrix$fShowTravisAllowFailure$fShowTravisJob$fShowTravisAddons$fShowTravisApt$fShowTravisAptSource$fShowTravisNotifications$fShowTravisIRC$fShowTravisBranches$fShowTravisCache$fShowTravisGit travisHeader makeTravis GitHubService ghServImage ghServEnv ghServOptions GitHubUses ghsActionghsIfghsWith GitHubRunghsRunghsEnv GitHubStepghsNameghsStepGitHubMatrixEntry ghmeCompilerghmeAllowFailure GitHubJobghjName ghjRunsOnghjNeedsghjIf ghjContainer ghjServicesghjContinueOnError ghjMatrixghjStepsGitHubOn ghBranchesGitHubghNameghOnghJobs notEmptyStep mapToYamlshlistToString$fToYamlGitHubOn$fToYamlGitHubMatrixEntry$fToYamlGitHubStep$fToYamlGitHubService$fToYamlGitHubJob$fToYamlGitHub $fShowGitHub$fShowGitHubJob$fShowGitHubService$fShowGitHubStep$fShowGitHubUses$fShowGitHubRun$fShowGitHubMatrixEntry$fShowGitHubOn githubHeader makeGitHubmaintravisFromConfigFilebashFromConfigFilegithubFromConfigFile