Skip to content

Commit 9a6b9b3

Browse files
committed
Rough draft
1 parent b926d24 commit 9a6b9b3

File tree

7 files changed

+44
-14
lines changed

7 files changed

+44
-14
lines changed

src/App/Fossa/Ficus/Analyze.hs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import App.Fossa.EmbeddedBinary (BinaryPaths, toPath, withFicusBinary)
1313
import App.Fossa.Ficus.Types (
1414
FicusAllFlag (..),
1515
FicusAnalysisFlag (..),
16+
FicusAnalysisResults (..),
1617
FicusConfig (..),
1718
FicusDebug (..),
1819
FicusError (..),
@@ -229,14 +230,14 @@ runFicus maybeDebugDir ficusConfig = do
229230
logInfo $ pretty (Text.unlines stdErrLines)
230231
logInfo "\n==== END Ficus STDERR ====\n"
231232
else logInfo "[Ficus] Ficus exited successfully"
232-
pure result
233+
pure $ snippetScanResults result
233234
where
234235
currentTimeStamp :: IO String
235236
currentTimeStamp = do
236237
now <- getCurrentTime
237238
pure . formatTime defaultTimeLocale "%H:%M:%S.%3q" $ now
238239

239-
streamFicusOutput :: Handle -> Maybe Handle -> IO (Maybe FicusSnippetScanResults)
240+
streamFicusOutput :: Handle -> Maybe Handle -> IO FicusAnalysisResults
240241
streamFicusOutput handle maybeFile =
241242
Conduit.runConduit $
242243
CC.sourceHandle handle
@@ -263,12 +264,13 @@ runFicus maybeDebugDir ficusConfig = do
263264
FicusMessageFinding finding -> do
264265
hPutStrLn stderr $ "[" ++ timestamp ++ "] FINDING " <> toString (displayFicusFinding finding)
265266
let analysisFinding = findingToSnippetScanResult finding
266-
when (isJust acc && isJust analysisFinding) $
267+
let currentSnippetResults = snippetScanResults acc
268+
when (isJust currentSnippetResults && isJust analysisFinding) $
267269
hPutStrLn stderr $
268270
"[" ++ timestamp ++ "] ERROR " <> "Found multiple ficus analysis responses."
269-
pure $ acc <|> analysisFinding
271+
pure $ acc{snippetScanResults = currentSnippetResults <|> analysisFinding}
270272
)
271-
Nothing
273+
(FicusAnalysisResults{snippetScanResults = Nothing, vendoredDependencyScanResults = Nothing})
272274

273275
consumeStderr :: Handle -> Maybe Handle -> IO [Text]
274276
consumeStderr handle maybeFile = do

src/App/Fossa/Ficus/Types.hs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ module App.Fossa.Ficus.Types (
1515
FicusSnippetScanResults (..),
1616
FicusScanStats (..),
1717
FicusPerStrategyFlag (..),
18+
FicusAnalysisResults (..),
1819
) where
1920

2021
import App.Types (ProjectRevision)
@@ -27,6 +28,13 @@ import Path (Abs, Dir, Path)
2728
import Text.URI
2829
import Types (GlobFilter)
2930

