guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[no subject]


From: Mathieu Othacehe
Date: Fri, 28 May 2021 05:25:46 -0400 (EDT)

branch: master
commit 54bff10fc7a85707360deb382c4118d3de18f159
Author: Mathieu Othacehe <othacehe@gnu.org>
AuthorDate: Fri May 28 11:21:58 2021 +0200

    Add badges support.
    
    * src/static/images/badge-error.svg: New file.
    * src/static/images/badge-per.svg: New file.
    * src/static/images/badge-running.svg: New file.
    * Makefile.am (dist_images_DATA): Add them.
    * src/cuirass/templates.scm (badge-svg): New procedure.
    * src/cuirass/http.scm (badge-string): New procedure.
    (url-handler): Add a new "/jobset/spec/badge" route.
    * doc/cuirass.texi (Badges): New section.
---
 Makefile.am                         |   3 +
 doc/cuirass.texi                    |  20 ++++
 src/cuirass/http.scm                |  20 ++++
 src/cuirass/templates.scm           |  34 ++++++-
 src/static/images/badge-error.svg   | 179 ++++++++++++++++++++++++++++++++++++
 src/static/images/badge-per.svg     | 127 +++++++++++++++++++++++++
 src/static/images/badge-running.svg | 179 ++++++++++++++++++++++++++++++++++++
 7 files changed, 561 insertions(+), 1 deletion(-)

diff --git a/Makefile.am b/Makefile.am
index 8135feb..c0de526 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -113,6 +113,9 @@ dist_fonts_DATA =                           \
   src/static/fonts/open-iconic.ttf             \
   src/static/fonts/open-iconic.woff
 dist_images_DATA =                             \
+  src/static/images/badge-error.svg            \
+  src/static/images/badge-per.svg              \
+  src/static/images/badge-running.svg          \
   src/static/images/guix.png                   \
   src/static/images/icon.png
 dist_js_DATA =                                 \
diff --git a/doc/cuirass.texi b/doc/cuirass.texi
index 3735db2..1a252dc 100644
--- a/doc/cuirass.texi
+++ b/doc/cuirass.texi
@@ -53,6 +53,7 @@ Documentation License''.
 * Introduction::                What is Cuirass about?
 * Specifications::              Writing Cuirass specifications.
 * Notifications::               Build notifications.
+* Badges::                      Cuirass badges.
 * Parameters::                  Cuirass parameters.
 * Build modes::                 Build modes.
 * Invocation::                  How to run Cuirass.
@@ -294,6 +295,25 @@ the @var{spec} specification.
 @end itemize
 
 @c *********************************************************************
