packages feed

language-docker 14.0.1 → 15.0.0

raw patch · 8 files changed

+179/−71 lines, 8 filesnew-uploaderPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Language.Docker: [$sel:alias:BaseImage] :: BaseImage -> !Maybe ImageAlias
- Language.Docker: [$sel:checkCommand:CheckArgs] :: CheckArgs args -> !Arguments args
- Language.Docker: [$sel:digest:BaseImage] :: BaseImage -> !Maybe Digest
- Language.Docker: [$sel:image:BaseImage] :: BaseImage -> !Image
- Language.Docker: [$sel:imageName:Image] :: Image -> !Text
- Language.Docker: [$sel:instruction:InstructionPos] :: InstructionPos args -> !Instruction args
- Language.Docker: [$sel:interval:CheckArgs] :: CheckArgs args -> !Maybe Duration
- Language.Docker: [$sel:lineNumber:InstructionPos] :: InstructionPos args -> !Linenumber
- Language.Docker: [$sel:platform:BaseImage] :: BaseImage -> !Maybe Platform
- Language.Docker: [$sel:registryName:Image] :: Image -> !Maybe Registry
- Language.Docker: [$sel:retries:CheckArgs] :: CheckArgs args -> !Maybe Retries
- Language.Docker: [$sel:sourcePaths:AddArgs] :: AddArgs -> NonEmpty SourcePath
- Language.Docker: [$sel:sourcePaths:CopyArgs] :: CopyArgs -> NonEmpty SourcePath
- Language.Docker: [$sel:sourcename:InstructionPos] :: InstructionPos args -> !Filename
- Language.Docker: [$sel:startInterval:CheckArgs] :: CheckArgs args -> !Maybe Duration
- Language.Docker: [$sel:startPeriod:CheckArgs] :: CheckArgs args -> !Maybe Duration
- Language.Docker: [$sel:tag:BaseImage] :: BaseImage -> !Maybe Tag
- Language.Docker: [$sel:targetPath:AddArgs] :: AddArgs -> !TargetPath
- Language.Docker: [$sel:targetPath:CopyArgs] :: CopyArgs -> !TargetPath
- Language.Docker: [$sel:timeout:CheckArgs] :: CheckArgs args -> !Maybe Duration
- Language.Docker: [$sel:unDigest:Digest] :: Digest -> Text
- Language.Docker: [$sel:unImageAlias:ImageAlias] :: ImageAlias -> Text
- Language.Docker: [$sel:unRegistry:Registry] :: Registry -> Text
- Language.Docker: [$sel:unSourcePath:SourcePath] :: SourcePath -> Text
- Language.Docker: [$sel:unTag:Tag] :: Tag -> Text
- Language.Docker: [$sel:unTargetPath:TargetPath] :: TargetPath -> Text
- Language.Docker.PrettyPrint: [$sel:buffer:EscapeAccum] :: EscapeAccum -> !Builder
- Language.Docker.PrettyPrint: [$sel:count:EscapeAccum] :: EscapeAccum -> !Int
- Language.Docker.PrettyPrint: [$sel:escaping:EscapeAccum] :: EscapeAccum -> !Bool
- Language.Docker.Syntax: [$sel:alias:BaseImage] :: BaseImage -> !Maybe ImageAlias
- Language.Docker.Syntax: [$sel:bFromImage:BindOpts] :: BindOpts -> !Maybe Text
- Language.Docker.Syntax: [$sel:bReadOnly:BindOpts] :: BindOpts -> !Maybe Bool
- Language.Docker.Syntax: [$sel:bSource:BindOpts] :: BindOpts -> !Maybe SourcePath
- Language.Docker.Syntax: [$sel:bTarget:BindOpts] :: BindOpts -> !TargetPath
- Language.Docker.Syntax: [$sel:cCacheId:CacheOpts] :: CacheOpts -> !Maybe Text
- Language.Docker.Syntax: [$sel:cFromImage:CacheOpts] :: CacheOpts -> !Maybe Text
- Language.Docker.Syntax: [$sel:cGid:CacheOpts] :: CacheOpts -> !Maybe Text
- Language.Docker.Syntax: [$sel:cMode:CacheOpts] :: CacheOpts -> !Maybe Text
- Language.Docker.Syntax: [$sel:cReadOnly:CacheOpts] :: CacheOpts -> !Maybe Bool
- Language.Docker.Syntax: [$sel:cSharing:CacheOpts] :: CacheOpts -> !Maybe CacheSharing
- Language.Docker.Syntax: [$sel:cSource:CacheOpts] :: CacheOpts -> !Maybe SourcePath
- Language.Docker.Syntax: [$sel:cTarget:CacheOpts] :: CacheOpts -> !TargetPath
- Language.Docker.Syntax: [$sel:cUid:CacheOpts] :: CacheOpts -> !Maybe Text
- Language.Docker.Syntax: [$sel:checkCommand:CheckArgs] :: CheckArgs args -> !Arguments args
- Language.Docker.Syntax: [$sel:checksumFlag:AddFlags] :: AddFlags -> !Checksum
- Language.Docker.Syntax: [$sel:chmodFlag:AddFlags] :: AddFlags -> !Chmod
- Language.Docker.Syntax: [$sel:chmodFlag:CopyFlags] :: CopyFlags -> !Chmod
- Language.Docker.Syntax: [$sel:chownFlag:AddFlags] :: AddFlags -> !Chown
- Language.Docker.Syntax: [$sel:chownFlag:CopyFlags] :: CopyFlags -> !Chown
- Language.Docker.Syntax: [$sel:digest:BaseImage] :: BaseImage -> !Maybe Digest
- Language.Docker.Syntax: [$sel:durationTime:Duration] :: Duration -> DiffTime
- Language.Docker.Syntax: [$sel:escape:EscapeChar] :: EscapeChar -> Char
- Language.Docker.Syntax: [$sel:excludeFlags:AddFlags] :: AddFlags -> ![Exclude]
- Language.Docker.Syntax: [$sel:excludeFlags:CopyFlags] :: CopyFlags -> ![Exclude]
- Language.Docker.Syntax: [$sel:image:BaseImage] :: BaseImage -> !Image
- Language.Docker.Syntax: [$sel:imageName:Image] :: Image -> !Text
- Language.Docker.Syntax: [$sel:instruction:InstructionPos] :: InstructionPos args -> !Instruction args
- Language.Docker.Syntax: [$sel:interval:CheckArgs] :: CheckArgs args -> !Maybe Duration
- Language.Docker.Syntax: [$sel:lineNumber:InstructionPos] :: InstructionPos args -> !Linenumber
- Language.Docker.Syntax: [$sel:linkFlag:AddFlags] :: AddFlags -> !Link
- Language.Docker.Syntax: [$sel:linkFlag:CopyFlags] :: CopyFlags -> !Link
- Language.Docker.Syntax: [$sel:mount:RunFlags] :: RunFlags -> !Set RunMount
- Language.Docker.Syntax: [$sel:network:RunFlags] :: RunFlags -> !Maybe RunNetwork
- Language.Docker.Syntax: [$sel:platform:BaseImage] :: BaseImage -> !Maybe Platform
- Language.Docker.Syntax: [$sel:registryName:Image] :: Image -> !Maybe Registry
- Language.Docker.Syntax: [$sel:retries:CheckArgs] :: CheckArgs args -> !Maybe Retries
- Language.Docker.Syntax: [$sel:sCacheId:SecretOpts] :: SecretOpts -> !Maybe Text
- Language.Docker.Syntax: [$sel:sEnv:SecretOpts] :: SecretOpts -> !Maybe Text
- Language.Docker.Syntax: [$sel:sGid:SecretOpts] :: SecretOpts -> !Maybe Text
- Language.Docker.Syntax: [$sel:sIsRequired:SecretOpts] :: SecretOpts -> !Maybe Bool
- Language.Docker.Syntax: [$sel:sMode:SecretOpts] :: SecretOpts -> !Maybe Text
- Language.Docker.Syntax: [$sel:sSource:SecretOpts] :: SecretOpts -> !Maybe SourcePath
- Language.Docker.Syntax: [$sel:sTarget:SecretOpts] :: SecretOpts -> !Maybe TargetPath
- Language.Docker.Syntax: [$sel:sUid:SecretOpts] :: SecretOpts -> !Maybe Text
- Language.Docker.Syntax: [$sel:security:RunFlags] :: RunFlags -> !Maybe RunSecurity
- Language.Docker.Syntax: [$sel:sourceFlag:CopyFlags] :: CopyFlags -> !CopySource
- Language.Docker.Syntax: [$sel:sourcePaths:AddArgs] :: AddArgs -> NonEmpty SourcePath
- Language.Docker.Syntax: [$sel:sourcePaths:CopyArgs] :: CopyArgs -> NonEmpty SourcePath
- Language.Docker.Syntax: [$sel:sourcename:InstructionPos] :: InstructionPos args -> !Filename
- Language.Docker.Syntax: [$sel:startInterval:CheckArgs] :: CheckArgs args -> !Maybe Duration
- Language.Docker.Syntax: [$sel:startPeriod:CheckArgs] :: CheckArgs args -> !Maybe Duration
- Language.Docker.Syntax: [$sel:syntax:SyntaxImage] :: SyntaxImage -> Image
- Language.Docker.Syntax: [$sel:tTarget:TmpOpts] :: TmpOpts -> TargetPath
- Language.Docker.Syntax: [$sel:tag:BaseImage] :: BaseImage -> !Maybe Tag
- Language.Docker.Syntax: [$sel:targetPath:AddArgs] :: AddArgs -> !TargetPath
- Language.Docker.Syntax: [$sel:targetPath:CopyArgs] :: CopyArgs -> !TargetPath
- Language.Docker.Syntax: [$sel:timeout:CheckArgs] :: CheckArgs args -> !Maybe Duration
- Language.Docker.Syntax: [$sel:times:Retries] :: Retries -> Int
- Language.Docker.Syntax: [$sel:unDigest:Digest] :: Digest -> Text
- Language.Docker.Syntax: [$sel:unExclude:Exclude] :: Exclude -> Text
- Language.Docker.Syntax: [$sel:unImageAlias:ImageAlias] :: ImageAlias -> Text
- Language.Docker.Syntax: [$sel:unPorts:Ports] :: Ports -> [PortSpec]
- Language.Docker.Syntax: [$sel:unRegistry:Registry] :: Registry -> Text
- Language.Docker.Syntax: [$sel:unSourcePath:SourcePath] :: SourcePath -> Text
- Language.Docker.Syntax: [$sel:unTag:Tag] :: Tag -> Text
- Language.Docker.Syntax: [$sel:unTargetPath:TargetPath] :: TargetPath -> Text
- Language.Docker.Syntax: instance Data.String.IsString (Language.Docker.Syntax.Arguments Data.Text.Internal.Text)
- Language.Docker.Syntax: instance Data.String.IsString (Language.Docker.Syntax.RunArgs Data.Text.Internal.Text)
- Language.Docker.Syntax: instance Data.String.IsString Language.Docker.Syntax.Checksum
- Language.Docker.Syntax: instance Data.String.IsString Language.Docker.Syntax.Chmod
- Language.Docker.Syntax: instance Data.String.IsString Language.Docker.Syntax.Chown
- Language.Docker.Syntax: instance Data.String.IsString Language.Docker.Syntax.CopySource
- Language.Docker.Syntax: instance Data.String.IsString Language.Docker.Syntax.Digest
- Language.Docker.Syntax: instance Data.String.IsString Language.Docker.Syntax.Exclude
- Language.Docker.Syntax: instance Data.String.IsString Language.Docker.Syntax.Image
- Language.Docker.Syntax: instance Data.String.IsString Language.Docker.Syntax.ImageAlias
- Language.Docker.Syntax: instance Data.String.IsString Language.Docker.Syntax.Registry
- Language.Docker.Syntax: instance Data.String.IsString Language.Docker.Syntax.SourcePath
- Language.Docker.Syntax: instance Data.String.IsString Language.Docker.Syntax.Tag
- Language.Docker.Syntax: instance Data.String.IsString Language.Docker.Syntax.TargetPath
- Language.Docker.Syntax: instance GHC.Base.Functor Language.Docker.Syntax.Arguments
- Language.Docker.Syntax: instance GHC.Base.Functor Language.Docker.Syntax.Check
- Language.Docker.Syntax: instance GHC.Base.Functor Language.Docker.Syntax.CheckArgs
- Language.Docker.Syntax: instance GHC.Base.Functor Language.Docker.Syntax.Instruction
- Language.Docker.Syntax: instance GHC.Base.Functor Language.Docker.Syntax.InstructionPos
- Language.Docker.Syntax: instance GHC.Base.Functor Language.Docker.Syntax.RunArgs
- Language.Docker.Syntax: instance GHC.IsList.IsList (Language.Docker.Syntax.Arguments Data.Text.Internal.Text)
- Language.Docker.Syntax: instance GHC.IsList.IsList Language.Docker.Syntax.Ports
- Language.Docker.Syntax: instance GHC.Num.Num Language.Docker.Syntax.Duration
- Language.Docker.Syntax: instance GHC.Num.Num Language.Docker.Syntax.Retries
- Language.Docker.Syntax: instance GHC.Real.Fractional Language.Docker.Syntax.Duration
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.AddArgs
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.AddFlags
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.BaseImage
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.BindOpts
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.CacheOpts
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.CacheSharing
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.Checksum
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.Chmod
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.Chown
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.CopyArgs
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.CopyFlags
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.CopySource
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.Digest
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.Duration
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.EscapeChar
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.Exclude
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.Image
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.ImageAlias
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.Link
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.PortSpec
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.Ports
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.PragmaDirective
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.Registry
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.Retries
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.RunFlags
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.RunMount
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.RunNetwork
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.RunSecurity
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.SecretOpts
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.SourcePath
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.SyntaxImage
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.Tag
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.TargetPath
- Language.Docker.Syntax: instance GHC.Show.Show Language.Docker.Syntax.TmpOpts
- Language.Docker.Syntax: instance GHC.Show.Show args => GHC.Show.Show (Language.Docker.Syntax.Arguments args)
- Language.Docker.Syntax: instance GHC.Show.Show args => GHC.Show.Show (Language.Docker.Syntax.Check args)
- Language.Docker.Syntax: instance GHC.Show.Show args => GHC.Show.Show (Language.Docker.Syntax.CheckArgs args)
- Language.Docker.Syntax: instance GHC.Show.Show args => GHC.Show.Show (Language.Docker.Syntax.Instruction args)
- Language.Docker.Syntax: instance GHC.Show.Show args => GHC.Show.Show (Language.Docker.Syntax.InstructionPos args)
- Language.Docker.Syntax: instance GHC.Show.Show args => GHC.Show.Show (Language.Docker.Syntax.RunArgs args)
+ Language.Docker: [alias] :: BaseImage -> !Maybe ImageAlias
+ Language.Docker: [checkCommand] :: CheckArgs args -> !Arguments args
+ Language.Docker: [digest] :: BaseImage -> !Maybe Digest
+ Language.Docker: [imageName] :: Image -> !Text
+ Language.Docker: [image] :: BaseImage -> !Image
+ Language.Docker: [instruction] :: InstructionPos args -> !Instruction args
+ Language.Docker: [interval] :: CheckArgs args -> !Maybe Duration
+ Language.Docker: [lineNumber] :: InstructionPos args -> !Linenumber
+ Language.Docker: [platform] :: BaseImage -> !Maybe Platform
+ Language.Docker: [registryName] :: Image -> !Maybe Registry
+ Language.Docker: [retries] :: CheckArgs args -> !Maybe Retries
+ Language.Docker: [sourcePaths] :: AddArgs -> NonEmpty SourcePath
+ Language.Docker: [sourcename] :: InstructionPos args -> !Filename
+ Language.Docker: [startInterval] :: CheckArgs args -> !Maybe Duration
+ Language.Docker: [startPeriod] :: CheckArgs args -> !Maybe Duration
+ Language.Docker: [tag] :: BaseImage -> !Maybe Tag
+ Language.Docker: [targetPath] :: AddArgs -> !TargetPath
+ Language.Docker: [timeout] :: CheckArgs args -> !Maybe Duration
+ Language.Docker: [unDigest] :: Digest -> Text
+ Language.Docker: [unImageAlias] :: ImageAlias -> Text
+ Language.Docker: [unRegistry] :: Registry -> Text
+ Language.Docker: [unSourcePath] :: SourcePath -> Text
+ Language.Docker: [unTag] :: Tag -> Text
+ Language.Docker: [unTargetPath] :: TargetPath -> Text
+ Language.Docker.PrettyPrint: [buffer] :: EscapeAccum -> !Builder
+ Language.Docker.PrettyPrint: [count] :: EscapeAccum -> !Int
+ Language.Docker.PrettyPrint: [escaping] :: EscapeAccum -> !Bool
+ Language.Docker.Syntax: RelabelPrivate :: Relabel
+ Language.Docker.Syntax: RelabelShared :: Relabel
+ Language.Docker.Syntax: [alias] :: BaseImage -> !Maybe ImageAlias
+ Language.Docker.Syntax: [bFromImage] :: BindOpts -> !Maybe Text
+ Language.Docker.Syntax: [bReadOnly] :: BindOpts -> !Maybe Bool
+ Language.Docker.Syntax: [bRelabel] :: BindOpts -> !Maybe Relabel
+ Language.Docker.Syntax: [bSource] :: BindOpts -> !Maybe SourcePath
+ Language.Docker.Syntax: [bTarget] :: BindOpts -> !TargetPath
+ Language.Docker.Syntax: [cCacheId] :: CacheOpts -> !Maybe Text
+ Language.Docker.Syntax: [cFromImage] :: CacheOpts -> !Maybe Text
+ Language.Docker.Syntax: [cGid] :: CacheOpts -> !Maybe Text
+ Language.Docker.Syntax: [cMode] :: CacheOpts -> !Maybe Text
+ Language.Docker.Syntax: [cReadOnly] :: CacheOpts -> !Maybe Bool
+ Language.Docker.Syntax: [cSharing] :: CacheOpts -> !Maybe CacheSharing
+ Language.Docker.Syntax: [cSource] :: CacheOpts -> !Maybe SourcePath
+ Language.Docker.Syntax: [cTarget] :: CacheOpts -> !TargetPath
+ Language.Docker.Syntax: [cUid] :: CacheOpts -> !Maybe Text
+ Language.Docker.Syntax: [checkCommand] :: CheckArgs args -> !Arguments args
+ Language.Docker.Syntax: [checksumFlag] :: AddFlags -> !Checksum
+ Language.Docker.Syntax: [chmodFlag] :: AddFlags -> !Chmod
+ Language.Docker.Syntax: [chownFlag] :: AddFlags -> !Chown
+ Language.Docker.Syntax: [digest] :: BaseImage -> !Maybe Digest
+ Language.Docker.Syntax: [durationTime] :: Duration -> DiffTime
+ Language.Docker.Syntax: [escape] :: EscapeChar -> Char
+ Language.Docker.Syntax: [excludeFlags] :: AddFlags -> ![Exclude]
+ Language.Docker.Syntax: [imageName] :: Image -> !Text
+ Language.Docker.Syntax: [image] :: BaseImage -> !Image
+ Language.Docker.Syntax: [instruction] :: InstructionPos args -> !Instruction args
+ Language.Docker.Syntax: [interval] :: CheckArgs args -> !Maybe Duration
+ Language.Docker.Syntax: [lineNumber] :: InstructionPos args -> !Linenumber
+ Language.Docker.Syntax: [linkFlag] :: AddFlags -> !Link
+ Language.Docker.Syntax: [mount] :: RunFlags -> !Set RunMount
+ Language.Docker.Syntax: [network] :: RunFlags -> !Maybe RunNetwork
+ Language.Docker.Syntax: [platform] :: BaseImage -> !Maybe Platform
+ Language.Docker.Syntax: [registryName] :: Image -> !Maybe Registry
+ Language.Docker.Syntax: [retries] :: CheckArgs args -> !Maybe Retries
+ Language.Docker.Syntax: [sCacheId] :: SecretOpts -> !Maybe Text
+ Language.Docker.Syntax: [sEnv] :: SecretOpts -> !Maybe Text
+ Language.Docker.Syntax: [sGid] :: SecretOpts -> !Maybe Text
+ Language.Docker.Syntax: [sIsRequired] :: SecretOpts -> !Maybe Bool
+ Language.Docker.Syntax: [sMode] :: SecretOpts -> !Maybe Text
+ Language.Docker.Syntax: [sSource] :: SecretOpts -> !Maybe SourcePath
+ Language.Docker.Syntax: [sTarget] :: SecretOpts -> !Maybe TargetPath
+ Language.Docker.Syntax: [sUid] :: SecretOpts -> !Maybe Text
+ Language.Docker.Syntax: [security] :: RunFlags -> !Maybe RunSecurity
+ Language.Docker.Syntax: [sourceFlag] :: CopyFlags -> !CopySource
+ Language.Docker.Syntax: [sourcePaths] :: AddArgs -> NonEmpty SourcePath
+ Language.Docker.Syntax: [sourcename] :: InstructionPos args -> !Filename
+ Language.Docker.Syntax: [startInterval] :: CheckArgs args -> !Maybe Duration
+ Language.Docker.Syntax: [startPeriod] :: CheckArgs args -> !Maybe Duration
+ Language.Docker.Syntax: [syntax] :: SyntaxImage -> Image
+ Language.Docker.Syntax: [tTarget] :: TmpOpts -> TargetPath
+ Language.Docker.Syntax: [tag] :: BaseImage -> !Maybe Tag
+ Language.Docker.Syntax: [targetPath] :: AddArgs -> !TargetPath
+ Language.Docker.Syntax: [timeout] :: CheckArgs args -> !Maybe Duration
+ Language.Docker.Syntax: [times] :: Retries -> Int
+ Language.Docker.Syntax: [unDigest] :: Digest -> Text
+ Language.Docker.Syntax: [unExclude] :: Exclude -> Text
+ Language.Docker.Syntax: [unImageAlias] :: ImageAlias -> Text
+ Language.Docker.Syntax: [unPorts] :: Ports -> [PortSpec]
+ Language.Docker.Syntax: [unRegistry] :: Registry -> Text
+ Language.Docker.Syntax: [unSourcePath] :: SourcePath -> Text
+ Language.Docker.Syntax: [unTag] :: Tag -> Text
+ Language.Docker.Syntax: [unTargetPath] :: TargetPath -> Text
+ Language.Docker.Syntax: data Relabel
+ Language.Docker.Syntax: instance GHC.Classes.Eq Language.Docker.Syntax.Relabel
+ Language.Docker.Syntax: instance GHC.Classes.Ord Language.Docker.Syntax.Relabel
+ Language.Docker.Syntax: instance GHC.Internal.Base.Functor Language.Docker.Syntax.Arguments
+ Language.Docker.Syntax: instance GHC.Internal.Base.Functor Language.Docker.Syntax.Check
+ Language.Docker.Syntax: instance GHC.Internal.Base.Functor Language.Docker.Syntax.CheckArgs
+ Language.Docker.Syntax: instance GHC.Internal.Base.Functor Language.Docker.Syntax.Instruction
+ Language.Docker.Syntax: instance GHC.Internal.Base.Functor Language.Docker.Syntax.InstructionPos
+ Language.Docker.Syntax: instance GHC.Internal.Base.Functor Language.Docker.Syntax.RunArgs
+ Language.Docker.Syntax: instance GHC.Internal.Data.String.IsString (Language.Docker.Syntax.Arguments Data.Text.Internal.Text)
+ Language.Docker.Syntax: instance GHC.Internal.Data.String.IsString (Language.Docker.Syntax.RunArgs Data.Text.Internal.Text)
+ Language.Docker.Syntax: instance GHC.Internal.Data.String.IsString Language.Docker.Syntax.Checksum
+ Language.Docker.Syntax: instance GHC.Internal.Data.String.IsString Language.Docker.Syntax.Chmod
+ Language.Docker.Syntax: instance GHC.Internal.Data.String.IsString Language.Docker.Syntax.Chown
+ Language.Docker.Syntax: instance GHC.Internal.Data.String.IsString Language.Docker.Syntax.CopySource
+ Language.Docker.Syntax: instance GHC.Internal.Data.String.IsString Language.Docker.Syntax.Digest
+ Language.Docker.Syntax: instance GHC.Internal.Data.String.IsString Language.Docker.Syntax.Exclude
+ Language.Docker.Syntax: instance GHC.Internal.Data.String.IsString Language.Docker.Syntax.Image
+ Language.Docker.Syntax: instance GHC.Internal.Data.String.IsString Language.Docker.Syntax.ImageAlias
+ Language.Docker.Syntax: instance GHC.Internal.Data.String.IsString Language.Docker.Syntax.Registry
+ Language.Docker.Syntax: instance GHC.Internal.Data.String.IsString Language.Docker.Syntax.SourcePath
+ Language.Docker.Syntax: instance GHC.Internal.Data.String.IsString Language.Docker.Syntax.Tag
+ Language.Docker.Syntax: instance GHC.Internal.Data.String.IsString Language.Docker.Syntax.TargetPath
+ Language.Docker.Syntax: instance GHC.Internal.IsList.IsList (Language.Docker.Syntax.Arguments Data.Text.Internal.Text)
+ Language.Docker.Syntax: instance GHC.Internal.IsList.IsList Language.Docker.Syntax.Ports
+ Language.Docker.Syntax: instance GHC.Internal.Num.Num Language.Docker.Syntax.Duration
+ Language.Docker.Syntax: instance GHC.Internal.Num.Num Language.Docker.Syntax.Retries
+ Language.Docker.Syntax: instance GHC.Internal.Real.Fractional Language.Docker.Syntax.Duration
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.AddArgs
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.AddFlags
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.BaseImage
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.BindOpts
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.CacheOpts
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.CacheSharing
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.Checksum
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.Chmod
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.Chown
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.CopyArgs
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.CopyFlags
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.CopySource
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.Digest
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.Duration
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.EscapeChar
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.Exclude
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.Image
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.ImageAlias
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.Link
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.PortSpec
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.Ports
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.PragmaDirective
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.Registry
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.Relabel
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.Retries
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.RunFlags
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.RunMount
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.RunNetwork
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.RunSecurity
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.SecretOpts
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.SourcePath
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.SyntaxImage
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.Tag
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.TargetPath
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show Language.Docker.Syntax.TmpOpts
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show args => GHC.Internal.Show.Show (Language.Docker.Syntax.Arguments args)
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show args => GHC.Internal.Show.Show (Language.Docker.Syntax.Check args)
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show args => GHC.Internal.Show.Show (Language.Docker.Syntax.CheckArgs args)
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show args => GHC.Internal.Show.Show (Language.Docker.Syntax.Instruction args)
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show args => GHC.Internal.Show.Show (Language.Docker.Syntax.InstructionPos args)
+ Language.Docker.Syntax: instance GHC.Internal.Show.Show args => GHC.Internal.Show.Show (Language.Docker.Syntax.RunArgs args)
- Language.Docker.Syntax: BindOpts :: !TargetPath -> !Maybe SourcePath -> !Maybe Text -> !Maybe Bool -> BindOpts
+ Language.Docker.Syntax: BindOpts :: !TargetPath -> !Maybe SourcePath -> !Maybe Text -> !Maybe Bool -> !Maybe Relabel -> BindOpts