31+
data FicusAnalysisResults = FicusAnalysisResults
32+
{ snippetScanResults :: Maybe FicusSnippetScanResults
33+
, vendoredDependencyScanResults :: Maybe FicusVendoredDependencyScanResults
34+
}
35+
36+
newtype FicusVendoredDependencyScanResults = FicusVendoredDependencyScanResults ()
37+
3038
data FicusSnippetScanResults = FicusSnippetScanResults
3139
{ ficusSnippetScanResultsAnalysisId :: Int
3240
, ficusSnippetScanResultsBucketId :: Int

src/App/Fossa/ManualDeps.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ mkLinuxPackage :: Text -> Text -> Text -> Text
358358
mkLinuxPackage depName os osVersion = depName <> "#" <> os <> "#" <> osVersion
359359

360360
addEmptyDep :: Locator -> SourceUnitDependency
361-
addEmptyDep loc = SourceUnitDependency loc []
361+
addEmptyDep loc = SourceUnitDependency loc [] Data.Aeson.Null
362362

363363
toAdditionalData :: Maybe (NE.NonEmpty CustomDependency) -> Maybe (NE.NonEmpty RemoteDependency) -> Maybe AdditionalDepData
364364
toAdditionalData customDeps remoteDeps =

src/Srclib/Converter.hs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import Prelude
1515
import Algebra.Graph.AdjacencyMap qualified as AM
1616
import App.Fossa.Analyze.Project (ProjectResult (..))
1717
import Control.Applicative ((<|>))
18+
import Data.Aeson qualified as Aeson
1819
import Data.Set qualified as Set
1920
import Data.String.Conversion (toText)
2021
import Data.Text (Text)
@@ -35,6 +36,7 @@ import Graphing qualified
3536
import Path (toFilePath)
3637
import Srclib.Types (
3738
Locator (..),
39+
LocatorWithMetadata (..),
3840
OriginPath,
3941
SourceUnit (..),
4042
SourceUnitBuild (
@@ -91,17 +93,21 @@ toSourceUnit leaveUnfiltered path dependencies projectType graphBreadth originPa
9193
locatorAdjacent :: AM.AdjacencyMap Locator
9294
locatorAdjacent = Graphing.toAdjacencyMap locatorGraph
9395

96+
locatorsWithMetadata :: [LocatorWithMetadata]
97+
locatorsWithMetadata = map (\dep -> LocatorWithMetadata{locatorWithMetadataLocator = (toLocator dep), locatorWithMetadataData = Aeson.Null}) (Graphing.directList filteredGraph)
98+
9499
deps :: [SourceUnitDependency]
95-
deps = map (mkSourceUnitDependency locatorAdjacent) (AM.vertexList locatorAdjacent)
100+
deps = map (mkSourceUnitDependency locatorAdjacent) locatorsWithMetadata
96101

97102
imports :: [Locator]
98103
imports = Graphing.directList locatorGraph
99104

100-
mkSourceUnitDependency :: AM.AdjacencyMap Locator -> Locator -> SourceUnitDependency
101-
mkSourceUnitDependency gr locator =
105+
mkSourceUnitDependency :: AM.AdjacencyMap Locator -> LocatorWithMetadata -> SourceUnitDependency
106+
mkSourceUnitDependency gr (LocatorWithMetadata{..}) =
102107
SourceUnitDependency
103-
{ sourceDepLocator = locator
104-
, sourceDepImports = Set.toList $ AM.postSet locator gr
108+
{ sourceDepLocator = locatorWithMetadataLocator
109+
, sourceDepImports = Set.toList $ AM.postSet locatorWithMetadataLocator gr
110+
, sourceDepData = locatorWithMetadataData
105111
}
106112

107113
shouldPublishDep :: Dependency -> Bool

src/Srclib/Types.hs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ module Srclib.Types (
99
AdditionalDepData (..),
1010
SourceUserDefDep (..),
1111
SourceRemoteDep (..),
12+
LocatorWithMetadata (..),
1213
Locator (..),
1314
LicenseSourceUnit (..),
1415
LicenseScanType (..),
@@ -409,7 +410,7 @@ data SourceUnitBuild = SourceUnitBuild
409410
data SourceUnitDependency = SourceUnitDependency
410411
{ sourceDepLocator :: Locator
411412
, sourceDepImports :: [Locator] -- omitempty
412-
-- , sourceDepData :: Aeson.Value
413+
, sourceDepData :: Data.Aeson.Value
413414
}
414415
deriving (Eq, Ord, Show)
415416

@@ -476,6 +477,12 @@ parseProvidedPackageLabelScope "org" = ProvidedPackageLabelScopeOrg
476477
parseProvidedPackageLabelScope "project" = ProvidedPackageLabelScopeProject
477478
parseProvidedPackageLabelScope _ = ProvidedPackageLabelScopeRevision
478479

480+
data LocatorWithMetadata = LocatorWithMetadata
481+
{ locatorWithMetadataLocator :: Locator
482+
, locatorWithMetadataData :: Data.Aeson.Value
483+
}
484+
deriving (Eq, Ord, Show)
485+
479486
data Locator = Locator
480487
{ locatorFetcher :: Text
481488
, locatorProject :: Text
@@ -551,13 +558,15 @@ instance ToJSON SourceUnitDependency where
551558
object
552559
[ "locator" .= sourceDepLocator
553560
, "imports" .= sourceDepImports
561+
, "metadata" .= sourceDepData
554562
]
555563

556564
instance FromJSON SourceUnitDependency where
557565
parseJSON = withObject "SourceUnitDependency" $ \obj ->
558566
SourceUnitDependency
559567
<$> obj .: "locator"
560568
<*> obj .: "imports"
569+
<*> obj .: "metadata"
561570

562571
instance ToJSON AdditionalDepData where
563572
toJSON AdditionalDepData{..} =

test/App/Fossa/Container/AnalyzeNativeSpec.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import Control.Carrier.Telemetry (IgnoreTelemetryC, withoutTelemetry)
1515
import Control.Effect.DockerEngineApi (
1616
DockerEngineApiF (GetImageSize, IsDockerEngineAccessible),
1717
)
18+
import Data.Aeson qualified as Aeson
1819
import Data.Flag (toFlag')
1920
import Data.Map qualified as Map
2021
import Data.Maybe (mapMaybe)
@@ -241,6 +242,7 @@ jarsInContainerSpec = describe "Jars in Containers" $ do
241242
[ SourceUnitDependency
242243
{ sourceDepLocator = depLocator
243244
, sourceDepImports = []
245+
, sourceDepData = Aeson.Null
244246
}
245247
]
246248
}

test/Test/Fixtures.hs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ import App.Types (Mode (..), OverrideDynamicAnalysisBinary (..))
7575
import App.Types qualified as App
7676
import Control.Effect.FossaApiClient qualified as App
7777
import Control.Timeout (Duration (MilliSeconds))
78+
import Data.Aeson qualified as Aeson
7879
import Data.ByteString.Lazy qualified as LB
7980
import Data.Flag (toFlag)
8081
import Data.List.NonEmpty (NonEmpty)
@@ -337,12 +338,13 @@ sourceUnitBuildMaven =
337338
[ ipAddr
338339
, spotBugs
339340
]
340-
[ SourceUnitDependency logger []
341-
, SourceUnitDependency ipAddr []
341+
[ SourceUnitDependency logger [] Aeson.Null
342+
, SourceUnitDependency ipAddr [] Aeson.Null
342343
, SourceUnitDependency
343344
spotBugs
344345
[ logger
345346
]
347+
Aeson.Null
346348
]
347349
where
348350
ipAddr :: Locator
@@ -387,6 +389,7 @@ vsiSourceUnit =
387389
, locatorRevision = Just "1.2.3"
388390
}
389391
, sourceDepImports = []
392+
, sourceDepData = Aeson.Null
390393
}
391394
]
392395
}

0 commit comments

Comments
 (0)