Skip to content

Commit ca3ab7b

Browse files
committed
feat: add support for purl (#102)
1 parent 11a8170 commit ca3ab7b

File tree

9 files changed

+552
-4
lines changed

9 files changed

+552
-4
lines changed

.github/workflows/haskell-ci.yml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ jobs:
198198
echo "packages: $GITHUB_WORKSPACE/source/code/hsec-sync" >> cabal.project
199199
echo "packages: $GITHUB_WORKSPACE/source/code/hsec-core" >> cabal.project
200200
echo "packages: $GITHUB_WORKSPACE/source/code/cvss" >> cabal.project
201+
echo "packages: $GITHUB_WORKSPACE/source/code/purl" >> cabal.project
201202
cat cabal.project
202203
- name: sdist
203204
run: |
@@ -219,6 +220,8 @@ jobs:
219220
echo "PKGDIR_hsec_core=${PKGDIR_hsec_core}" >> "$GITHUB_ENV"
220221
PKGDIR_cvss="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/cvss-[0-9.]*')"
221222
echo "PKGDIR_cvss=${PKGDIR_cvss}" >> "$GITHUB_ENV"
223+
PKGDIR_purl="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/purl-[0-9.]*')"
224+
echo "PKGDIR_purl=${PKGDIR_purl}" >> "$GITHUB_ENV"
222225
rm -f cabal.project cabal.project.local
223226
touch cabal.project
224227
touch cabal.project.local
@@ -227,6 +230,7 @@ jobs:
227230
echo "packages: ${PKGDIR_hsec_sync}" >> cabal.project
228231
echo "packages: ${PKGDIR_hsec_core}" >> cabal.project
229232
echo "packages: ${PKGDIR_cvss}" >> cabal.project
233+
echo "packages: ${PKGDIR_purl}" >> cabal.project
230234
echo "package osv" >> cabal.project
231235
echo " ghc-options: -Werror=missing-methods" >> cabal.project
232236
echo "package hsec-tools" >> cabal.project
@@ -237,9 +241,11 @@ jobs:
237241
echo " ghc-options: -Werror=missing-methods" >> cabal.project
238242
echo "package cvss" >> cabal.project
239243
echo " ghc-options: -Werror=missing-methods" >> cabal.project
244+
echo "package purl" >> cabal.project
245+
echo " ghc-options: -Werror=missing-methods" >> cabal.project
240246
cat >> cabal.project <<EOF
241247
EOF
242-
$HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: any.$_ installed\n" unless /^(cvss|hsec-core|hsec-sync|hsec-tools|osv)$/; }' >> cabal.project.local
248+
$HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: any.$_ installed\n" unless /^(cvss|hsec-core|hsec-sync|hsec-tools|purl|osv)$/; }' >> cabal.project.local
243249
cat cabal.project
244250
cat cabal.project.local
245251
- name: dump install plan
@@ -277,6 +283,8 @@ jobs:
277283
${CABAL} -vnormal check
278284
cd ${PKGDIR_cvss} || false
279285
${CABAL} -vnormal check
286+
cd ${PKGDIR_purl} || false
287+
${CABAL} -vnormal check
280288
- name: haddock
281289
run: |
282290
$CABAL v2-haddock --disable-documentation --haddock-all $ARG_COMPILER --with-haddock $HADDOCK $ARG_TESTS $ARG_BENCH all

cabal.project

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ package hsec-tools
55
package hsec-sync
66
package cvss
77
package osv
8+
package purl
89

910
test-show-details: direct

code/osv/osv.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ library
3434
, aeson >=2.0.1.0 && <3
3535
, base >=4.14 && <5
3636
, cvss >=0.2 && <0.3
37+
, purl >=0.1 && <0.2
3738
, text >=1.2 && <3
3839
, time >=1.9 && <1.15
3940

code/osv/src/Security/OSV.hs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import Data.Time (UTCTime)
4444
import Data.Time.Format.ISO8601 (iso8601ParseM)
4545
import Data.Tuple (swap)
4646

47+
import Data.Purl (Purl)
4748
import qualified Security.CVSS as CVSS
4849

4950
data Affected dbSpecific ecosystemSpecific rangeDbSpecific = Affected
@@ -182,8 +183,8 @@ instance ToJSON Severity where
182183
data Package = Package
183184
{ packageName :: Text
184185
, packageEcosystem :: Text
185-
, packagePurl :: Maybe Text -- TODO refine type
186-
} deriving (Show, Eq, Ord)
186+
, packagePurl :: Maybe Purl
187+
} deriving (Show, Eq)
187188

188189
data Range dbSpecific
189190
= RangeSemVer [Event Text {- TODO refine -}] (Maybe dbSpecific)

code/purl/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# 0.1.0.0
2+
3+
Introduction

code/purl/purl.cabal

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
cabal-version: 3.0
2+
name: purl
3+
version: 0.1.0.0
4+
synopsis: Support for purl (mostly universal package url).
5+
description:
6+
Support for the purl specification: <https://github.com/package-url/purl-spec>
7+
8+
license: BSD-3-Clause
9+
author: Gautier DI FOLCO
10+
maintainer: [email protected]
11+
category: Data
12+
extra-doc-files: CHANGELOG.md
13+
tested-with:
14+
GHC ==8.10.7 || ==9.0.2 || ==9.2.8 || ==9.4.8 || ==9.6.6 || ==9.8.3 || ==9.10.1 || ==9.12.1
15+
16+
library
17+
exposed-modules: Data.Purl
18+
build-depends:
19+
, base >=4.14 && <5
20+
, aeson >=2.0 && <2.3
21+
, case-insensitive <1.3
22+
, containers >=0.6 && <0.8
23+
, http-types >=0.10.0 && <0.13
24+
, parsec ==3.1.*
25+
, text >=1.2 && <3
26+
27+
hs-source-dirs: src
28+
default-language: Haskell2010
29+
ghc-options:
30+
-Wall -Wcompat -Widentities -Wincomplete-record-updates
31+
-Wincomplete-uni-patterns -Wpartial-fields -Wredundant-constraints
32+
33+
test-suite spec
34+
type: exitcode-stdio-1.0
35+
hs-source-dirs: test
36+
main-is: Spec.hs
37+
build-depends:
38+
, base <5
39+
, containers
40+
, purl
41+
, tasty <1.6
42+
, tasty-hunit <1.0
43+
, text
44+
45+
default-language: Haskell2010
46+
ghc-options:
47+
-Wall -Wcompat -Widentities -Wincomplete-record-updates
48+
-Wincomplete-uni-patterns -Wpartial-fields -Wredundant-constraints

0 commit comments

Comments
 (0)