!af      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                            !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                       ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b!c!d"e""None 45679;MX-V haskell-ci;Render parse error highlighting the part of the input file.VVNone 45679;MX2X haskell-ci(Return the part after the first argumentafterInfix "BAR" "FOOBAR XYZZY" Just " XYZZY"Y haskell-ciafterPrefix "FOO" "FOOBAR" Just "BAR"Z haskell-ci4findMaybe readMaybe ["foo", "1", "bar"] :: Maybe IntJust 1[ haskell-ci"Whether two ranges are equivalent.Z &'(d)* +,-m. {zyx/cb^]\[01234567##$%l89;:9"!:;< !"=IL>?@ABCJKDOPQEFGHMNRTUVWXYZ_`aefghijknopqrstuvw|}~      $%&')(.-,+*20/1354876<=>@?ABCDEHGFJILKMNOPQRSTUWXYZ[Z &'(d)* +,-m. {zyx/cb^]\[0123457#$%l8;:9"!;< !"=IL>?@ABCJKDOPQEFGHMN_`aefghnqrstuvw|}~     $ 6#9:RTUVWXYZijkop %&')(.-,+*20/1354876<=>@?ABCDEHGFJILKMNOPQRSTUWXYZ[None 45679;MX?] haskell-ci!File fields to final value parser haskell-ci File to read]]None 45679;MX?^a`_^a`_None45679;=?@AMXFWu haskell-ciMore general version of t.x haskell-ciEThis 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.fghijklmnopqrstuvrspqmnoklijfghtuvNone 45679;MXGeSSNone&'45679;MXH3None45679;=?@ACMXI haskell-ci is  MonadError without catch None 45679;MSXJB None 45679;MXL haskell-ciA piece of a globbing pattern haskell-ci6A single directory or file component of a globbed path None 45679;MXM   None 45679;MXN None 45679;MXS 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 45679;MXY 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 45679;MXe[ haskell-cirun with latest GHC haskell-cirun with specified GHC version  None45679;=?@AMX\          None 45679;MX]$None 45679;MXe]#"! $%#"! $%None45679;=?@AMX^(+*),(+*),None 45679;MXe_v 45<;:9876=> 45<;:9876=>None 45679;MXbVV haskell-ciAlphas, RCs and HEAD.R haskell-ciPreferred Cabal Version haskell-ci GHC VersionV haskell-cihead.hackage rangeABCDEFGHJKILMNOPQRSTUVWHJKILMVABCDEFGNOPQSTURWNone 45679;MXc_`dcba_`dcbaNone 45679;MXefu haskell-ci-Parse project file. Extracts only few fields.Ofmap prjPackages $ parseProjectFile "cabal.project" "packages: foo bar/*.cabal"Right ["foo","bar/*.cabal"]hijklmnopqrstuhijklmnopqrstuNone 45679;@AMXk haskell-ci ShellCheck disagrees. haskell-cimade by . haskell-ciWrite shell command haskell-ci Write comment haskell-ciCommented block.CIf the block is empty (or comments only), nothing might be written. haskell-cicommand haskell-cicomment}~}~None 45679;MXrf haskell-ci+Round down a first version in major series.Mlet rd = map prettyShow . S.toList . roundDown . S.fromList . map C.mkVersionrd [][]rd [ [8,0,2] ]["8.0","8.0.3"]2rd [ [8,0,2], [8,2,2], [8,4,4], [8,6,5], [8,8,1] ]'["8.0","8.2","8.4","8.6","8.8","8.8.2"]2rd [ [8,6,1], [8,6,2], [8,6,3], [8,6,4], [8,6,5] ]/["8.6","8.6.2","8.6.3","8.6.4","8.6.5","8.6.6"]None 45679;MXs2None45679;=?@AMXet33None "#45679;MXw haskell-ciall jobs haskell-ciosx jobs: GHC onlyNone 45679;MXwNone 45679;MX} 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-jobsNone &'45679;MX haskell-ciEThis 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 h. 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"Qdemo $ YList "comment1" [YString "comment2" "foo", YString "comment3" "foo: bar"] # comment1# # comment2- foo # comment3 - "foo: bar"demo $ YKeyValues "" []{}Bdemo $ 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]edemo $ 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 bazGdemo $ YKeyValues "" [("", "keyA", multiline), ("", "keyB", multiline)]keyA: | foo bar bazkeyB: | foo bar baz   None"#45679;MXm< !"$#%&)('*+,-./01234567DCBA@?>=<;:98EFGHIJ<67DCBA@?>=<;:98345012-./*+,%&)('!"$# EFGHIJ!None"#$45679;MX1bccb"None45679;MX`e]g haskell-ciAdjust the generated Travis YAML output with patch files, if specified. We do this in a temporary file in case the user did not pass --output (as it would be awkward to patch the generated output otherwise). de deh#$%&'(#)*#)+#,-#./#.0#$1#$2#$3&'4#56#57#89#:;#:<#:=#:>&?@&?A#5B#$C#$D#$E#$F#GH#IJ#8K#8L#8M#8N#$O#$P#$Q#$R#$S#$T#$U#:V#:W&?X#YZ#8[#8\#$]#$^#5_&?`#ab#8c#Yd#8e#fg#Gh#Ii#$j#kl#mn#op#$q#$r&st&su&sv&sw&sxyz{#|}&s~#8&s&s#&s#|#|&s##&s&s&s&?&?&?&?&?&?&?&?&?&?####$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#5#5#5#5#5#.#.######)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#f#f#f#f#f#f#f#f#:#:#:#:#:#:#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8#8##### #Y #Y #Y #Y #Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y #Y!#Y"#Y##Y$#Y%#Y&#Y'#Y(#Y)#*+#a,#a-#a.#a/#0#12#13#45#46#47#48#49#4:#4;#k<#k=#k>#k?#k@#kA#kB#kC#kD#kE#kF#kG#kH#kI#kJ#kK#kL#kM#kN#kO#kP#QR#ST#SU#VW#SX#,Y#,Z#,[#,\#,]#,^#,_#,`#,a#,b#,c#,d#me#mf#ghijk#l#km#no#np#np#mq#mr#$s#1t#uv#wx#wy#wz#w{#|}#|~#|#|#|########Q#Q#Q#k#k#k#4#4#####                                                    ! " # $ % & ' ( ) * + , - . / 0 1 2 3456789:;<=>?@ABCBDDEFGHIJKLMNOPQRRSTUVWXYZ[\]^_`abcdefghijklmnopqrrstuvwxyz{|}~      !"#$$%&'()*+,--./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVW X X Y Z Z [ \ ] ] ^ _ ` a a b c d e f f g h i i j k l m m n o o p q q r s s t u u v w x y z { | } ~                                !!"""9haskell-ci-0.6-6aYnG4AHQzl5p7cVSBTD7c-haskell-ci-internalHaskellCI.PreludeHaskellCI.OptionsGrammarHaskellCI.ParsecErrorHaskellCI.ParsecUtilsHaskellCI.OptimizationHaskellCI.NewtypesHaskellCI.OptparseGrammarHaskellCI.MonadErrHaskellCI.ListHaskellCI.GlobHaskellCI.DiagnosticsHaskellCI.Config.UbuntuHaskellCI.Config.JobsHaskellCI.Config.InstalledHaskellCI.Config.HLintHaskellCI.Config.FoldsHaskellCI.Config.DumpHaskellCI.Config.DoctestHaskellCI.Config.CopyFieldsHaskellCI.Config.ConstraintSetHaskellCI.CompilerHaskellCI.PackageHaskellCI.Project HaskellCI.ShHaskellCI.ShVersionRangeHaskellCI.TestedWithHaskellCI.ConfigHaskellCI.Jobs HaskellCI.CliHaskellCI.ToolsHaskellCI.YamlSyntaxHaskellCI.Travis.YamlHaskellCI.Travis 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.TypesBoolCharDoubleFloatInt integer-gmpGHC.Integer.TypeInteger GHC.MaybeMaybeOrderingRationalIOWord Data.EitherEitherFalseNothingJustTrueLeftRightLTEQGTbytestring-0.10.8.2Data.ByteString.Internal ByteString$Cabal-3.0.0.0-Gy7jp3IKeIKC3g3Vs5T0x1Distribution.FieldGrammar^^^(Distribution.Types.VersionRange.Internal noVersion anyVersion VersionRangeDistribution.Types.Version mkVersionVersionDistribution.Parsec simpleParsecDistribution.Pretty prettyShowminmax><not||&&compare<=/=GHC.ErrerrorerrorWithoutStackTrace undefinedStringNonEmpty:|<|><*<$=<<whenapidconst.flip$!untilasTypeOf+*abssignumsubtractcurryuncurry Data.MaybemaybeisJust isNothing fromMaybemapMaybelastinitscanlscanl1scanrscanr1iteraterepeat replicatecycle takeWhile dropWhiletakedropsplitAtspanbreakreverselookup!!zip3zipWithzipWith3unzipunzip3 showsPrecshowshowListShowSshowsshowChar showString showParensuccpredtoEnumfromEnumminBoundmaxBoundproperFractiontruncateroundceilingfloor/recipquotremdivmodquotRemdivModevenodd^^^gcdlcm Data.Functor<$>void GHC.UnicodeisSpaceisUppertoLower floatRadix floatDigits floatRange decodeFloat encodeFloatexponent significand scaleFloatisNaN isInfiniteisDenormalizedisNegativeZeroisIEEEatan2piexplogsqrt**logBasesincostanasinacosatansinhcoshtanhasinhacoshatanhText.ParserCombinators.ReadPReadS readsPrecreadList readParenlexeither Text.Readreads readMaybe Data.OldList isPrefixOfnub intercalatelinesunlineswordsunwordsfoldMapfoldrfoldlfoldl'nulllengthelemmaximumminimumsumproduct traverse_for_ sequence_concat concatMapandoranyallnotElemGHC.Exception.TypedisplayExceptionGHC.IO.ExceptionIOError userErrorGHC.IOFilePathioErrorputCharputStrputStrLngetChargetLine getContentsinteractreadFile writeFile appendFilereadLnreadIOtraverse sequenceA Control.Monadunlesscontainers-0.6.0.1Data.Set.InternalSet<&>mapM_Data.Functor.Identity runIdentityIdentitysequencemapMliftA2read Data.VoidVoidData.BitraversablebifoldMapDefault bimapDefault bitraverse BitraversableData.Bifoldablebifoldlbifoldr bifoldMapbifold BifoldableData.Bifunctorsecondfirstbimap BifunctorData.List.NonEmptygroupByControl.Monad.IO.ClassliftIOMonadIO fromException toException ExceptiontoListfoldl1foldr1tails stripPrefixpartitionEithers Data.ProxyProxy Data.Function&on(exceptions-0.10.3-JCVBmzxJmVzJ5RaoaWAPCEControl.Monad.Catch MonadThrow MonadCatch MonadMask%lattices-2.0.1-6wJavo2wMn7ITSL5UxZYFzAlgebra.Lattice/\\/LatticebottomBoundedJoinSemiLatticetopBoundedMeetSemiLatticeBoundedLattice)microlens-0.4.11.2-Ecy0HNwIglV6pyNsLPomsR Lens.Micro^..^.mapped.~over*network-uri-2.6.1.0-K75fCYvLQE41EntOQ30cqK Network.URI uriToStringparseURIURIrenderParseErrorhead afterInfix afterPrefix findMaybeequivVersionRanges$fLatticeVersionRangereadAndParseFile OptimizationOptimizationOnOptimizationOffOptimizationLevel$fPrettyOptimization$fParsecOptimization$fEqOptimization$fShowOptimizationAlaSet getAlaSetRangeInt' HeadVersiongetHeadVersionNoCommasPackageLocationalaSetalaSet'hack$fPrettyPackageLocation$fParsecPackageLocation$fPrettyNoCommas$fParsecNoCommas$fPrettyHeadVersion$fParsecHeadVersion $fPrettyInt' $fParsecInt' $fPrettyRange $fParsecRange$fPrettyAlaSet$fParsecAlaSet$fNewtypePackageLocation$fNewtypeNoCommas$fNewtypeHeadVersion $fNewtypeInt'$fNewtypeRange$fNewtypeAlaSetOptionsGrammarmetahelphelp rangeField"$fOptionsGrammarParsecFieldGrammarOptparseGrammarrunOptparseGrammar$fOptionsGrammarOptparseGrammar$fFieldGrammarOptparseGrammar$fApplicativeOptparseGrammar$fFunctorOptparseGrammarMonadErrthrowErr$fMonadErreEither ListBuilder buildListitem$fMonadListBuilder$fApplicativeListBuilder$fFunctorListBuilder FilePathRootFilePathRelativeFilePathHomeDir GlobPieceWildCardLiteralUnionGlobFilePathGlobRelGlobDirGlobFileGlobDirTrailing FilePathGlobparseFilePathGlobRel parseGlobisGlobEscapedChar expandRelGlob matchGlob $fEqGlobPiece$fShowGlobPiece$fEqFilePathGlobRel$fShowFilePathGlobRel$fEqFilePathRoot$fShowFilePathRoot$fEqFilePathGlob$fShowFilePathGlob DiagnosticsT Diagnostics unDiagnosticsMonadDiagnostics putStrLnErr putStrLnErrs putStrLnWarn putStrLnInforunDiagnosticsT$fMonadDiagnosticsIO$fMonadDiagnosticsDiagnosticsT$fFunctorDiagnosticsT$fApplicativeDiagnosticsT$fMonadDiagnosticsT$fMonadIODiagnosticsT$fMonadCatchDiagnosticsT$fMonadMaskDiagnosticsT$fMonadThrowDiagnosticsTUbuntuXenialBionic showUbuntu$fPrettyUbuntu$fParsecUbuntu $fEqUbuntu $fOrdUbuntu $fShowUbuntuJobs CabalJobsGhcJobsBothJobs cabalJobsghcJobs $fPrettyJobs $fParsecJobs $fShowJobsInstalledNormalised InstalledDiff InstalledOnly Installed InstalledAll InstalledNoneAddRemovenormaliseInstalled$fParsecInstalled$fPrettyInstalled $fEqInstalled$fShowInstalled$fShowInstalledNormalisedHLintJobHLintJobLatest HLintConfigcfgHLintEnabled cfgHLintJob cfgHLintYamlcfgHLintOptionscfgHLintVersiondefaultHLintVersionhlintConfigGrammar$fPrettyHLintJob$fParsecHLintJob $fEqHLintJob$fShowHLintJob$fShowHLintConfig$fGenericHLintConfigFoldsgetFoldsFold FoldSDist FoldUnpack FoldBuildFoldBuildInstalledFoldBuildEverythingFoldTest FoldHaddock FoldStackage FoldCheck FoldDoctest FoldHLintFoldConstraintSetsshowFold possibleFolds $fPrettyFolds $fParsecFolds$fEqFold $fOrdFold $fShowFold $fEnumFold $fBoundedFold$fNewtypeFolds DumpGrammarDGrunDG$fOptionsGrammarDumpGrammar$fFieldGrammarDumpGrammar$fApplicativeDumpGrammar$fFunctorDumpGrammar DoctestConfigcfgDoctestEnabledcfgDoctestOptionscfgDoctestVersioncfgDoctestFilterPkgsdefaultDoctestVersiondoctestConfigGrammar$fShowDoctestConfig$fGenericDoctestConfig CopyFieldsCopyFieldsNoneCopyFieldsSome CopyFieldsAllshowCopyFields$fParsecCopyFields$fPrettyCopyFields$fEqCopyFields$fOrdCopyFields$fShowCopyFields$fEnumCopyFields$fBoundedCopyFields ConstraintSetcsName csGhcVersions csConstraintscsTests csRunTests csBenchmarks csHaddockemptyConstraintSetconstraintSetGrammar$fShowConstraintSet$fGenericConstraintSet CompilerRangeRangeGHC RangeGHCJS RangePoints RangeInter RangeUnionCompilerVersionGHCHeadGHCGHCJSmaybeGHCisGHCJScompilerWithinRangeinvertCompilerRangeknownGhcVersionsknownGhcjsVersionscorrespondingCabalVersiondispGhcVersiondispGhcVersionShortdispCabalVersion previewGHC ghcMajVer%$fBoundedMeetSemiLatticeCompilerRange%$fBoundedJoinSemiLatticeCompilerRange$fLatticeCompilerRange$fEqCompilerVersion$fOrdCompilerVersion$fShowCompilerVersion$fShowCompilerRangePackagePkgpkgNamepkgJobspkgDirpkgGpd $fEqPackage $fShowPackage$fGenericPackageProject prjPackagesprjOptPackagesprjUriPackagesprjConstraints prjAllowNewerprjReorderGoalsprjMaxBackjumpsprjOptimizationprjSourceRepos prjOrigFields emptyProjectparseProjectFile$fBitraversableProject$fBifoldableProject$fBifunctorProject$fFunctorProject$fFoldableProject$fTraversableProject$fGenericProjectShMunShM FromShError fromShErrorShErrorShellCheckErrorMonadShsh'commentcommentedBlockShComment isCommentshrunSh$fExceptionShError$fFromShErrorShError $fMonadShShM$fMonadErrShErrorShM $fMonadShM$fApplicativeShM$fShowSh $fShowShError $fFunctorShMcompilerVersionPredicate$fShowRTestedWithJobsTestedWithUniform TestedWithAny checkVersions$fPrettyTestedWithJobs$fParsecTestedWithJobs$fEqTestedWithJobs$fShowTestedWithJobsEnvConfigcfgCabalInstallVersioncfgJobs cfgUbuntu cfgTestedWith cfgCopyFieldscfgLocalGhcOptions cfgSubmodulescfgCachecfgInstallDeps cfgInstalledcfgTests cfgRunTests cfgBenchmarks cfgHaddockcfgNoTestsNoBenchcfgUnconstraintedcfgHeadHackage cfgGhcjsTests cfgGhcjsToolscfgCheckcfgOnlyBranchescfgIrcChannelscfgProjectNamecfgFolds cfgGhcHead cfgPostgrescfgGoogleChromecfgEnvcfgAllowFailurescfgLastInSeriescfgOsxcfgAptcfgTravisPatchescfgInsertVersioncfgColor cfgDoctestcfgHLintcfgConstraintSets cfgRawProjectdefaultHeadHackagedefaultCabalInstallVersion emptyConfig configGrammarreadConfigFileparseConfigFile parseName parseNameBS $fPrettyEnv $fParsecEnv$fGenericConfig $fNewtypeEnv JobVersionsversions osxVersionsomittedOsxVersions describeJobsmakeJobVersionsOutput OutputStdout OutputFileOptions optOutput optConfigoptConfigMorphismCommand CommandTravisCommandRegenerateCommandListGHCCommandDumpConfigdefaultOptionsoptionsWithOutputFileoptionsPoutputPversionPhaskellCIVerStr cliParserInfo parseTravis$fSemigroupOptions $fShowCommanddoctestJobVersionRange doctestArgshlintJobVersionRange hlintArgsToYamltoYamlYamlYStringYBoolYList YKeyValuesYValuereann prettyYaml$fIsStringYaml $fToYamlValue $fToYaml[] $fToYamlBool $fToYamlYaml$fEqYaml $fShowYaml $fFunctorYaml$fFoldableYaml$fTraversableYamlTravisAllowFailure tafCompiler TravisApt taPackages taSources TravisAddonstaApt taPostgrestaGoogleChrome TravisJob tjCompilertjEnvtjAddonstjOS TravisMatrix tmIncludetmAllowFailures TravisIRC tiChannels tiSkipJoin tiTemplateTravisNotificationstnIRCTravisBranchestbOnly TravisCache tcDirectories TravisGit tgSubmodulesTravis travisUbuntutravisLanguage travisGit travisCachetravisBranchestravisNotificationstravisServices travisAddons travisMatrixtravisBeforeCachetravisBeforeInstall travisInstall travisScript~> shListToYamlykeyValuesFilt ylistFiltisEmpty$fToYamlTravisGit$fToYamlTravisCache$fToYamlTravisBranches$fToYamlTravisIRC$fToYamlTravisNotifications$fToJSONTravisApt$fToJSONTravisAddons$fToYamlTravisAddons$fToYamlTravisJob$fToYamlTravisAllowFailure$fToYamlTravisMatrix$fToYamlTravis$fShowTravisGit$fShowTravisCache$fShowTravisBranches$fShowTravisIRC$fShowTravisNotifications$fShowTravisApt$fShowTravisAddons$fShowTravisJob$fShowTravisAllowFailure$fShowTravisMatrix $fShowTravis travisHeader makeTravismaintravisFromConfigFile roundDown patchTravis