Files

README.md view
@@ -1,4 +1,4 @@-[![Build Status][travis-img]][travis]+[![Build Status][actions-img]][actions] [![Hackage][hackage-img]][hackage] [![GPL-3 licensed][license-img]][license] @@ -37,7 +37,7 @@  [hackage-img]: https://img.shields.io/hackage/v/language-docker.svg [hackage]: https://hackage.haskell.org/package/language-docker-[travis-img]: https://travis-ci.org/hadolint/language-docker.svg?branch=master-[travis]: https://travis-ci.org/hadolint/language-docker+[actions-img]: https://github.com/hadolint/language-docker/actions/workflows/haskell.yml/badge.svg+[actions]: https://github.com/hadolint/language-docker/actions/workflows/haskell.yml [license-img]: https://img.shields.io/badge/license-GPL--3-blue.svg [license]: https://tldrlegal.com/license/gnu-general-public-license-v3-(gpl-3)
language-docker.cabal view
@@ -1,6 +1,6 @@ cabal-version:      3.4 name:               language-docker-version:            14.0.1+version:            15.0.0 synopsis:           Dockerfile parser, pretty-printer and embedded DSL description:   All functions for parsing and pretty-printing Dockerfiles are exported through @Language.Docker@. For more fine-grained operations look for specific modules that implement a certain functionality.
src/Language/Docker/Parser/Run.hs view
@@ -28,9 +28,10 @@   | MountArgSharing CacheSharing   | MountArgSource SourcePath   | MountArgTarget TargetPath-  | MountArgType Text+  | MountArgType MountType   | MountArgUid Text   | MountArgGid Text+  | MountArgRelabel Relabel   deriving (Show)  data MountType@@ -39,6 +40,7 @@   | Tmpfs   | Secret   | Ssh+  deriving (Show)  parseRun :: (?esc :: Char) => Parser (Instruction Text) parseRun = do@@ -83,46 +85,44 @@ runFlagMount :: (?esc :: Char) => Parser RunMount runFlagMount = do   void $ string "--mount="-  maybeType <--    choice-      [ string "type="-          *> choice-            [ Just Bind <$ string "bind",-              Just Cache <$ string "cache",-              Just Tmpfs <$ string "tmpfs",-              Just Secret <$ string "secret",-              Just Ssh <$ string "ssh"-            ],-        pure Nothing-      ]-  (mountType, args) <- return $-    case maybeType of-      Nothing -> (Bind, argsParser Bind)-      Just Ssh -> (Ssh, choice [string "," *> argsParser Ssh, pure []])-      Just t -> (t, string "," *> argsParser t)-  case mountType of-    Bind -> BindMount <$> (bindMount =<< args)-    Cache -> CacheMount <$> (cacheMount =<< args)-    Tmpfs -> TmpfsMount <$> (tmpfsMount =<< args)-    Secret -> SecretMount <$> (secretMount =<< args)-    Ssh -> SshMount <$> (secretMount =<< args)+  args <- mountArgs `sepBy1` string ","+  mt <- parseTypeFromArgs args+  case mt of+    Bind -> BindMount <$> bindMount (filter (not . isMountArgType) args)+    Cache -> CacheMount <$> cacheMount (filter (not . isMountArgType) args)+    Tmpfs -> TmpfsMount <$> tmpfsMount (filter (not . isMountArgType) args)+    Secret -> SecretMount <$> secretMount (filter (not . isMountArgType) args)+    Ssh -> SshMount <$> secretMount (filter (not . isMountArgType) args) -argsParser :: (?esc :: Char) => MountType -> Parser [RunMountArg]-argsParser mountType = mountChoices mountType `sepBy1` string ","+parseTypeFromArgs :: [RunMountArg] -> Parser MountType+parseTypeFromArgs args =+  -- `notFollowedBy eof` is a trivially succeeding parser that isn't supposed to+  -- consume any input here. It's a hack that converts a simple type into a+  -- parser. This allows this function to emit parse errors after analyzing its+  -- input arguments and not consume any input.+  case filter isMountArgType args of+    [] -> Bind <$ notFollowedBy eof+    [MountArgType t] -> t <$ notFollowedBy eof+    _:_ -> fail "--mount with multiple `type` arguments" +isMountArgType :: RunMountArg -> Bool+isMountArgType (MountArgType _) = True+isMountArgType _ = False+ bindMount :: [RunMountArg] -> Parser BindOpts bindMount args =   case validArgs "bind" allowed required args of     Left e -> customError e     Right as -> return $ foldr bindOpts def as   where-    allowed = Set.fromList ["target", "source", "from", "ro"]+    allowed = Set.fromList ["target", "source", "from", "ro", "relabel"]     required = Set.singleton "target"     bindOpts :: RunMountArg -> BindOpts -> BindOpts     bindOpts (MountArgTarget path) bo = bo {bTarget = path}     bindOpts (MountArgSource path) bo = bo {bSource = Just path}     bindOpts (MountArgFromImage img) bo = bo {bFromImage = Just img}     bindOpts (MountArgReadOnly ro) bo = bo {bReadOnly = Just ro}+    bindOpts (MountArgRelabel re) bo = bo {bRelabel = Just re}     bindOpts invalid _ = error $ "unhandled " <> show invalid <> " please report this bug"  cacheMount :: [RunMountArg] -> Parser CacheOpts@@ -188,6 +188,7 @@         [] -> result         missing -> Left $ MissingArgument missing   where+    checkValidArg :: RunMountArg -> (Either DockerfileError [RunMountArg], Set.Set Text) -> (Either DockerfileError [RunMountArg], Set.Set Text)     checkValidArg _ x@(Left _, _) = x     checkValidArg a (Right as, seen) =       let name = toArgName a@@ -196,38 +197,23 @@             (_, True) -> (Left (DuplicateArgument name), seen)             (True, False) -> (Right (a : as), Set.insert name seen) -mountChoices :: (?esc :: Char) => MountType -> Parser RunMountArg-mountChoices mountType =-  choice $-    case mountType of-      Bind ->-        [ mountArgTarget,-          mountArgSource,-          mountArgFromImage,-          mountArgReadOnly-        ]-      Cache ->-        [ mountArgTarget,-          mountArgSource,-          mountArgFromImage,-          mountArgReadOnly,-          mountArgId,-          mountArgSharing,-          mountArgMode,-          mountArgUid,-          mountArgGid-        ]-      Tmpfs -> [mountArgTarget]-      _ -> -- Secret and Ssh-        [ mountArgTarget,-          mountArgId,-          mountArgRequired,-          mountArgSource,-          mountArgMode,-          mountArgUid,-          mountArgGid,-          mountArgEnv-        ]+mountArgs :: (?esc :: Char) => Parser RunMountArg+mountArgs =+  choice+    [ mountArgEnv,+      mountArgFromImage,+      mountArgGid,+      mountArgId,+      mountArgMode,+      mountArgReadOnly,+      mountArgRelabel,+      mountArgRequired,+      mountArgSharing,+      mountArgSource,+      mountArgTarget,+      mountArgType,+      mountArgUid+    ]  stringArg :: (?esc :: Char) => Parser Text stringArg = choice [doubleQuotedString, someUnless "a string" (== ',')]@@ -319,9 +305,28 @@   label "target=" $ choice [string "target=", string "dst=", string "destination="]   MountArgTarget . TargetPath <$> stringArg +mountArgType :: Parser RunMountArg+mountArgType = MountArgType <$> key "type" mountType++mountType :: Parser MountType+mountType =+  choice+    [ Bind <$ string "bind",+      Cache <$ string "cache",+      Tmpfs <$ string "tmpfs",+      Secret <$ string "secret",+      Ssh <$ string "ssh"+    ]+ mountArgUid :: (?esc :: Char) => Parser RunMountArg mountArgUid = MountArgUid <$> key "uid" stringArg +mountArgRelabel :: Parser RunMountArg+mountArgRelabel = MountArgRelabel <$> key "relabel" relabel++relabel :: Parser Relabel+relabel = choice [RelabelShared <$ string "shared", RelabelPrivate <$ string "private"]+ toArgName :: RunMountArg -> Text toArgName (MountArgEnv _) = "env" toArgName (MountArgFromImage _) = "from"@@ -335,3 +340,4 @@ toArgName (MountArgTarget _) = "target" toArgName (MountArgType _) = "type" toArgName (MountArgUid _) = "uid"+toArgName (MountArgRelabel _) = "relabel"
src/Language/Docker/PrettyPrint.hs view
@@ -188,6 +188,7 @@             <> maybe mempty printSource bSource             <> maybe mempty printFromImage bFromImage             <> maybe mempty printReadOnly bReadOnly+            <> maybe mempty printRelabel bRelabel         CacheMount CacheOpts {..} ->           "type=cache"             <> printTarget cTarget@@ -237,6 +238,10 @@     printReadOnly False = ",rw"     printRequired True = ",required"     printRequired False = mempty+    printRelabel r = ",relabel="+      <> case r of+        RelabelShared -> printQuotable "shared"+        RelabelPrivate -> printQuotable "private"  prettyPrintRunNetwork :: Maybe RunNetwork -> Doc ann prettyPrintRunNetwork Nothing = mempty
src/Language/Docker/Syntax.hs view
@@ -119,6 +119,11 @@       }   deriving (Show, Eq, Ord, IsString) +data Relabel+  = RelabelShared+  | RelabelPrivate+  deriving (Show, Eq, Ord)+ data Checksum   = Checksum !Text   | NoChecksum@@ -271,12 +276,13 @@       { bTarget :: !TargetPath,         bSource :: !(Maybe SourcePath),         bFromImage :: !(Maybe Text),-        bReadOnly :: !(Maybe Bool)+        bReadOnly :: !(Maybe Bool),+        bRelabel :: !(Maybe Relabel)       }   deriving (Show, Eq, Ord)  instance Default BindOpts where-  def = BindOpts "" Nothing Nothing Nothing+  def = BindOpts "" Nothing Nothing Nothing Nothing  data CacheOpts   = CacheOpts
test/Language/Docker/ParseExposeSpec.hs view
@@ -1,7 +1,5 @@ module Language.Docker.ParseExposeSpec where -import Data.Default.Class (def)-import qualified Data.Text as Text import Language.Docker.Syntax import TestHelper import Test.Hspec
test/Language/Docker/ParseHealthcheckSpec.hs view
@@ -1,10 +1,8 @@ module Language.Docker.ParseHealthcheckSpec where -import Data.Default.Class (def) import Language.Docker.Syntax import Test.Hspec import TestHelper-import qualified Data.Set as Set import qualified Data.Text as Text  
test/Language/Docker/ParseRunSpec.hs view
@@ -50,8 +50,8 @@             [ Run $ RunArgs (ArgumentsText "echo foo") flags             ]     it "--mount=type=bind all modifiers" $-      let file = Text.unlines ["RUN --mount=type=bind,target=/foo,source=/bar,from=ubuntu,ro echo foo"]-          flags = def {mount = Set.singleton $ BindMount (BindOpts {bTarget = "/foo", bSource = Just "/bar", bFromImage = Just "ubuntu", bReadOnly = Just True})}+      let file = Text.unlines ["RUN --mount=type=bind,target=/foo,source=/bar,from=ubuntu,ro,relabel=shared echo foo"]+          flags = def {mount = Set.singleton $ BindMount (BindOpts {bTarget = "/foo", bSource = Just "/bar", bFromImage = Just "ubuntu", bReadOnly = Just True, bRelabel = Just RelabelShared})}        in assertAst             file             [ Run $ RunArgs (ArgumentsText "echo foo") flags@@ -72,6 +72,41 @@               Run $ RunArgs (ArgumentsText "echo foo") flags2,               Run $ RunArgs (ArgumentsText "echo foo") flags3             ]++    it "--mount=type=cache with id from variable/arg" $+      let file =+            Text.unlines+              [ "ARG debian_version=12",+                "FROM debian:bookworm-slim",+                "RUN --mount=id=debian:${debian_version},type=cache,target=/foo foo bar"+              ]+          flags = def {mount = Set.singleton $ CacheMount (def {cTarget = "/foo", cCacheId = Just "debian:${debian_version}"})}+       in assertAst+            file+            [ Arg "debian_version" (Just "12"),+              From $ BaseImage+                        { image = Image+                                    { registryName = Nothing,+                                      imageName="debian"+                                    },+                          tag = Just Tag { unTag="bookworm-slim" },+                          digest = Nothing,+                          alias = Nothing,+                          platform = Nothing+                        },+              Run $ RunArgs (ArgumentsText "foo bar") flags+            ]++    it "--mount=type=cache,dst=/foo" $+      let file = Text.unlines [ "RUN --mount=type=cache,dst=/foo echo foo" ]+          flags = def {mount = Set.singleton $ CacheMount (def {cTarget = "/foo"})}+       in assertAst file [ Run $ RunArgs (ArgumentsText "echo foo") flags ]++    it "--mount=dst=/foo,type=cache" $+      let file = Text.unlines [ "RUN --mount=dst=/foo,type=cache echo foo" ]+          flags = def {mount = Set.singleton $ CacheMount (def {cTarget = "/foo"})}+       in assertAst file [ Run $ RunArgs (ArgumentsText "echo foo") flags ]+     it "--mount=type=cache with all modifiers" $       let file =             Text.unlines@@ -99,6 +134,33 @@             file             [ Run $ RunArgs (ArgumentsText "echo foo") flags             ]+    it "--mount=type=cache with all modifiers, different order" $+      let file =+            Text.unlines+              [ "RUN --mount=readonly,sharing=private,id=a,type=cache,from=ubuntu,source=/bar,destination=/foo,mode=0700,uid=0,gid=0 echo foo"+              ]+          flags =+            def+              { mount =+                  Set.singleton $+                    CacheMount+                      ( def+                          { cTarget = "/foo",+                            cSharing = Just Private,+                            cCacheId = Just "a",+                            cReadOnly = Just True,+                            cFromImage = Just "ubuntu",+                            cSource = Just "/bar",+                            cMode = Just "0700",+                            cUid = Just "0",+                            cGid = Just "0"+                          }+                      )+              }+       in assertAst+            file+            [ Run $ RunArgs (ArgumentsText "echo foo") flags+            ]     it "--mount=type=tmpfs" $       let file = Text.unlines ["RUN --mount=type=tmpfs,target=/foo echo foo"]           flags = def {mount = Set.singleton $ TmpfsMount (def {tTarget = "/foo"})}@@ -639,3 +701,36 @@             file             [ Run $ RunArgs ( ArgumentsText "ls &&  cat" ) flags             ]++  describe "Parse RUN instructions - invalid cases" $ do+    it "fail because of multiple types in --mount" $+      let line = "RUN --mount=type=cache,type=tmpfs,target=/foo foo bar"+       in expectFail line++  describe "Parse RUN instructions - SELinux relabeling" $ do+    let flagsRelabelShared =+          def { mount = Set.singleton $+                  BindMount+                    ( def+                        { bTarget = "/bar",+                          bRelabel = Just RelabelShared+                        }+                    )+              }+        flagsRelabelPrivate =+          def { mount = Set.singleton $+                  BindMount+                    ( def+                        { bTarget = "/bar",+                          bRelabel = Just RelabelPrivate+                        }+                    )+              }+    it "RUN with --relabel=shared" $+      let file = Text.unlines+            ["RUN --mount=type=bind,target=/bar,relabel=shared echo foo"]+       in assertAst file [ Run $ RunArgs (ArgumentsText "echo foo") flagsRelabelShared ]+    it "RUN with --relabel=private" $+      let file = Text.unlines+            ["RUN --mount=type=bind,target=/bar,relabel=private echo foo"]+       in assertAst file [ Run $ RunArgs (ArgumentsText "echo foo") flagsRelabelPrivate ]