+@node Badges
+@chapter Badges
+@cindex cuirass badges
+
+Cuirass is able to generate SVG badges that can be integrated inside
+your favorite forge.
+
+@itemize
+@item @url{http://cuirass-url/jobset/spec/badge}
+Generates a badge for the @code{spec} specification. The badge
+represents the percentage of successful jobs for the latest evaluation
+of the @code{spec} specification.  If the latest evaluation is still
+being processed, a @code{running} badge is generated.  If no
+evaluation could be found for the @code{spec} specification, an
+@code{error} badge is generated.
+
+@end itemize
+
+@c *********************************************************************
 @node Parameters
 @chapter Parameters
 @cindex cuirass parameters
diff --git a/src/cuirass/http.scm b/src/cuirass/http.scm
index 9232b5d..10c60bd 100644
--- a/src/cuirass/http.scm
+++ b/src/cuirass/http.scm
@@ -38,6 +38,7 @@
   #:use-module (srfi srfi-26)
   #:use-module (ice-9 binary-ports)
   #:use-module (ice-9 match)
+  #:use-module (ice-9 textual-ports)
   #:use-module (ice-9 format)
   #:use-module (json)
   #:use-module (web request)
@@ -468,6 +469,12 @@ passed, only display JOBS targeting this SYSTEM."
         (#:link . ,(string-append "/eval/" (number->string evaluation-id)))))
      #:margin? #f)))
 
+(define (badge-string name)
+  "Return the content of the badge file with the given NAME as a string."
+  (call-with-input-file
+      (string-append (%static-directory) "/images/" name)
+    get-string-all))
+
 
 ;;;
 ;;; Web server.
@@ -493,6 +500,10 @@ passed, only display JOBS targeting this SYSTEM."
     (respond '((content-type . (text/plain)))
              #:body body ...))
 
+  (define-syntax-rule (respond-svg body ...)
+    (respond '((content-type . (image/svg+xml)))
+             #:body body ...))
+
   (define-syntax-rule (respond-json-with-error error-code message)
     (respond
      (build-response #:headers '((content-type . (application/json)))
@@ -1063,6 +1074,15 @@ passed, only display JOBS targeting this SYSTEM."
                           ,@params))
          #:params params))))
 
+    (('GET "jobset" spec "badge")
+     (let* ((params (request-parameters request))
+            (summary
+             (match (db-get-evaluations-build-summary spec 1 #f #f)
+               ((summary) summary)
+               (else #f))))
+       (respond-svg
+        (badge-svg badge-string summary))))
+
     (('GET "workers")
      (respond-html
       (html-page
diff --git a/src/cuirass/templates.scm b/src/cuirass/templates.scm
index b816398..bccddc4 100644
--- a/src/cuirass/templates.scm
+++ b/src/cuirass/templates.scm
@@ -53,7 +53,8 @@
             global-metrics-content
             workers-status
             machine-status
-            evaluation-dashboard))
+            evaluation-dashboard
+            badge-svg))
 
 (define (navigation-items navigation)
   (match navigation
@@ -1925,3 +1926,34 @@ text-dark d-flex position-absolute w-100"))
       (div (@ (id "dashboard")
               (class "invisible")
               (url ,jobs))))))
+
+(define (badge-svg badge-string summary)
+  "Return the badge SVG for the specification with the given SUMMARY.  The
+BADGE-STRING procedure takes a badge name as input an returns the badge
+content as a string."
+  (define complete?
+    (eq? (assq-ref summary #:status) 0))
+
+  (cond
+   ((not summary)
+    (badge-string "badge-error.svg"))
+   (complete?
+    (let* ((succeeded
+            (assq-ref summary #:succeeded))
+           (failed
+            (assq-ref summary #:failed))
+           (scheduled
+            (assq-ref summary #:scheduled))
+           (percentage
+            (nearest-exact-integer
+             (* 100
+                (/ succeeded
+                   (+ succeeded failed scheduled)))))
+           (percentage-str
+            (string-append
+             (number->string percentage) "%")))
+      (string-replace-substring
+       (badge-string "badge-per.svg")
+       "X%" percentage-str)))
+   (else
+    (badge-string "badge-running.svg"))))
diff --git a/src/static/images/badge-error.svg 
b/src/static/images/badge-error.svg
new file mode 100644
index 0000000..803ec4d
--- /dev/null
+++ b/src/static/images/badge-error.svg
@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="99.998856"
+   height="26.153"
+   id="svg2"
+   version="1.1"
+   inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
+   sodipodi:docname="badge-error.svg">
+  <title
+     id="title3831">Cuirass icon</title>
+  <defs
+     id="defs4">
+    <rect
+       x="9094.3613"
+       y="2431.5554"
+       width="363.25549"
+       height="110.18591"
+       id="rect226" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8"
+     inkscape:cx="71.646296"
+     inkscape:cy="11.632562"
+     inkscape:document-units="px"
+     inkscape:current-layer="g328"
+     showgrid="false"
+     inkscape:window-width="2560"
+     inkscape:window-height="1376"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     inkscape:showpageshadow="false"
+     borderlayer="true"
+     inkscape:document-rotation="0"
+     inkscape:snap-global="true"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:snap-bbox="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     showborder="false">
+    <inkscape:grid
+       type="axonomgrid"
+       id="grid3004"
+       units="mm"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       spacingy="3.7mm"
+       originx="-8829.3366"
+       originy="-1180.3996" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title>Cuirass icon</dc:title>
+        <dc:date>2021-01-09</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Luis Felipe López Acevedo</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:rights>
+          <cc:Agent>
+            <dc:title />
+          </cc:Agent>
+        </dc:rights>
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/"; />
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/by-sa/4.0/";>
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Reproduction"; />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Distribution"; />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#Notice"; />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#Attribution"; />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#DerivativeWorks"; />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#ShareAlike"; />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="ref"
+     sodipodi:insensitive="true"
+     transform="translate(-8814.2185,-1148.2736)" />
+  <g
+     inkscape:label="layer"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-8814.2185,-2000.6358)">
+    <text
+       xml:space="preserve"
+       id="text224"
+       
style="font-style:normal;font-weight:normal;font-size:96px;line-height:0;font-family:sans-serif;white-space:pre;shape-inside:url(#rect226);fill:#000000;fill-opacity:1;stroke:none;"><tspan
+         style="visibility:hidden"
+         x="9094.3613"
+         y="2631.4797"><tspan
+           dx="0 61.078125 61.078125"
+           
style="font-size:96px;line-height:1.35;fill:#ff6600">40%</tspan></tspan></text>
+    <path
+       style="fill:#fd7e14;fill-opacity:1;stroke-width:0.707107"
+       d=""
+       id="path244"
+       transform="translate(9421.1025,2673.3733)" />
+    <path
+       style="fill:#fd7e14;fill-opacity:1;stroke-width:0.707107"
+       d=""
+       id="path246"
+       transform="translate(9421.1025,2673.3733)" />
+    <g
+       id="g328"
+       transform="matrix(0.13076492,0,0,0.13076492,7664.8791,1688.7373)">
+      <rect
+         style="fill:#191919;fill-opacity:1;stroke:none;stroke-width:0.284347"
+         id="rect4281"
+         width="200"
+         height="200.00011"
+         x="8789.3555"
+         y="2385.1848" />
+      <g
+         id="g1247"
+         transform="matrix(0.75,0,0,0.75,1729.7789,386.40491)">
+        <path
+           id="path4303"
+           
style="fill:#fd7e14;fill-opacity:1;stroke:none;stroke-width:1.40209;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 9551.1873,2698.3734 v 38.6156 h 15.2577 v -3.0224 l 
6.7796,-6.7797 h 20.339 20.339 l 6.7797,6.7797 v 20.0692 a 27.118644,27.118644 
0 0 1 0,0.2698 v 20.3389 l -6.7797,6.7797 h -20.339 -20.339 l -6.7796,-6.7797 v 
-3.7572 h -15.2577 v 54.2372 h 15.2577 v -3.0223 l 6.7796,-6.7797 h 20.339 
20.339 l 6.7797,6.7797 v 20.0692 a 27.118644,27.118644 0 0 1 0,0.2698 v 20.3389 
l -6.7797,6.7797 h -20.339 -20.339 l -6.7796,-6.7797 v -3.7573 h -15.2577 v 
39.3506 h 82.2034 l 12.7119,-12.71 [...]
+        <path
+           id="path4305"
+           style="fill:#ffffff;fill-opacity:1;stroke-width:1.86014"
+           d="m 9458.8145,2698.3733 -12.7119,12.7119 v 174.5763 l 
12.7119,12.7119 h 82.2034 v -39.3506 -8.9545 h 35.5966 v 5.9322 l 3.3898,3.3898 
h 27.1186 l 3.3899,-3.3898 v -27.1187 l -3.3899,-3.3898 h -27.1186 l 
-3.3898,3.3898 v 5.9322 h -35.5966 v -9.6895 -54.2372 -8.9546 h 35.5966 v 
5.9322 l 3.3898,3.3898 h 27.1186 l 3.3899,-3.3898 v -27.1187 l -3.3899,-3.3898 
h -27.1186 l -3.3898,3.3898 v 5.9322 h -35.5966 v -9.6894 -38.6157 z m 
13.5593,16.9492 h 51.6949 v 166.1017 h -51.6949 l -9. [...]
+      </g>
+      <path
+         style="fill:#191919;fill-opacity:1;stroke-width:0.844933"
+         d="m 8989.3555,2485.1848 v -100 h 282.3611 282.3612 v 100 100 h 
-282.3612 -282.3611 z"
+         id="path222" />
+      <text
+         xml:space="preserve"
+         
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:98.8576px;line-height:1.25;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;fill:#fd7e14;fill-opacity:1;stroke:none;stroke-width:0.726558"
+         x="9513.0264"
+         y="2418.6541"
+         id="text260"
+         transform="scale(0.96288659,1.0385439)"><tspan
+           sodipodi:role="line"
+           id="tspan258"
+           x="9513.0264"
+           y="2418.6541"
+           
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;fill:#ff0000;stroke-width:0.726558">error</tspan></text>
+    </g>
+  </g>
+</svg>
diff --git a/src/static/images/badge-per.svg b/src/static/images/badge-per.svg
new file mode 100644
index 0000000..f882cce
--- /dev/null
+++ b/src/static/images/badge-per.svg
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   width="99.998856"
+   height="26.153"
+   id="svg2"
+   version="1.1">
+  <title
+     id="title3831">Cuirass icon</title>
+  <defs
+     id="defs4">
+    <rect
+       x="9094.3613"
+       y="2431.5554"
+       width="363.25549"
+       height="110.18591"
+       id="rect226" />
+  </defs>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title>Cuirass icon</dc:title>
+        <dc:date>2021-01-09</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Luis Felipe López Acevedo</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:rights>
+          <cc:Agent>
+            <dc:title />
+          </cc:Agent>
+        </dc:rights>
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/"; />
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/by-sa/4.0/";>
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Reproduction"; />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Distribution"; />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#Notice"; />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#Attribution"; />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#DerivativeWorks"; />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#ShareAlike"; />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer2"
+     transform="translate(-8814.2185,-1148.2736)" />
+  <g
+     id="layer1"
+     transform="translate(-8814.2185,-2000.6358)">
+    <text
+       xml:space="preserve"
+       id="text224"
+       
style="font-style:normal;font-weight:normal;font-size:96px;line-height:0;font-family:sans-serif;white-space:pre;shape-inside:url(#rect226);fill:#000000;fill-opacity:1;stroke:none;"><tspan
+         style="visibility:hidden"
+         x="9094.3613"
+         y="2631.4797"><tspan
+           dx="0 61.078125 61.078125"
+           
style="font-size:96px;line-height:1.35;fill:#ff6600">40%</tspan></tspan></text>
+    <path
+       style="fill:#fd7e14;fill-opacity:1;stroke-width:0.707107"
+       d=""
+       id="path244"
+       transform="translate(9421.1025,2673.3733)" />
+    <path
+       style="fill:#fd7e14;fill-opacity:1;stroke-width:0.707107"
+       d=""
+       id="path246"
+       transform="translate(9421.1025,2673.3733)" />
+    <g
+       id="g328"
+       transform="matrix(0.13076492,0,0,0.13076492,7664.8791,1688.7373)">
+      <rect
+         style="fill:#191919;fill-opacity:1;stroke:none;stroke-width:0.284347"
+         id="rect4281"
+         width="200"
+         height="200.00011"
+         x="8789.3555"
+         y="2385.1848" />
+      <g
+         id="g1247"
+         transform="matrix(0.75,0,0,0.75,1729.7789,386.40491)">
+        <path
+           id="path4303"
+           
style="fill:#fd7e14;fill-opacity:1;stroke:none;stroke-width:1.40209;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 9551.1873,2698.3734 v 38.6156 h 15.2577 v -3.0224 l 
6.7796,-6.7797 h 20.339 20.339 l 6.7797,6.7797 v 20.0692 a 27.118644,27.118644 
0 0 1 0,0.2698 v 20.3389 l -6.7797,6.7797 h -20.339 -20.339 l -6.7796,-6.7797 v 
-3.7572 h -15.2577 v 54.2372 h 15.2577 v -3.0223 l 6.7796,-6.7797 h 20.339 
20.339 l 6.7797,6.7797 v 20.0692 a 27.118644,27.118644 0 0 1 0,0.2698 v 20.3389 
l -6.7797,6.7797 h -20.339 -20.339 l -6.7796,-6.7797 v -3.7573 h -15.2577 v 
39.3506 h 82.2034 l 12.7119,-12.71 [...]
+        <path
+           id="path4305"
+           style="fill:#ffffff;fill-opacity:1;stroke-width:1.86014"
+           d="m 9458.8145,2698.3733 -12.7119,12.7119 v 174.5763 l 
12.7119,12.7119 h 82.2034 v -39.3506 -8.9545 h 35.5966 v 5.9322 l 3.3898,3.3898 
h 27.1186 l 3.3899,-3.3898 v -27.1187 l -3.3899,-3.3898 h -27.1186 l 
-3.3898,3.3898 v 5.9322 h -35.5966 v -9.6895 -54.2372 -8.9546 h 35.5966 v 
5.9322 l 3.3898,3.3898 h 27.1186 l 3.3899,-3.3898 v -27.1187 l -3.3899,-3.3898 
h -27.1186 l -3.3898,3.3898 v 5.9322 h -35.5966 v -9.6894 -38.6157 z m 
13.5593,16.9492 h 51.6949 v 166.1017 h -51.6949 l -9. [...]
+      </g>
+      <path
+         style="fill:#191919;fill-opacity:1;stroke-width:0.844933"
+         d="m 8989.3555,2485.1848 v -100 h 282.3611 282.3612 v 100 100 h 
-282.3612 -282.3611 z"
+         id="path222" />
+      <text
+         xml:space="preserve"
+         
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:98.8576px;line-height:1.25;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;fill:#fd7e14;fill-opacity:1;stroke:none;stroke-width:0.726558"
+         x="9530.4248"
+         y="2427.2546"
+         id="text260"
+         transform="scale(0.96288659,1.0385439)"><tspan
+           id="tspan258"
+           x="9530.4248"
+           y="2427.2546"
+           
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;stroke-width:0.726558">X%</tspan></text>
+    </g>
+  </g>
+</svg>
diff --git a/src/static/images/badge-running.svg 
b/src/static/images/badge-running.svg
new file mode 100644
index 0000000..0a4b096
--- /dev/null
+++ b/src/static/images/badge-running.svg
@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="99.998856"
+   height="26.153"
+   id="svg2"
+   version="1.1"
+   inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
+   sodipodi:docname="badge_running.svg">
+  <title
+     id="title3831">Cuirass icon</title>
+  <defs
+     id="defs4">
+    <rect
+       x="9094.3613"
+       y="2431.5554"
+       width="363.25549"
+       height="110.18591"
+       id="rect226" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8"
+     inkscape:cx="71.646296"
+     inkscape:cy="11.632563"
+     inkscape:document-units="px"
+     inkscape:current-layer="g328"
+     showgrid="false"
+     inkscape:window-width="2560"
+     inkscape:window-height="1376"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     inkscape:showpageshadow="false"
+     borderlayer="true"
+     inkscape:document-rotation="0"
+     inkscape:snap-global="true"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:snap-bbox="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     showborder="false">
+    <inkscape:grid
+       type="axonomgrid"
+       id="grid3004"
+       units="mm"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       spacingy="3.7mm"
+       originx="-8829.3366"
+       originy="-1180.3996" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title>Cuirass icon</dc:title>
+        <dc:date>2021-01-09</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Luis Felipe López Acevedo</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:rights>
+          <cc:Agent>
+            <dc:title />
+          </cc:Agent>
+        </dc:rights>
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/"; />
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/by-sa/4.0/";>
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Reproduction"; />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Distribution"; />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#Notice"; />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#Attribution"; />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#DerivativeWorks"; />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#ShareAlike"; />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="ref"
+     sodipodi:insensitive="true"
+     transform="translate(-8814.2185,-1148.2736)" />
+  <g
+     inkscape:label="layer"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-8814.2185,-2000.6358)">
+    <text
+       xml:space="preserve"
+       id="text224"
+       
style="font-style:normal;font-weight:normal;font-size:96px;line-height:0;font-family:sans-serif;white-space:pre;shape-inside:url(#rect226);fill:#000000;fill-opacity:1;stroke:none;"><tspan
+         style="visibility:hidden"
+         x="9094.3613"
+         y="2631.4797"><tspan
+           dx="0 61.078125 61.078125"
+           
style="font-size:96px;line-height:1.35;fill:#ff6600">40%</tspan></tspan></text>
+    <path
+       style="fill:#fd7e14;fill-opacity:1;stroke-width:0.707107"
+       d=""
+       id="path244"
+       transform="translate(9421.1025,2673.3733)" />
+    <path
+       style="fill:#fd7e14;fill-opacity:1;stroke-width:0.707107"
+       d=""
+       id="path246"
+       transform="translate(9421.1025,2673.3733)" />
+    <g
+       id="g328"
+       transform="matrix(0.13076492,0,0,0.13076492,7664.8791,1688.7373)">
+      <rect
+         style="fill:#191919;fill-opacity:1;stroke:none;stroke-width:0.284347"
+         id="rect4281"
+         width="200"
+         height="200.00011"
+         x="8789.3555"
+         y="2385.1848" />
+      <g
+         id="g1247"
+         transform="matrix(0.75,0,0,0.75,1729.7789,386.40491)">
+        <path
+           id="path4303"
+           
style="fill:#fd7e14;fill-opacity:1;stroke:none;stroke-width:1.40209;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 9551.1873,2698.3734 v 38.6156 h 15.2577 v -3.0224 l 
6.7796,-6.7797 h 20.339 20.339 l 6.7797,6.7797 v 20.0692 a 27.118644,27.118644 
0 0 1 0,0.2698 v 20.3389 l -6.7797,6.7797 h -20.339 -20.339 l -6.7796,-6.7797 v 
-3.7572 h -15.2577 v 54.2372 h 15.2577 v -3.0223 l 6.7796,-6.7797 h 20.339 
20.339 l 6.7797,6.7797 v 20.0692 a 27.118644,27.118644 0 0 1 0,0.2698 v 20.3389 
l -6.7797,6.7797 h -20.339 -20.339 l -6.7796,-6.7797 v -3.7573 h -15.2577 v 
39.3506 h 82.2034 l 12.7119,-12.71 [...]
+        <path
+           id="path4305"
+           style="fill:#ffffff;fill-opacity:1;stroke-width:1.86014"
+           d="m 9458.8145,2698.3733 -12.7119,12.7119 v 174.5763 l 
12.7119,12.7119 h 82.2034 v -39.3506 -8.9545 h 35.5966 v 5.9322 l 3.3898,3.3898 
h 27.1186 l 3.3899,-3.3898 v -27.1187 l -3.3899,-3.3898 h -27.1186 l 
-3.3898,3.3898 v 5.9322 h -35.5966 v -9.6895 -54.2372 -8.9546 h 35.5966 v 
5.9322 l 3.3898,3.3898 h 27.1186 l 3.3899,-3.3898 v -27.1187 l -3.3899,-3.3898 
h -27.1186 l -3.3898,3.3898 v 5.9322 h -35.5966 v -9.6894 -38.6157 z m 
13.5593,16.9492 h 51.6949 v 166.1017 h -51.6949 l -9. [...]
+      </g>
+      <path
+         style="fill:#191919;fill-opacity:1;stroke-width:0.844933"
+         d="m 8989.3555,2485.1848 v -100 h 282.3611 282.3612 v 100 100 h 
-282.3612 -282.3611 z"
+         id="path222" />
+      <text
+         xml:space="preserve"
+         
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:98.8576px;line-height:1.25;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;fill:#fd7e14;fill-opacity:1;stroke:none;stroke-width:0.726558"
+         x="9455.4414"
+         y="2420.0381"
+         id="text260"
+         transform="scale(0.96288659,1.0385439)"><tspan
+           sodipodi:role="line"
+           id="tspan258"
+           x="9455.4414"
+           y="2420.0381"
+           
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;stroke-width:0.726558">running</tspan></text>
+    </g>
+  </g>
+</svg>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]