Compare commits

..

117 Commits

Author SHA1 Message Date
Ana Armas Romero 200b0c34b1 Merge pull request #1254 from actions/move-code-scanning-workflows
Validate Data / validate-data (push) Has been cancelled
Move code scanning workflows
2021-11-23 14:21:15 +01:00
anaarmas 0debae5ec7 fix crunch42 template id so it overrides old template as required 2021-11-23 09:37:32 +01:00
anaarmas 52edf1b580 add a bunch of code scanning workflows 2021-11-19 16:55:27 +01:00
Nick Fyson da223f8a03 Merge pull request #1238 from meme/nowsecure
Add NowSecure starter workflow
2021-11-15 22:23:51 +00:00
Keegan Saunders f61ca9907b Add NowSecure starter workflow 2021-11-15 08:40:01 -05:00
rui 56c93ff752 elixir: refresh dependencies (#1212)
- setup action got renamed into `setup-beam`
- update elixir and erlang versions
2021-11-08 11:14:50 -05:00
rui 1d8891efc2 r: use setup-r@1 and include r@4 for starter (#1169)
* r: use setup-r@1 and include r@4 for starter

Signed-off-by: Rui Chen <rui@chenrui.dev>

* use sha instead of tag for external action

Co-authored-by: Josh Gross <joshmgross@github.com>

Co-authored-by: Josh Gross <joshmgross@github.com>
2021-10-28 11:37:36 -04:00
Andy McKay 93ee3d86f6 Merge pull request #1168 from chenrui333/python-3.10
python: update to use python 3.10
2021-10-28 07:40:41 -07:00
Andy McKay 97d8c1c765 Merge branch 'main' into python-3.10 2021-10-28 07:39:33 -07:00
Nick Fyson 1b52eb3e6f Merge pull request #1160 from abirismyname/adding-mobsf-to-codescanning 2021-10-27 21:38:42 +01:00
Nick Fyson 216dc929eb Merge branch 'main' into adding-mobsf-to-codescanning 2021-10-27 21:34:36 +01:00
David Verdeguer ef1ebb2538 Merge pull request #1180 from actions/daverlo/ruby-beta
Add ruby and update CodeQL workflow
2021-10-27 16:07:51 +02:00
David Verdeguer 440e8daf05 Merge branch 'main' into daverlo/ruby-beta 2021-10-27 16:01:12 +02:00
Marco Gario 0f5b68ee4f Merge pull request #1198 from d-winsor/msvc-typo
Fixed typo in Microsoft C++ Code Analysis workflow.
2021-10-27 10:16:35 +02:00
Daniel Winsor d9dc2c2f72 Update commit SHA 2021-10-26 21:48:19 -07:00
Daniel Winsor 83bdb0fcd6 Fixed typo in workflow that will cause every run to fail 2021-10-26 21:37:36 -07:00
Abir Majumdar ed8c87df74 Update code-scanning/properties/mobsf.properties.json
Co-authored-by: Nick Fyson <nickfyson@github.com>
2021-10-25 21:40:48 -04:00
Abir Majumdar 09b078fd76 Update code-scanning/mobsf.yml
Co-authored-by: Nick Fyson <nickfyson@github.com>
2021-10-25 21:40:31 -04:00
David Verdeguer 4a9a12a099 Update codeql.properties.json 2021-10-22 11:52:12 +02:00
David Verdeguer 3a3f99717d Update codeql.properties.json 2021-10-22 11:40:38 +02:00
David Verdeguer 281a35c5ef Update code-scanning/properties/codeql.properties.json
Co-authored-by: Arthur Baars <arthur@semmle.com>
2021-10-22 11:37:35 +02:00
David Verdeguer dcdce00205 Update codeql.properties.json 2021-10-22 10:54:14 +02:00
Nick Fyson 8a8c5b274c Merge pull request #1183 from actions/nickfyson-patch-1
correct typo in msvc.properties.json
2021-10-22 09:36:46 +01:00
Nick Fyson 149db50d43 correct typo in msvc.properties.json 2021-10-22 09:33:24 +01:00
Nick Fyson c3de16f318 Merge pull request #1181 from d-winsor/msvc-analysis
Microsoft C++ Code Analysis Action
2021-10-22 09:31:29 +01:00
Rui Chen 40f0709bd6 quote the version strings 2021-10-22 01:14:49 -04:00
Daniel Winsor 9fccb15dc6 Updated action to meet guidelines 2021-10-21 16:18:11 -07:00
Daniel Winsor bafed29a86 Add workflow for Microsoft C++ Code Analysis 2021-10-21 14:14:02 -07:00
David Verdeguer 042eac3858 Add ruby and update workflow 2021-10-21 22:11:00 +02:00
Ashwin Sangem e3fc80f30e Revert "Added new templates for 3 clouds."
This reverts commit c765d6316f.
2021-10-21 08:59:43 +00:00
Ashwin Sangem c765d6316f Added new templates for 3 clouds. 2021-10-21 14:27:06 +05:30
Rui Chen e6620ddc5b python: update to use python 3.10
Signed-off-by: Rui Chen <rui@chenrui.dev>
2021-10-20 00:02:48 -04:00
Abir Majumdar 6e44c89176 Adhering to pull request guidelines 2021-10-15 08:55:34 -04:00
Abir Majumdar ffef54a02c Adding MobSF starter workflow 2021-10-15 08:37:05 -04:00
Nick Fyson 700743e332 Merge pull request #1153 from yi2020/patch-1
Correct character-case of "c" in Cloudrail
2021-10-12 09:58:03 +01:00
Nick Fyson a857e4e5a6 Merge branch 'main' into patch-1 2021-10-12 09:56:26 +01:00
Sarah Edwards 6b14bf21cb trigger on push instead of release (#1157)
Co-authored-by: Josh Gross <joshmgross@github.com>
2021-10-11 15:53:15 -04:00
Ashwin Sangem ad91ff259d AWS template also used Docker 2021-10-11 14:58:21 +05:30
Yoni Leitersdorf 2e38bc8da2 Correct character-case of "c" in Cloudrail 2021-10-06 12:52:26 -07:00
Nick Fyson 5b659e82b4 Merge pull request #1110 from manuelbcd/main
Sysdig inline scanning
2021-10-06 10:14:48 +01:00
manuelbcd 764ebceaf5 Merge branch 'main' into main 2021-10-05 22:46:19 +02:00
Nick Fyson 122f83ece7 Merge pull request #1152 from actions/nickfyson/fix-fortify
Rename fortify.json to fortify.properties.json
2021-10-05 20:50:47 +01:00
Nick Fyson 6a1dba2d71 Rename fortify.json to fortify.properties.json 2021-10-05 20:44:48 +01:00
Nick Fyson a95943d406 Merge pull request #1090 from fortify/main
Add Fortify on Demand code scanning workflow
2021-10-05 20:24:09 +01:00
manuelbcd d07ff38b96 Merge branch 'main' into main 2021-10-05 15:10:10 +02:00
manuelbcd 3c200bdb21 Switched svg logo (again) for a better fit 2021-10-05 15:09:31 +02:00
manuelbcd b258b33234 Rename sysdig.svg to sysdig-scan.svg 2021-10-05 15:02:00 +02:00
manuelbcd c342a0c6e3 Merge branch 'main' of github.com:manuelbcd/starter-workflows 2021-10-05 10:40:25 +02:00
manuelbcd b55a65157e Changed svg logo 2021-10-05 10:39:56 +02:00
manuelbcd b7d9f15826 Update code-scanning/properties/sysdig-scan.properties.json
Co-authored-by: Nick Fyson <nickfyson@github.com>
2021-10-05 09:30:53 +02:00
manuelbcd 2a1abda503 Update code-scanning/properties/sysdig-scan.properties.json
Co-authored-by: Nick Fyson <nickfyson@github.com>
2021-10-05 09:30:45 +02:00
Aparna Ravindra 85d2a866f0 removing "deployment" templates from sync-ghes (#1127) 2021-10-05 11:22:46 +05:30
Nick Fyson 5d273fbcb3 Merge pull request #1047 from yi2020/add_cloudrail
Add Indeni Cloudrail
2021-10-04 19:45:31 +01:00
Nick Fyson d4dccf0b1e Merge branch 'main' into add_cloudrail 2021-10-04 19:44:55 +01:00
Yoni Leitersdorf c705225b8f Apply suggestions from nickfyson's code review
Co-authored-by: Nick Fyson <nickfyson@github.com>
2021-10-04 09:48:47 -07:00
Sarah Edwards 596b345944 use env variables for user-set values (#1117)
Co-authored-by: Josh Gross <joshmgross@github.com>
2021-10-01 15:07:03 -04:00
Ashwin Sangem 7b9e3b6858 Revert "Azure Data Factory CI starter workflow (#1111)" (#1146)
This reverts commit 7f30309cce.
2021-10-01 18:50:08 +05:30
Ana Armas Romero 13f632a90b Merge pull request #1144 from swarkentin/patch-1
Remove mention of trial for Mayhem for API
2021-09-30 11:41:10 +02:00
Ana Armas Romero 65fef9614f Merge branch 'main' into patch-1 2021-09-30 11:40:11 +02:00
Aparna Ravindra 02d91c6ccf checking for allowed category in validate-data script (#1131)
* checking for allowed category

* Update index.ts
2021-09-30 10:19:20 +05:30
Ashwin Sangem 6b053712be Added dockerfile to relevant CD template categories. (#1136)
* Added Dockerfile to Category for relevant CD templates.

* Update terraform.properties.json
2021-09-30 07:31:43 +05:30
Sheldon Warkentin 8c91a4c02f Remoev mention of trial for Mayhem for API
A free plan is now in place with a professional trial that may be opted into afterward.
2021-09-29 13:45:57 -06:00
Nick Fyson 15daabeaa4 Merge pull request #1129 from actions/nickfyson/validate-code-scanning
start validating code-scanning workflows
2021-09-29 16:18:11 +01:00
Nick Fyson 4087ed4594 Merge branch 'main' into nickfyson/validate-code-scanning 2021-09-29 16:11:58 +01:00
Fernando de Oliveira 7f30309cce Azure Data Factory CI starter workflow (#1111)
* Azure Data Factory CI starter workflow

* fix: data factory starter categories

* fix: checkout step formatting

* fix: data-factory-export targeting latest version

* feature: latest adf validate and export versions

* feature: Azure Data Factory tech_stack category for CI starter

Co-authored-by: Fernando de Oliveira <5161098+fernandoBRS@users.noreply.github.com>
2021-09-29 10:32:01 +05:30
Gary Houbre f0b8c8ad72 Starter workflow Symfony (#1069)
* Add Symfony to starter Workflow

* Added Properties from Symfony

* Update symfony.yml

* Update symfony.yml

* Update symfony.yml

* Fix Wrong Configuration

* Review and fixing

* Update Symfony Properties Category

Co-authored-by: Ashwin Sangem <ashwinsangem@github.com>
2021-09-28 15:11:17 +05:30
Nick Fyson 70655750b2 check for yml and yaml extensions 2021-09-28 09:37:43 +01:00
Ruud Senden cb6678504a File renames as requested in PR comments 2021-09-28 10:24:29 +02:00
Ruud Senden fd79bd4838 Merge branch 'main' into main 2021-09-28 10:21:39 +02:00
Nick Fyson b5a43f8049 Merge branch 'main' into add_cloudrail 2021-09-27 21:35:59 +01:00
Nick Fyson 9426610033 Merge branch 'main' into nickfyson/validate-code-scanning 2021-09-27 20:46:46 +01:00
Nick Fyson b58a4e21c6 start validating code-scanning workflows 2021-09-27 20:35:10 +01:00
Randy Kleinman 4a9a1680df Update README grammar (#1123)
substitue -> substitute
2021-09-24 18:05:34 -04:00
Aparna Ravindra 5a1343bb22 Adding template - Build Xcode project (#1095)
* adding build for xcode

* renaming template

Co-authored-by: Ashwin Sangem <ashwinsangem@github.com>
2021-09-23 10:29:50 +05:30
Ruud Senden 97de22b47c Update according to PR review comments 2021-09-22 14:12:39 +02:00
Ruud Senden 835899e531 Merge branch 'actions:main' into main 2021-09-22 14:07:52 +02:00
Fernando de Oliveira 55f65bcc15 Directory structure updated (#1112)
Co-authored-by: Fernando de Oliveira <5161098+fernandoBRS@users.noreply.github.com>
2021-09-22 16:37:22 +05:30
manuelbcd 9b4fcbf911 Adding 'Dockerfile' to category list 2021-09-21 11:25:16 +02:00
manuelbcd 7d41cdb581 Reviews from PR #1110 2021-09-21 11:03:21 +02:00
Ninad Kavimandan e4091f2f55 add Vue to nodejs props (#1109) 2021-09-21 13:35:26 +05:30
manuelbcd 38d4e3bfd2 Added some extra comments, Github Actions V2 and changed env vars 2021-09-20 11:52:53 +02:00
Cadu Ribeiro 6dfa11d0c4 Add github/super-linter as starter workflow on CI (#1089)
This commit adds github/super-linter as a starter workflow to execute
several linters based on the user codebase on changed files.

Co-authored-by: Josh Gross <joshmgross@github.com>
2021-09-17 16:58:46 -04:00
Ruud Senden 45ae2e08fc Merge branch 'main' into main 2021-09-17 12:38:42 +02:00
Manuel Boira Cuevas 5e116cb9e8 Sysdig Secure Inline Scan with SARIF report to starter workflows 2021-09-16 10:47:05 +02:00
Ninad Kavimandan c36ea2c560 add Continuous integration to makefile props (#1100) 2021-09-16 11:51:53 +05:30
Ninad Kavimandan 59daabb07b support AspNetCore and DotNetConsole (#1096)
Co-authored-by: Ashwin Sangem <ashwinsangem@github.com>
2021-09-16 11:19:17 +05:30
Ninad Kavimandan 9095e7c9d5 added prefix npm- (#1097) 2021-09-16 11:17:56 +05:30
Ninad Kavimandan 1cb322141e add makefile template (#1093)
Co-authored-by: Ashwin Sangem <ashwinsangem@github.com>
2021-09-16 11:02:21 +05:30
Shubham Tiwari df5ac56102 Adding category in the template property file (#1092)
* adding category in the template property file

* added category on ruby template
2021-09-16 11:00:07 +05:30
Aparna Ravindra dda42cb8f2 Addition to categories to python templates (#1088)
* addition to categories for python-app template

* adding categories to pylint template

* adding categories to python-package template

Co-authored-by: Ashwin Sangem <ashwinsangem@github.com>
2021-09-15 20:04:06 +05:30
Aparna Ravindra 3175118151 Addressing review comments - Renaming template and updating setup-ruby action version (#1086)
* renaming template and updating setup-ruby action version

* renaming rubyrails files

* renaming rails files
2021-09-15 20:02:11 +05:30
John Bohannon 238e55b9b4 Merge pull request #1091 from tetchel/openshift-ghcr-squashed
Update OpenShift workflow to use GHCR by default (#6)
2021-09-14 15:01:30 -04:00
Tim Etchells 149cf11287 Update github-script major version
Co-authored-by: John Bohannon <imjohnbo@github.com>
2021-09-14 11:52:30 -07:00
Tim Etchells 48e2865d35 Update OpenShift workflow to use GHCR by default (#6)
- Simplifies required configuration since a registry account is now
  optional
- Update a variety of comments
- Use tools-installer to install oc
- Other small changes towards a better UX

Signed-off-by: Tim Etchells <tetchel@gmail.com>
2021-09-14 11:12:35 -07:00
Ruud Senden 30715e86a4 Add 3rd-party GitHub Actions disclaimer 2021-09-14 09:06:33 +02:00
Ruud Senden ddf7fe1e94 Merge branch 'actions:main' into main 2021-09-14 08:58:07 +02:00
Ruud Senden 6d89fb8045 Update Fortify on Demand supported languages 2021-09-14 08:56:36 +02:00
Ashwin Sangem 028df69d88 Added support for Java Frameworks, Spring and JSF to CI Templates. (#1087) 2021-09-14 08:04:52 +05:30
Ruud Senden 99fae1ecb1 Update Fortify on Demand workflow 2021-09-13 10:29:38 +02:00
Ruud Senden b671ee6c7b Add original Fortify on Demand workflow 2021-09-13 10:16:30 +02:00
tmash06 b33f57dde1 Fixed a broken link to actions/upload-a-build-artifact in dotnet-desktop.yml. (#1074)
Co-authored-by: Josh Gross <joshmgross@github.com>
2021-09-09 15:45:29 -04:00
Ninad Kavimandan 84a9757692 added React and Angular as categories to node (#1084) 2021-09-09 16:16:31 +05:30
Nick Fyson 29e8b6c38a Merge pull request #1081 from actions/nickfyson/add-codeql-to-ghes
Nickfyson/add codeql to ghes
2021-09-08 11:05:03 +01:00
Nick Fyson c2cc54a69e only check nwo of supported actions 2021-09-08 10:28:14 +01:00
Nick Fyson 7aa1944311 only run ghes sync checks on YML files 2021-09-08 10:08:06 +01:00
Nick Fyson e6aff964db add codeql workflow to ghes 2021-09-08 09:54:15 +01:00
Nick Fyson ff4d33e44b Merge pull request #1080 from actions/revert-1077-nickfyson/add-codeql-to-ghes
Revert "add codeql workflow to ghes branch"
2021-09-08 07:27:03 +01:00
Nick Fyson 41e3bc11ea Revert "add codeql workflow to ghes branch" 2021-09-08 07:26:24 +01:00
Nick Fyson 79ff92ef6d Merge pull request #1077 from actions/nickfyson/add-codeql-to-ghes
add codeql workflow to ghes branch
2021-09-08 07:24:31 +01:00
Nick Fyson e9f0116056 Merge branch 'main' into nickfyson/add-codeql-to-ghes 2021-09-08 07:23:25 +01:00
Aparna Ravindra 237e7737ce restoring from main (#1078) 2021-09-08 11:52:12 +05:30
Nick Fyson fc748cc482 add codeql workflow to ghes 2021-09-06 15:25:04 +00:00
Aparna Ravindra 7b64f44165 Directory for deployments (#1071)
* moving deployment templates

* including deployment directory in scripts

* validate categories script init

* introducing scout

* introducing workflow

* Update validate-categories.yaml

* Update validate-categories.yaml

* Update validate-categories.yaml

* Update validate.rb

* Update validate.rb

* Update validate.rb

* Update validate.rb

* Update validate-categories.yaml

* Update validate-categories.yaml

* Update validate-categories.yaml

* Update validate.rb

* Update validate-categories.yaml

* Update validate-categories.yaml

* Create test_comment.yaml

* rename

* using [enter]

* testing newline

* test

* setting up variable

* using echo -e

* using join

* testing space space new line

* setting multi line in echo

* removing checkout

* setting rows-generator

* fixing error

* using join

* commit

* Update test_comment.yaml

* escaping pipe

* printing debug line

* using %0A

* Update validate-categories.yaml

* Update validate.rb

* Update validate.rb

* removing debug

* removing variable

* Update validate.rb

* Update validate-categories.yaml

* Validate categories comment on pr (#32)

* reverting deployment directory

* checking for output

* Categories validation two workflows (#34)

comment on pr in a separate workflow

* Categories validation two workflows (#35)

using right dir name

* Categories validation two workflows (#36)

.

* Categories validation two workflows (#37)

fixing typo

* adding if conditions

* adding try catch

* using console instead of echo

* equating to upstream

* moving deployment templates
2021-09-06 11:04:54 +05:30
Varun Sharma ac64f9caf5 Secure workflows (#1) (#1072)
* Restrict permissions for the GITHUB_TOKEN in .github/workflows/label-feature.yml

* Restrict permissions for the GITHUB_TOKEN in .github/workflows/label-support.yml

* Restrict permissions for the GITHUB_TOKEN in .github/workflows/stale.yml

* Restrict permissions for the GITHUB_TOKEN in .github/workflows/sync_ghes.yaml

* Restrict permissions for the GITHUB_TOKEN in .github/workflows/validate-data.yaml

Co-authored-by: Step Security <bot@stepsecurity.io>

Co-authored-by: step-security[bot] <89328102+step-security[bot]@users.noreply.github.com>
Co-authored-by: Step Security <bot@stepsecurity.io>
2021-09-02 16:05:24 -04:00
Yoni Leitersdorf 98bde3b31e Oops 2021-08-17 07:32:50 -07:00
Yoni Leitersdorf 188b52b51c Adding Cloudrail according to documentation and examples 2021-08-17 07:29:29 -07:00
Yoni Leitersdorf 69184c7484 Added Cloudrail according to instructions and existing examples 2021-08-17 07:29:02 -07:00
108 changed files with 3429 additions and 337 deletions
+3 -2
View File
@@ -12,7 +12,8 @@ These are the workflow files for helping people get started with GitHub Actions.
### Directory structure ### Directory structure
* [ci](ci): solutions for Continuous Integration and Deployments * [ci](ci): solutions for Continuous Integration workflows.
* [deployments](deployments): solutions for Deployment workflows.
* [automation](automation): solutions for automating workflows. * [automation](automation): solutions for automating workflows.
* [code-scanning](code-scanning): starter workflows for [Code Scanning](https://github.com/features/security) * [code-scanning](code-scanning): starter workflows for [Code Scanning](https://github.com/features/security)
* [icons](icons): svg icons for the relevant template * [icons](icons): svg icons for the relevant template
@@ -44,5 +45,5 @@ For example: `ci/django.yml` and `ci/properties/django.properties.json`.
These variables can be placed in the starter workflow and will be substituted as detailed below: These variables can be placed in the starter workflow and will be substituted as detailed below:
* `$default-branch`: will substitute the branch from the repository, for example `main` and `master` * `$default-branch`: will substitute the branch from the repository, for example `main` and `master`
* `$protected-branches`: will substitue any protected branches from the repository. * `$protected-branches`: will substitute any protected branches from the repository
* `$cron-daily`: will substitute a valid but random time within the day * `$cron-daily`: will substitute a valid but random time within the day
+3 -3
View File
@@ -15,10 +15,10 @@ jobs:
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: Set up Elixir - name: Set up Elixir
uses: erlef/setup-elixir@885971a72ed1f9240973bd92ab57af8c1aa68f24 uses: erlef/setup-beam@988e02bfe678367a02564f65ca2e37726dc0268f
with: with:
elixir-version: '1.10.3' # Define the elixir version [required] elixir-version: '1.12.3' # Define the elixir version [required]
otp-version: '22.3' # Define the OTP version [required] otp-version: '24.1' # Define the OTP version [required]
- name: Restore dependencies cache - name: Restore dependencies cache
uses: actions/cache@v2 uses: actions/cache@v2
with: with:
+30
View File
@@ -0,0 +1,30 @@
name: Xcode - Build and Analyze
on:
push:
branches: [ $default-branch ]
pull_request:
branches: [ $default-branch ]
jobs:
build:
name: Build and analyse default scheme using xcodebuild command
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set Default Scheme
run: |
scheme_list=$(xcodebuild -list -json | tr -d "\n")
default=$(echo $scheme_list | ruby -e "require 'json'; puts JSON.parse(STDIN.gets)['project']['targets'][0]")
echo $default | cat >default
echo Using default scheme: $default
- name: Build
env:
scheme: ${{ 'default' }}
run: |
if [ $scheme = default ]; then scheme=$(cat default); fi
if [ "`ls -A | grep -i \\.xcworkspace\$`" ]; then filetype_parameter="workspace" && file_to_build="`ls -A | grep -i \\.xcworkspace\$`"; else filetype_parameter="project" && file_to_build="`ls -A | grep -i \\.xcodeproj\$`"; fi
file_to_build=`echo $file_to_build | awk '{$1=$1;print}'`
xcodebuild clean build analyze -scheme "$scheme" -"$filetype_parameter" "$file_to_build" | xcpretty && exit ${PIPESTATUS[0]}
+1 -1
View File
@@ -2,5 +2,5 @@
"name": "Node.js", "name": "Node.js",
"description": "Build and test a Node.js project with npm.", "description": "Build and test a Node.js project with npm.",
"iconName": "nodejs", "iconName": "nodejs",
"categories": ["Continuous integration", "JavaScript", "npm", "React", "Angular"] "categories": ["Continuous integration", "JavaScript", "npm", "React", "Angular", "Vue"]
} }
@@ -0,0 +1,6 @@
{
"name": "Xcode - Build and Analyze",
"description": "Build Xcode project using xcodebuild",
"iconName": "xcode",
"categories": ["Continuous integration", "Xcode", "Objective-C"]
}
-6
View File
@@ -1,6 +0,0 @@
{
"name": "Rails - Build and Run Linters",
"description": "Build Rails application and run linters",
"iconName": "ruby",
"categories": ["Ruby", "Rails"]
}
@@ -0,0 +1,6 @@
{
"name": "Super Linter - Run Linters for several languages",
"description": "Run linters for several languages on your code base for changed files",
"iconName": "octicon check-circle",
"categories": ["Continuous integration", "code-quality", "code-review"]
}
+10
View File
@@ -0,0 +1,10 @@
{
"name": "Symfony",
"description": "Test a Symfony project.",
"iconName": "php",
"categories": [
"Continuous integration",
"PHP",
"Symfony"
]
}
+5 -4
View File
@@ -4,15 +4,16 @@ on: [push]
jobs: jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10"]
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: Set up Python 3.9 - name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2 uses: actions/setup-python@v2
with: with:
python-version: 3.9 python-version: ${{ matrix.python-version }}
- name: Install dependencies - name: Install dependencies
run: | run: |
python -m pip install --upgrade pip python -m pip install --upgrade pip
+2 -2
View File
@@ -16,10 +16,10 @@ jobs:
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: Set up Python 3.9 - name: Set up Python 3.10
uses: actions/setup-python@v2 uses: actions/setup-python@v2
with: with:
python-version: 3.9 python-version: "3.10"
- name: Install dependencies - name: Install dependencies
run: | run: |
python -m pip install --upgrade pip python -m pip install --upgrade pip
+2 -2
View File
@@ -10,10 +10,10 @@ jobs:
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: Set up Python 3.8 - name: Set up Python 3.10
uses: actions/setup-python@v2 uses: actions/setup-python@v2
with: with:
python-version: 3.8 python-version: 3.10
- name: Add conda to system path - name: Add conda to system path
run: | run: |
# $CONDA is an environment variable pointing to the root of the miniconda directory # $CONDA is an environment variable pointing to the root of the miniconda directory
+1 -1
View File
@@ -16,7 +16,7 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
python-version: [3.7, 3.8, 3.9] python-version: ["3.8", "3.9", "3.10"]
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
+2 -2
View File
@@ -19,12 +19,12 @@ jobs:
runs-on: macos-latest runs-on: macos-latest
strategy: strategy:
matrix: matrix:
r-version: [3.5, 3.6] r-version: ['3.6.3', '4.1.1']
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: Set up R ${{ matrix.r-version }} - name: Set up R ${{ matrix.r-version }}
uses: r-lib/actions/setup-r@ffe45a39586f073cc2e9af79c4ba563b657dc6e3 uses: r-lib/actions/setup-r@f57f1301a053485946083d7a45022b278929a78a
with: with:
r-version: ${{ matrix.r-version }} r-version: ${{ matrix.r-version }}
- name: Install dependencies - name: Install dependencies
-32
View File
@@ -1,32 +0,0 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will download a prebuilt Ruby version, install dependencies, and run linters
name: Build Rails and run linters
on:
push:
branches: [ $default-branch ]
pull_request:
branches: [ $default-branch ]
jobs:
run-lint:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Setup Ruby and install gems
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
# Add or Replace any other security checks here
- name: Run security checks
run: |
bin/bundler-audit --update
bin/brakeman -q -w2
# Add or Replace any other Linters here
- name: Run linters
run: |
bin/rubocop --parallel
+29
View File
@@ -0,0 +1,29 @@
# This workflow executes several linters on changed files based on languages used in your code base whenever
# you push a code or open a pull request.
#
# You can adjust the behavior by modifying this file.
# For more information, see:
# https://github.com/github/super-linter
name: Lint Code Base
on:
push:
branches: [ $default-branch ]
pull_request:
branches: [ $default-branch ]
jobs:
run-lint:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
# Full git history is needed to get a proper list of changed files within `super-linter`
fetch-depth: 0
- name: Lint Code Base
uses: github/super-linter@v4
env:
VALIDATE_ALL_CODEBASE: false
DEFAULT_BRANCH: $default-branch
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+39
View File
@@ -0,0 +1,39 @@
name: Symfony
on:
push:
branches: [ $default-branch ]
pull_request:
branches: [ $default-branch ]
jobs:
symfony-tests:
runs-on: ubuntu-latest
steps:
# To automatically get bug fixes and new Php versions for shivammathur/setup-php,
# change this to (see https://github.com/shivammathur/setup-php#bookmark-versioning):
# uses: shivammathur/setup-php@v2
- uses: shivammathur/setup-php@2cb9b829437ee246e9b3cac53555a39208ca6d28
with:
php-version: '8.0'
- uses: actions/checkout@v2
- name: Copy .env.test.local
run: php -r "file_exists('.env.test.local') || copy('.env.test', '.env.test.local');"
- name: Cache Composer packages
id: composer-cache
uses: actions/cache@v2
with:
path: vendor
key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
restore-keys: |
${{ runner.os }}-php-
- name: Install Dependencies
run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
- name: Create Database
run: |
mkdir -p data
touch data/database.sqlite
- name: Execute tests (Unit and Feature tests) via PHPUnit
env:
DATABASE_URL: sqlite:///%kernel.project_dir%/data/database.sqlite
run: vendor/bin/phpunit
+39
View File
@@ -0,0 +1,39 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow checks out code, builds an image, performs a container image
# vulnerability scan with Anchore's Grype tool, and integrates the results with GitHub Advanced Security
# code scanning feature. For more information on the Anchore scan action usage
# and parameters, see https://github.com/anchore/scan-action. For more
# information on Anchore's container image scanning tool Grype, see
# https://github.com/anchore/grype
name: Anchore Container Scan
on:
push:
branches: [ $default-branch, $protected-branches ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ $default-branch ]
schedule:
- cron: $cron-weekly
jobs:
Anchore-Build-Scan:
runs-on: ubuntu-latest
steps:
- name: Checkout the code
uses: actions/checkout@v2
- name: Build the Docker image
run: docker build . --file Dockerfile --tag localbuild/testimage:latest
- name: Run the Anchore scan action itself with GitHub Advanced Security code scanning integration enabled
uses: anchore/scan-action@b08527d5ae7f7dc76f9621edb6e49eaf47933ccd
with:
image: "localbuild/testimage:latest"
acs-report-enable: true
- name: Upload Anchore Scan Report
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: results.sarif
+51
View File
@@ -0,0 +1,51 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow integrates Brakeman with GitHub's Code Scanning feature
# Brakeman is a static analysis security vulnerability scanner for Ruby on Rails applications
name: Brakeman Scan
on:
push:
branches: [ $default-branch, $protected-branches ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ $default-branch ]
schedule:
- cron: $cron-weekly
jobs:
brakeman-scan:
name: Brakeman Scan
runs-on: ubuntu-latest
steps:
# Checkout the repository to the GitHub Actions runner
- name: Checkout
uses: actions/checkout@v2
# Customize the ruby version depending on your needs
- name: Setup Ruby
uses: ruby/setup-ruby@f20f1eae726df008313d2e0d78c5e602562a1bcf
with:
ruby-version: '2.7'
- name: Setup Brakeman
env:
BRAKEMAN_VERSION: '4.10' # SARIF support is provided in Brakeman version 4.10+
run: |
gem install brakeman --version $BRAKEMAN_VERSION
# Execute Brakeman CLI and generate a SARIF output with the security issues identified during the analysis
- name: Scan
continue-on-error: true
run: |
brakeman -f sarif -o output.sarif.json .
# Upload the SARIF file generated in the previous step
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: output.sarif.json
+44
View File
@@ -0,0 +1,44 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This is a basic workflow to help you get started with Using Checkmarx CxFlow Action
name: CxFlow
on:
push:
branches: [ $default-branch, $protected-branches ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ $default-branch ]
schedule:
- cron: $cron-weekly
# A workflow run is made up of one or more jobs that can run sequentially or in parallel - this job is specifically configured to use the Checkmarx CxFlow Action
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on - Ubuntu is required as Docker is leveraged for the action
runs-on: ubuntu-latest
# Steps require - checkout code, run CxFlow Action, Upload SARIF report (optional)
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
# Runs the Checkmarx Scan leveraging the latest version of CxFlow - REFER to Action README for list of inputs
- name: Checkmarx CxFlow Action
uses: checkmarx-ts/checkmarx-cxflow-github-action@04e6403dbbfee0fd3fb076e5791202c31c54fe6b
with:
project: GithubActionTest
team: '\CxServer\SP\Checkmarx'
checkmarx_url: ${{ secrets.CHECKMARX_URL }}
checkmarx_username: ${{ secrets.CHECKMARX_USERNAME }}
checkmarx_password: ${{ secrets.CHECKMARX_PASSWORD }}
checkmarx_client_secret: ${{ secrets.CHECKMARX_CLIENT_SECRET }}
# Upload the Report for CodeQL/Security Alerts
- name: Upload SARIF file
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: cx.sarif
+58
View File
@@ -0,0 +1,58 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
name: Cloudrail
on:
push:
branches: [ $default-branch, $protected-branches ]
pull_request:
branches: [ $default-branch ]
schedule:
- cron: $cron-weekly
jobs:
cloudrail:
name: Run Indeni Cloudrail on Terraform code with SARIF output
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
steps:
- name: Clone repo
uses: actions/checkout@v2
# For Terraform, Cloudrail requires the plan as input. So we generate it using
# the Terraform core binary.
- uses: hashicorp/setup-terraform@v1
with:
terraform_version: v0.13.2
- run: terraform init
- run: terraform plan -out=plan.out
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# Confirm we have the plan file
- run: stat plan.out
- name: Run Cloudrail
uses: indeni/cloudrail-run-ga@b56ed2d30913c975b36df231adc2eabf05523622
with:
tf-plan-file: plan.out # This was created in a "terraform plan" step
cloudrail-api-key: ${{ secrets.CLOUDRAIL_API_KEY }} # This requires registration to Indeni Cloudrail's SaaS at https://web.cloudrail.app
cloud-account-id: # Leave this empty for Static Analaysis, or provide an account ID for Dynamic Analysis, see instructions in Cloudrail SaaS
- name: Upload SARIF file
uses: github/codeql-action/upload-sarif@v1
# Remember that if issues are found, Cloudrail return non-zero exit code, so the if: always()
# is needed to ensure the SARIF file is uploaded
if: always()
with:
sarif_file: cloudrail_results.sarif
+54
View File
@@ -0,0 +1,54 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow checks out code, performs a Codacy security scan
# and integrates the results with the
# GitHub Advanced Security code scanning feature. For more information on
# the Codacy security scan action usage and parameters, see
# https://github.com/codacy/codacy-analysis-cli-action.
# For more information on Codacy Analysis CLI in general, see
# https://github.com/codacy/codacy-analysis-cli.
name: Codacy Security Scan
on:
push:
branches: [ $default-branch, $protected-branches ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ $default-branch ]
schedule:
- cron: $cron-weekly
jobs:
codacy-security-scan:
name: Codacy Security Scan
runs-on: ubuntu-latest
steps:
# Checkout the repository to the GitHub Actions runner
- name: Checkout code
uses: actions/checkout@v2
# Execute Codacy Analysis CLI and generate a SARIF output with the security issues identified during the analysis
- name: Run Codacy Analysis CLI
uses: codacy/codacy-analysis-cli-action@d840f886c4bd4edc059706d09c6a1586111c540b
with:
# Check https://github.com/codacy/codacy-analysis-cli#project-token to get your project token from your Codacy repository
# You can also omit the token and run the tools that support default configurations
project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
verbose: true
output: results.sarif
format: sarif
# Adjust severity of non-security issues
gh-code-scanning-compat: true
# Force 0 exit code to allow SARIF file generation
# This will handover control about PR rejection to the GitHub side
max-allowed-issues: 2147483647
# Upload the SARIF file generated in the previous step
- name: Upload SARIF results file
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: results.sarif
+1 -2
View File
@@ -34,8 +34,7 @@ jobs:
matrix: matrix:
language: [ $detected-codeql-languages ] language: [ $detected-codeql-languages ]
# CodeQL supports [ $supported-codeql-languages ] # CodeQL supports [ $supported-codeql-languages ]
# Learn more: # Learn more about CodeQL language support at https://git.io/codeql-language-support
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
steps: steps:
- name: Checkout repository - name: Checkout repository
+42
View File
@@ -0,0 +1,42 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow requires that you have an existing account with codescan.io
# For more information about configuring your workflow,
# read our documentation at https://github.com/codescan-io/codescan-scanner-action
name: CodeScan
on:
push:
branches: [ $default-branch, $protected-branches ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ $default-branch ]
schedule:
- cron: $cron-weekly
jobs:
CodeScan:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Cache files
uses: actions/cache@v2
with:
path: |
~/.sonar
key: ${{ runner.os }}-sonar
restore-keys: ${{ runner.os }}-sonar
- name: Run Analysis
uses: codescan-io/codescan-scanner-action@5b2e8c5683ef6a5adc8fa3b7950bb07debccce12
with:
login: ${{ secrets.CODESCAN_AUTH_TOKEN }}
organization: ${{ secrets.CODESCAN_ORGANIZATION_KEY }}
projectKey: ${{ secrets.CODESCAN_PROJECT_KEY }}
- name: Upload SARIF file
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: codescan.sarif
+53
View File
@@ -0,0 +1,53 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow locates REST API file contracts
# (Swagger or OpenAPI format, v2 and v3, JSON and YAML)
# and runs 200+ security checks on them using 42Crunch Security Audit technology.
#
# Documentation is located here: https://docs.42crunch.com/latest/content/tasks/integrate_github_actions.htm
#
# To use this workflow, you will need to complete the following setup steps.
#
# 1. Create a free 42Crunch account at https://platform.42crunch.com/register
#
# 2. Follow steps at https://docs.42crunch.com/latest/content/tasks/integrate_github_actions.htm
# to create an API Token on the 42Crunch platform
#
# 3. Add a secret in GitHub as explained in https://docs.42crunch.com/latest/content/tasks/integrate_github_actions.htm,
# store the 42Crunch API Token in that secret, and supply the secret's name as api-token parameter in this workflow
#
# If you have any questions or need help contact https://support.42crunch.com
name: "42Crunch REST API Static Security Testing"
# follow standard Code Scanning triggers
on:
push:
branches: [ $default-branch, $protected-branches ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ $default-branch ]
schedule:
- cron: $cron-weekly
jobs:
rest-api-static-security-testing:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: 42Crunch REST API Static Security Testing
uses: 42Crunch/api-security-audit-action@96228d9c48873fe001354047d47fb62be42abeb1
with:
# Please create free account at https://platform.42crunch.com/register
# Follow these steps to configure API_TOKEN https://docs.42crunch.com/latest/content/tasks/integrate_github_actions.htm
api-token: ${{ secrets.API_TOKEN }}
# Fail if any OpenAPI file scores lower than 75
min-score: 75
# Upload results to Github code scanning
upload-to-code-scanning: true
# Github token for uploading the results
github-token: ${{ github.token }}
+97
View File
@@ -0,0 +1,97 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
################################################################################################################################################
# Fortify lets you build secure software fast with an appsec platform that automates testing throughout the DevSecOps pipeline. Fortify static,#
# dynamic, interactive, and runtime security testing is available on premises or as a service. To learn more about Fortify, start a free trial #
# or contact our sales team, visit microfocus.com/appsecurity. #
# #
# Use this workflow template as a basis for integrating Fortify on Demand Static Application Security Testing(SAST) into your GitHub workflows.#
# This template demonstrates the steps to prepare the code+dependencies, initiate a scan, download results once complete and import into #
# GitHub Security Code Scanning Alerts. Existing customers should review inputs and environment variables below to configure scanning against #
# an existing application in your Fortify on Demand tenant. Additional information is available in the comments throughout the workflow, the #
# documentation for the Fortify actions used, and the Fortify on Demand / ScanCentral Client product documentation. If you need additional #
# assistance with configuration, feel free to create a help ticket in the Fortify on Demand portal. #
################################################################################################################################################
name: Fortify on Demand Scan
# TODO: Customize trigger events based on your DevSecOps processes and typical FoD SAST scan time
on:
workflow_dispatch:
push:
branches: [ $default-branch ]
schedule:
- cron: $cron-weekly
jobs:
FoD-SAST-Scan:
# Use the appropriate runner for building your source code.
# TODO: Use a Windows runner for .NET projects that use msbuild. Additional changes to RUN commands will be required to switch to Windows syntax.
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
steps:
# Check out source code
- name: Check Out Source Code
uses: actions/checkout@v2
# Java is required to run the various Fortify utilities.
# When scanning a Java application, please use the appropriate Java version for building your application.
- name: Setup Java
uses: actions/setup-java@v1
with:
java-version: 1.8
# Prepare source+dependencies for upload. The default example is for a Maven project that uses pom.xml.
# TODO: Update PACKAGE_OPTS based on the ScanCentral Client documentation for your project's included tech stack(s). Helpful hints:
# ScanCentral Client will download dependencies for maven (-bt mvn) and gradle (-bt gradle).
# ScanCentral Client can download dependencies for msbuild projects (-bt msbuild); however, you must convert the workflow to use a Windows runner.
# ScanCentral has additional options that should be set for PHP and Python projects
# For other build tools, add your build commands to download necessary dependencies and prepare according to Fortify on Demand Packaging documentation.
# ScanCentral Client documentation is located at https://www.microfocus.com/documentation/fortify-software-security-center/
- name: Download Fortify ScanCentral Client
uses: fortify/gha-setup-scancentral-client@5b7382f8234fb9840958c49d5f32ae854115f9f3
- name: Package Code + Dependencies
run: scancentral package $PACKAGE_OPTS -o package.zip
env:
PACKAGE_OPTS: "-bt mvn"
# Start Fortify on Demand SAST scan and wait until results complete. For more information on FoDUploader commands, see https://github.com/fod-dev/fod-uploader-java
# TODO: Update ENV variables for your application and create the necessary GitHub Secrets. Helpful hints:
# Credentials and release ID should be obtained from your FoD tenant (either Personal Access Token or API Key can be used).
# Automated Audit preference should be configured for the release's Static Scan Settings in the Fortify on Demand portal.
- name: Download Fortify on Demand Universal CI Tool
uses: fortify/gha-setup-fod-uploader@6e6bb8a33cb476e240929fa8ebc739ff110e7433
- name: Perform SAST Scan
run: java -jar $FOD_UPLOAD_JAR -z package.zip -aurl $FOD_API_URL -purl $FOD_URL -rid "$FOD_RELEASE_ID" -tc "$FOD_TENANT" -uc "$FOD_USER" "$FOD_PAT" $FOD_UPLOADER_OPTS -n "$FOD_UPLOADER_NOTES"
env:
FOD_URL: "https://ams.fortify.com/"
FOD_API_URL: "https://api.ams.fortify.com/"
FOD_TENANT: ${{ secrets.FOD_TENANT }}
FOD_USER: ${{ secrets.FOD_USER }}
FOD_PAT: ${{ secrets.FOD_PAT }}
FOD_RELEASE_ID: ${{ secrets.FOD_RELEASE_ID }}
FOD_UPLOADER_OPTS: "-ep 2 -pp 0 -I 1 -apf"
FOD_UPLOADER_NOTES: 'Triggered by GitHub Actions (${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})'
# Once scan completes, pull SAST issues from Fortify on Demand and generate SARIF output.
- name: Export results to GitHub-optimized SARIF
uses: fortify/gha-export-vulnerabilities@fcb374411cff9809028c911dabb8b57dbdae623b
with:
fod_base_url: "https://ams.fortify.com/"
fod_tenant: ${{ secrets.FOD_TENANT }}
fod_user: ${{ secrets.FOD_USER }}
fod_password: ${{ secrets.FOD_PAT }}
fod_release_id: ${{ secrets.FOD_RELEASE_ID }}
# Import Fortify on Demand results to GitHub Security Code Scanning
- name: Import Results
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: ./gh-fortify-sast.sarif
+1 -1
View File
@@ -10,7 +10,7 @@
# To use this workflow, you will need to: # To use this workflow, you will need to:
# #
# 1. Create a Mayhem for API account at # 1. Create a Mayhem for API account at
# https://mayhem4api.forallsecure.com/signup (30-day free trial) # https://mayhem4api.forallsecure.com/signup
# #
# 2. Create a service account token `mapi organization service-account create # 2. Create a service account token `mapi organization service-account create
# <org-name> <service-account-name>` # <org-name> <service-account-name>`
+36
View File
@@ -0,0 +1,36 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
name: MobSF
on:
push:
branches: [ $default-branch, $protected-branches ]
pull_request:
branches: [ $default-branch ]
schedule:
- cron: $cron-weekly
jobs:
mobile-security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup python
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Run mobsfscan
uses: MobSF/mobsfscan@a60d10a83af68e23e0b30611c6515da604f06f65
with:
args: . --sarif --output results.sarif || true
- name: Upload mobsfscan report
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: results.sarif
+59
View File
@@ -0,0 +1,59 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
#
# Find more information at:
# https://github.com/microsoft/msvc-code-analysis-action
name: Microsoft C++ Code Analysis
on:
push:
branches: [ $default-branch, $protected-branches ]
pull_request:
branches: [ $default-branch ]
schedule:
- cron: $cron-weekly
env:
# Path to the CMake build directory.
build: '${{ github.workspace }}/build'
jobs:
analyze:
name: Analyze
runs-on: windows-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Configure CMake
run: cmake -B ${{ env.build }}
# Build is not required unless generated source files are used
# - name: Build CMake
# run: cmake --build ${{ env.build }}
- name: Initialize MSVC Code Analysis
uses: microsoft/msvc-code-analysis-action@04825f6d9e00f87422d6bf04e1a38b1f3ed60d99
# Provide a unique ID to access the sarif output path
id: run-analysis
with:
cmakeBuildDirectory: ${{ env.build }}
# Ruleset file that will determine what checks will be run
ruleset: NativeRecommendedRules.ruleset
# Upload SARIF file to GitHub Code Scanning Alerts
- name: Upload SARIF to GitHub
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: ${{ steps.run-analysis.outputs.sarif }}
# Upload SARIF file as an Artifact to download and view
# - name: Upload SARIF as an Artifact
# uses: actions/upload-artifact@v2
# with:
# name: sarif-file
# path: ${{ steps.run-analysis.outputs.sarif }}
+35
View File
@@ -0,0 +1,35 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow integrates njsscan with GitHub's Code Scanning feature
# nodejsscan is a static security code scanner that finds insecure code patterns in your Node.js applications
name: njsscan sarif
on:
push:
branches: [ $default-branch, $protected-branches ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ $default-branch ]
schedule:
- cron: $cron-weekly
jobs:
njsscan:
runs-on: ubuntu-latest
name: njsscan code scanning
steps:
- name: Checkout the code
uses: actions/checkout@v2
- name: nodejsscan scan
id: njsscan
uses: ajinabraham/njsscan-action@7237412fdd36af517e2745077cedbf9d6900d711
with:
args: '. --sarif --output results.sarif || true'
- name: Upload njsscan report
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: results.sarif
+52
View File
@@ -0,0 +1,52 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
#
# NowSecure: The Mobile Security Experts <https://www.nowsecure.com/>.
#
# To use this workflow, you must be an existing NowSecure customer with GitHub Advanced Security (GHAS) enabled for your
# repository.
#
# If you *are not* an existing customer, click here to contact us for licensing and pricing details:
# <https://info.nowsecure.com/github-request>.
#
# Instructions:
#
# 1. In the settings for your repository, click "Secrets" then "New repository secret". Name the secret "NS_TOKEN" and
# paste in your Platform token. If you do not have a Platform token, or wish to create a new one for GitHub, visit
# NowSecure Platform and go to "Profile & Preferences" then create a token labelled "GitHub".
#
# 2. Follow the annotated workflow below and make any necessary modifications then save the workflow to your repository
# and review the "Security" tab once the action has run.
name: "NowSecure"
on:
push:
branches: [ $default-branch, $protected-branches ]
pull_request:
branches: [ $default-branch ]
jobs:
nowsecure:
name: NowSecure
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Build your application
run: ./gradlew assembleDebug # Update this to build your Android or iOS application
- name: Run NowSecure
uses: nowsecure/nowsecure-action@3b439db31b6dce857b09f5222fd13ffc3159ad26
with:
token: ${{ secrets.NS_TOKEN }}
app_file: app-debug.apk # Update this to a path to your .ipa or .apk
group_id: {{ groupId }} # Update this to your desired Platform group ID
- name: Upload SARIF file
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: NowSecure.sarif
+49
View File
@@ -0,0 +1,49 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow integrates a collection of open source static analysis tools
# with GitHub code scanning. For documentation, or to provide feedback, visit
# https://github.com/github/ossar-action
name: OSSAR
on:
push:
branches: [ $default-branch, $protected-branches ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ $default-branch ]
schedule:
- cron: $cron-weekly
jobs:
OSSAR-Scan:
# OSSAR runs on windows-latest.
# ubuntu-latest and macos-latest support coming soon
runs-on: windows-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
# Ensure a compatible version of dotnet is installed.
# The [Microsoft Security Code Analysis CLI](https://aka.ms/mscadocs) is built with dotnet v3.1.201.
# A version greater than or equal to v3.1.201 of dotnet must be installed on the agent in order to run this action.
# GitHub hosted runners already have a compatible version of dotnet installed and this step may be skipped.
# For self-hosted runners, ensure dotnet version 3.1.201 or later is installed by including this action:
# - name: Install .NET
# uses: actions/setup-dotnet@v1
# with:
# dotnet-version: '3.1.x'
# Run open source static analysis tools
- name: Run OSSAR
uses: github/ossar-action@v1
id: ossar
# Upload results to the Security tab
- name: Upload OSSAR results
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: ${{ steps.ossar.outputs.sarifFile }}
+54
View File
@@ -0,0 +1,54 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# A sample workflow that checks for security issues using
# the Prisma Cloud Infrastructure as Code Scan Action on
# the IaC files present in the repository.
# The results are uploaded to GitHub Security Code Scanning
#
# For more details on the Action configuration see https://github.com/prisma-cloud-shiftleft/iac-scan-action
name: Prisma Cloud IaC Scan
on:
push:
branches: [ $default-branch, $protected-branches ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ $default-branch ]
schedule:
- cron: $cron-weekly
jobs:
prisma_cloud_iac_scan:
runs-on: ubuntu-latest
name: Run Prisma Cloud IaC Scan to check
steps:
- name: Checkout
uses: actions/checkout@v2
- id: iac-scan
name: Run Scan on CFT files in the repository
uses: prisma-cloud-shiftleft/iac-scan-action@53278c231c438216d99b463308a3cbed351ba0c3
with:
# You will need Prisma Cloud API Access Token
# More details in https://github.com/prisma-cloud-shiftleft/iac-scan-action
prisma_api_url: ${{ secrets.PRISMA_CLOUD_API_URL }}
access_key: ${{ secrets.PRISMA_CLOUD_ACCESS_KEY }}
secret_key: ${{ secrets.PRISMA_CLOUD_SECRET_KEY }}
# Scan sources on Prisma Cloud are uniquely identified by their name
asset_name: 'my-asset-name'
# The service need to know the type of IaC being scanned
template_type: 'CFT'
- name: Upload SARIF file
uses: github/codeql-action/upload-sarif@v1
# Results are generated only on a success or failure
# this is required since GitHub by default won't run the next step
# when the previous one has failed.
# And alternative it to add `continue-on-error: true` to the previous step
if: success() || failure()
with:
# The SARIF Log file name is configurable on scan action
# therefore the file name is best read from the steps output
sarif_file: ${{ steps.iac-scan.outputs.iac_scan_result_sarif_path }}
@@ -0,0 +1,7 @@
{
"name": "Anchore Container Scan",
"creator": "Indeni Cloudrail",
"description": "Produce container image vulnerability and compliance reports based on the open-source Anchore container image scanner.",
"iconName": "anchore",
"categories": ["Code Scanning", "dockerfile"]
}
@@ -0,0 +1,7 @@
{
"name": "Brakeman",
"creator": "Brakeman",
"description": "Brakeman is a static analysis security vulnerability scanner for Ruby on Rails applications.",
"iconName": "brakeman",
"categories": ["Code Scanning", "ruby"]
}
@@ -0,0 +1,7 @@
{
"name": "CxSAST",
"creator": "Checkmarx",
"description": "Scan your code with Checkmarx CxSAST and see your results in the GitHub security tab.",
"iconName": "checkmarx",
"categories": ["Code Scanning", "javascript", "python", "java", "php", "c#", "c", "c++", "ruby", "swift", "go", "json", "kotlin", "apex", "scala", "perl"]
}
@@ -0,0 +1,7 @@
{
"name": "cloudrail",
"creator": "Indeni Cloudrail",
"description": "Cloudrail can be used to scan your infrastructure-as-code files for potential security and compliance issues. The Cloudrail action is often used as part of both CI workflows (on pull_request) and on CD workflows to identify potential issues.",
"iconName": "cloudrail",
"categories": ["Code Scanning", "HCL"]
}
@@ -0,0 +1,7 @@
{
"name": "Codacy Security Scan",
"creator": "Codacy",
"description": "Free, out-of-the-box, security analysis provided by multiple open source static analysis tools.",
"iconName": "codacy",
"categories": ["Code Scanning", "apex", "bash", "c", "coffeescript", "c++", "c#", "crystal", "dockerfile", "elixir", "go", "groovy", "java", "javascript", "jsp", "kotlin", "markdown", "php", "plsql", "powershell", "python", "ruby", "scala", "swift", "tsql", "typescript", "velocity", "vba", "xml"]
}
@@ -1,7 +1,7 @@
{ {
"name": "CodeQL Analysis", "name": "CodeQL Analysis",
"creator": "GitHub", "creator": "GitHub",
"description": "Security analysis from GitHub for C, C++, C#, Java, JavaScript, TypeScript, Python, and Go developers.", "description": "Security analysis from GitHub for C, C++, C#, Go, Java, JavaScript, TypeScript, Python, and Ruby developers.",
"iconName": "octicon mark-github", "iconName": "octicon mark-github",
"categories": ["Code Scanning", "C", "C#", "C++", "Go", "Java", "JavaScript", "TypeScript", "Python"] "categories": ["Code Scanning", "C", "C++", "C#", "Go", "Java", "JavaScript", "TypeScript", "Python", "Ruby"]
} }
@@ -0,0 +1,7 @@
{
"name": "CodeScan",
"creator": "CodeScan Enterprises, LLC",
"description": "CodeScan allows for better visibility on your code quality checks based on your custom rulesets.",
"iconName": "codescan",
"categories": ["Code Scanning", "javascript", "apex"]
}
@@ -0,0 +1,7 @@
{
"name": "42Crunch API Security Audit",
"creator": "42Crunch",
"description": "Use the 42Crunch API Security Audit REST API to perform static application security testing (SAST) on OpenAPI/Swagger files.",
"iconName": "42crunch",
"categories": ["Code Scanning"]
}
@@ -0,0 +1,7 @@
{
"name": "Fortify on Demand Scan",
"creator": "Micro Focus",
"description": "Integrate Fortify's comprehensive static code analysis (SAST) for 27+ languages into your DevSecOps workflows to build secure software faster.",
"iconName": "fortify",
"categories": ["Code Scanning", "ABAP", "ActionScript", "Apex", "C#", "C", "C++", "COBOL", "ColdFusion", "Dockerfile", "Go", "HTML", "Java", "JavaScript", "JSON", "Java Server Pages", "Kotlin", "MXML", "Objective-C", "Objective-C++", "PHP", "PLSQL", "Python", "Ruby", "Scala", "Swift", "TSQL", "TypeScript", "VBScript", "Visual Basic .NET", "Visual Basic", "XML"]
}
@@ -0,0 +1,13 @@
{
"name": "mobsf",
"creator": "mobsf",
"description": "Mobile Security Framework (MobSF) is an automated, all-in-one mobile application (Android/iOS/Windows) pen-testing, malware analysis and security assessment framework capable of performing static and dynamic analysis.",
"iconName": "mobsf",
"categories": [
"Code Scanning",
"Java",
"Swift",
"Objective-C",
"Kotlin"
]
}
@@ -0,0 +1,7 @@
{
"name": "Microsoft C++ Code Analysis",
"creator": "Microsoft",
"description": "Code Analysis with the Microsoft C & C++ Compiler for CMake based projects.",
"iconName": "microsoft",
"categories": ["Code Scanning", "C", "C++"]
}
@@ -0,0 +1,7 @@
{
"name": "njsscan",
"creator": "NodeJSScan",
"description": "nodejsscan is a static security code scanner that finds insecure code patterns in your Node.js applications.",
"iconName": "njsscan",
"categories": ["Code Scanning", "JavaScript", "TypeScript"]
}
@@ -0,0 +1,21 @@
{
"name": "NowSecure",
"creator": "NowSecure",
"description": "The NowSecure Action delivers fast, accurate, automated security analysis of iOS and Android apps coded in any language",
"iconName": "nowsecure",
"categories": [
"Code Scanning",
"Java",
"Kotlin",
"Scala",
"Swift",
"Objective C",
"C",
"C++",
"C#",
"Rust",
"JavaScript",
"TypeScript",
"Node"
]
}
@@ -0,0 +1,7 @@
{
"name": "OSSAR",
"creator": "GitHub",
"description": "Run multiple open source security static analysis tools without the added complexity with OSSAR (Open Source Static Analysis Runner).",
"iconName": "octicon mark-github",
"categories": ["Code Scanning", "python", "javascript"]
}
@@ -0,0 +1,7 @@
{
"name": "Prisma Cloud IaC Scan",
"creator": "Palo Alto Prisma Cloud",
"description": "Scan your Infrastructure as Code files with Prisma Cloud to detect security issues",
"iconName": "prisma",
"categories": ["Code Scanning"]
}
@@ -0,0 +1,7 @@
{
"name": "RuboCop Linting",
"creator": "arthurnn",
"description": "A Ruby static code analyzer and formatter, based on the community Ruby style guide.",
"iconName": "rubocop",
"categories": ["Code Scanning", "ruby"]
}
@@ -0,0 +1,7 @@
{
"name": "SecurityCodeScan",
"creator": "@security-code-scan",
"description": "Vulnerability Patterns Detector for C# and VB.NET",
"iconName": "securitycodescan",
"categories": ["Code Scanning", "C#", "Visual Basic .NET"]
}
@@ -0,0 +1,7 @@
{
"name": "Semgrep",
"creator": "Returntocorp",
"description": "Continuously run Semgrep to find bugs and enforce secure code standards. Start with 1k+ community rules or write your own in a few minutes.",
"iconName": "semgrep",
"categories": ["Code Scanning", "Go", "Java", "JavaScript", "JSON", "Python", "Ruby", "TypeScript", "JSX", "TSX"]
}
@@ -0,0 +1,7 @@
{
"name": "Scan",
"creator": "ShiftLeft",
"description": "Scan is a free open-source security tool for modern DevOps teams from ShiftLeft.",
"iconName": "shiftleft",
"categories": ["Code Scanning"]
}
@@ -0,0 +1,7 @@
{
"name": "Snyk Container",
"creator": "Snyk",
"description": "Detect vulnerabilities in your container images and surface the issues in GitHub code scanning.",
"iconName": "snyk",
"categories": ["Code Scanning", "dockerfile"]
}
@@ -0,0 +1,7 @@
{
"name": "Snyk Infrastructure as Code",
"creator": "Snyk",
"description": "Detect vulnerabilities in your infrastructure as code files and surface the issues in GitHub code scanning.",
"iconName": "snyk",
"categories": ["Code Scanning"]
}
@@ -0,0 +1,7 @@
{
"name": "Sysdig Inline Scan",
"creator": "Sysdig",
"description": "Performs analysis on locally built container image and posts the results in SARIF report",
"iconName": "sysdig-scan",
"categories": ["Code Scanning", "Dockerfile", "C", "C#", "C++", "Go", "Java", "JavaScript", "Node", "Python", "Powershell", "Ruby"]
}
@@ -0,0 +1,8 @@
{
"name": "Trivy",
"creator": "Aqua Security",
"description": "Scan Docker container images for vulnerabilities in OS packages and language dependencies with Trivy from Aqua Security.",
"iconName": "trivy",
"categories": ["Code Scanning", "dockerfile"],
"enterprise_requirements": ["docker"]
}
@@ -0,0 +1,7 @@
{
"name": "Xanitizer",
"creator": "RIGS IT",
"description": "Automatically scan your code for vulnerabilities and generate compliance reports with the static security analysis tool Xanitizer (SAST).",
"iconName": "xanitizer",
"categories": ["Code Scanning", "javascript", "java", "scala", "typescript", "xml", "json"]
}
+52
View File
@@ -0,0 +1,52 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# pulled from repo
name: "Rubocop"
on:
push:
branches: [ $default-branch, $protected-branches ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ $default-branch ]
schedule:
- cron: $cron-weekly
jobs:
rubocop:
runs-on: ubuntu-latest
strategy:
fail-fast: false
steps:
- name: Checkout repository
uses: actions/checkout@v2
# If running on a self-hosted runner, check it meets the requirements
# listed at https://github.com/ruby/setup-ruby#using-self-hosted-runners
- name: Set up Ruby
uses: ruby/setup-ruby@f20f1eae726df008313d2e0d78c5e602562a1bcf
with:
ruby-version: 2.6
# This step is not necessary if you add the gem to your Gemfile
- name: Install Code Scanning integration
run: bundle add code-scanning-rubocop --version 0.3.0 --skip-install
- name: Install dependencies
run: bundle install
- name: Rubocop run
run: |
bash -c "
bundle exec rubocop --require code_scanning --format CodeScanning::SarifFormatter -o rubocop.sarif
[[ $? -ne 2 ]]
"
- name: Upload Sarif output
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: rubocop.sarif
+41
View File
@@ -0,0 +1,41 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow integrates SecurityCodeScan with GitHub's Code Scanning feature
# SecurityCodeScan is a vulnerability patterns detector for C# and VB.NET
name: SecurityCodeScan
on:
push:
branches: [ $default-branch, $protected-branches ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ $default-branch ]
schedule:
- cron: $cron-weekly
jobs:
SCS:
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- uses: nuget/setup-nuget@04b0c2b8d1b97922f67eca497d7cf0bf17b8ffe1
- uses: microsoft/setup-msbuild@v1.0.2
- name: Set up projects for analysis
uses: security-code-scan/security-code-scan-add-action@f8ff4f2763ed6f229eded80b1f9af82ae7f32a0d
- name: Restore dependencies
run: dotnet restore
- name: Build
run: dotnet build --no-restore
- name: Convert sarif for uploading to GitHub
uses: security-code-scan/security-code-scan-results-action@cdb3d5e639054395e45bf401cba8688fcaf7a687
- name: Upload sarif
uses: github/codeql-action/upload-sarif@v1
+42
View File
@@ -0,0 +1,42 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow file requires a free account on Semgrep.dev to
# manage rules, file ignores, notifications, and more.
#
# See https://semgrep.dev/docs
name: Semgrep
on:
push:
branches: [ $default-branch, $protected-branches ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ $default-branch ]
schedule:
- cron: $cron-weekly
jobs:
semgrep:
name: Scan
runs-on: ubuntu-latest
steps:
# Checkout project source
- uses: actions/checkout@v2
# Scan code using project's configuration on https://semgrep.dev/manage
- uses: returntocorp/semgrep-action@fcd5ab7459e8d91cb1777481980d1b18b4fc6735
with:
publishToken: ${{ secrets.SEMGREP_APP_TOKEN }}
publishDeployment: ${{ secrets.SEMGREP_DEPLOYMENT_ID }}
generateSarif: "1"
# Upload SARIF file generated in previous step
- name: Upload SARIF file
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: semgrep.sarif
if: always()
+47
View File
@@ -0,0 +1,47 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow integrates Scan with GitHub's code scanning feature
# Scan is a free open-source security tool for modern DevOps teams from ShiftLeft
# Visit https://slscan.io/en/latest/integrations/code-scan for help
name: SL Scan
on:
push:
branches: [ $default-branch, $protected-branches ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ $default-branch ]
schedule:
- cron: $cron-weekly
jobs:
Scan-Build:
# Scan runs on ubuntu, mac and windows
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# Instructions
# 1. Setup JDK, Node.js, Python etc depending on your project type
# 2. Compile or build the project before invoking scan
# Example: mvn compile, or npm install or pip install goes here
# 3. Invoke Scan with the github token. Leave the workspace empty to use relative url
- name: Perform Scan
uses: ShiftLeftSecurity/scan-action@39af9e54bc599c8077e710291d790175c9231f64
env:
WORKSPACE: ""
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SCAN_AUTO_BUILD: true
with:
output: reports
# Scan auto-detects the languages in your project. To override uncomment the below variable and set the type
# type: credscan,java
# type: python
- name: Upload report
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: reports
+48
View File
@@ -0,0 +1,48 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# A sample workflow which checks out the code, builds a container
# image using Docker and scans that image for vulnerabilities using
# Snyk. The results are then uploaded to GitHub Security Code Scanning
#
# For more examples, including how to limit scans to only high-severity
# issues, monitor images for newly disclosed vulnerabilities in Snyk and
# fail PR checks for new vulnerabilities, see https://github.com/snyk/actions/
name: Snyk Container
on:
push:
branches: [ $default-branch, $protected-branches ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ $default-branch ]
schedule:
- cron: $cron-weekly
jobs:
snyk:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build a Docker image
run: docker build -t your/image-to-test .
- name: Run Snyk to check Docker image for vulnerabilities
# Snyk can be used to break the build when it detects vulnerabilities.
# In this case we want to upload the issues to GitHub Code Scanning
continue-on-error: true
uses: snyk/actions/docker@14818c4695ecc4045f33c9cee9e795a788711ca4
env:
# In order to use the Snyk Action you will need to have a Snyk API token.
# More details in https://github.com/snyk/actions#getting-your-snyk-token
# or you can signup for free at https://snyk.io/login
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
image: your/image-to-test
args: --file=Dockerfile
- name: Upload result to GitHub Code Scanning
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: snyk.sarif
+47
View File
@@ -0,0 +1,47 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# A sample workflow which checks out your Infrastructure as Code Configuration files,
# such as Kubernetes, Helm & Terraform and scans them for any security issues.
# The results are then uploaded to GitHub Security Code Scanning
#
# For more examples, including how to limit scans to only high-severity issues
# and fail PR checks, see https://github.com/snyk/actions/
name: Snyk Infrastructure as Code
on:
push:
branches: [ $default-branch, $protected-branches ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ $default-branch ]
schedule:
- cron: $cron-weekly
jobs:
snyk:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run Snyk to check configuration files for security issues
# Snyk can be used to break the build when it detects security issues.
# In this case we want to upload the issues to GitHub Code Scanning
continue-on-error: true
uses: snyk/actions/iac@14818c4695ecc4045f33c9cee9e795a788711ca4
env:
# In order to use the Snyk Action you will need to have a Snyk API token.
# More details in https://github.com/snyk/actions#getting-your-snyk-token
# or you can signup for free at https://snyk.io/login
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
# Add the path to the configuration file that you would like to test.
# For example `deployment.yaml` for a Kubernetes deployment manifest
# or `main.tf` for a Terraform configuration file
file: your-file-to-test.yaml
- name: Upload result to GitHub Code Scanning
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: snyk.sarif
+54
View File
@@ -0,0 +1,54 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
name: Sysdig - Build, scan, push and upload sarif report
on:
push:
branches: [ $default-branch, $protected-branches ]
pull_request:
branches: [ $default-branch ]
schedule:
- cron: $cron-weekly
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build the Docker image
# Tag image to be built
# Change ${{ github.repository }} variable by another image name if you want but don't forget changing also image-tag below
run: docker build . --file Dockerfile --tag ${{ github.repository }}:latest
- name: Sysdig Secure Inline Scan
id: scan
uses: sysdiglabs/scan-action@768d7626a14897e0948ea89c8437dd46a814b163
with:
# Tag of the image to analyse.
# Change ${{ github.repository }} variable by another image name if you want but don't forget changing also image-tag above
image-tag: ${{ github.repository }}:latest
# API token for Sysdig Scanning auth
sysdig-secure-token: ${{ secrets.SYSDIG_SECURE_TOKEN}}
# Sysdig secure endpoint. Please read: https://docs.sysdig.com/en/docs/administration/saas-regions-and-ip-ranges/
# US-East https://secure.sysdig.com
# US-West https://us2.app.sysdig.com
# EU https://eu1.app.sysdig.com
sysdig-secure-url: https://us2.app.sysdig.com
dockerfile-path: ./Dockerfile
input-type: docker-daemon
ignore-failed-scan: true
# Sysdig inline scanner requires privileged rights
run-as-user: root
- uses: github/codeql-action/upload-sarif@v1
#Upload SARIF file
if: always()
with:
sarif_file: ${{ steps.scan.outputs.sarifReport }}
+41
View File
@@ -0,0 +1,41 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
name: build
on:
push:
branches: [ $default-branch, $protected-branches ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ $default-branch ]
schedule:
- cron: $cron-weekly
jobs:
build:
name: Build
runs-on: "ubuntu-18.04"
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Build an image from Dockerfile
run: |
docker build -t docker.io/my-organization/my-app:${{ github.sha }} .
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@2a2157eb22c08c9a1fac99263430307b8d1bc7a2
with:
image-ref: 'docker.io/my-organization/my-app:${{ github.sha }}'
format: 'template'
template: '@/contrib/sarif.tpl'
output: 'trivy-results.sarif'
severity: 'CRITICAL,HIGH'
- name: Upload Trivy scan results to GitHub Security tab
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: 'trivy-results.sarif'
+92
View File
@@ -0,0 +1,92 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow downloads and installs the latest version of Xanitizer, builds your project, runs a Xanitizer security analysis on it,
# and then archives the findings list reports and uploads the findings into the GitHub code scanning alert section of your repository.
#
# Documentation for the `RIGS-IT/xanitizer-action` is located here: https://github.com/RIGS-IT/xanitizer-action
#
# To use this basic workflow, you will need to complete the following setup steps:
#
# 1. The underlying Xanitizer, used in this workflow, needs a separate license file.
# Licenses are free of charge for open source projects and for educational usage.
# To get more information about the Xanitizer licenses and how to obtain a license file,
# please consult https://www.xanitizer.com/xanitizer-pricing/.
#
# 2. The content of the license file has to be stored as a GitHub secret (e.g. XANITIZER_LICENSE) on this repository.
# Please consult https://docs.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets for details.
#
# 3. Reference the GitHub secret in the step using the `RIGS-IT/xanitizer-action` GitHub action.
# Example:
# - name: Xanitizer Security Analysis
# uses: RIGS-IT/xanitizer-action@v1
# with:
# license: ${{ secrets.XANITIZER_LICENSE }}
#
# 4. As a static application security testing (SAST) tool,
# Xanitizer requires that all dependencies of the artifacts being analyzed can be resolved successfully.
# So you have to install all used libraries and build your project before running the security analysis,
# e.g. via `mvn compile` for Java or `npm install` for JavaScript
name: "Xanitizer Security Analysis"
on:
push:
branches: [ $default-branch, $protected-branches ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ $default-branch ]
schedule:
- cron: $cron-weekly
workflow_dispatch:
jobs:
xanitizer-security-analysis:
# Xanitizer runs on ubuntu-latest and windows-latest.
runs-on: ubuntu-latest
steps:
# Check out the repository
- name: Checkout
uses: actions/checkout@v2
# Set up the correct Java version for your project
# Please comment out, if your project does not contain Java source code.
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
# Compile the code for Java projects and get all libraries, e.g. via Maven
# Please adapt, if your project uses another build system to compile Java source code.
# Please comment out, if your project does not contain Java source code.
- name: Compile Java code
run: mvn -B compile
# Install all dependent libraries for JavaScript/TypeScript projects, e.g. via npm
# Please adapt to run `npm install` in the correct directories.
# Please adapt, if your project uses another package manager for getting JavaScript libraries.
# Please comment out, if your project does not use a package manager for getting JavaScript libraries.
- name: Install JavaScript libraries
run: npm install
# Run the security analysis with default settings
- name: Xanitizer Security Analysis
uses: RIGS-IT/xanitizer-action@87d13138fb113b727cbe040c744a15a2b4fe5316
with:
license: ${{ secrets.XANITIZER_LICENSE }}
# Archiving the findings list reports
- uses: actions/upload-artifact@v2
with:
name: Xanitizer-Reports
path: |
*-Findings-List.pdf
*-Findings-List.sarif
# Uploads the findings into the GitHub code scanning alert section using the upload-sarif action
- uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: Xanitizer-Findings-List.sarif
+4 -3
View File
@@ -1,5 +1,5 @@
# This workflow will build and push a new container image to Alibaba Cloud Container Registry (ACR), # This workflow will build and push a new container image to Alibaba Cloud Container Registry (ACR),
# and then will deploy it to Alibaba Cloud Container Service for Kubernetes (ACK), when a release is created. # and then will deploy it to Alibaba Cloud Container Service for Kubernetes (ACK), when there is a push to the $default-branch branch.
# #
# To use this workflow, you will need to complete the following set-up steps: # To use this workflow, you will need to complete the following set-up steps:
# #
@@ -20,8 +20,9 @@
name: Build and Deploy to ACK name: Build and Deploy to ACK
on: on:
release: push:
types: [created] branches:
- $default-branch
# Environment variables available to all jobs and steps in this workflow. # Environment variables available to all jobs and steps in this workflow.
env: env:
+27 -16
View File
@@ -1,34 +1,46 @@
# This workflow will build and push a new container image to Amazon ECR, # This workflow will build and push a new container image to Amazon ECR,
# and then will deploy a new task definition to Amazon ECS, when a release is created # and then will deploy a new task definition to Amazon ECS, when there is a push to the $default-branch branch.
# #
# To use this workflow, you will need to complete the following set-up steps: # To use this workflow, you will need to complete the following set-up steps:
# #
# 1. Create an ECR repository to store your images. # 1. Create an ECR repository to store your images.
# For example: `aws ecr create-repository --repository-name my-ecr-repo --region us-east-2`. # For example: `aws ecr create-repository --repository-name my-ecr-repo --region us-east-2`.
# Replace the value of `ECR_REPOSITORY` in the workflow below with your repository's name. # Replace the value of the `ECR_REPOSITORY` environment variable in the workflow below with your repository's name.
# Replace the value of `aws-region` in the workflow below with your repository's region. # Replace the value of the `AWS_REGION` environment variable in the workflow below with your repository's region.
# #
# 2. Create an ECS task definition, an ECS cluster, and an ECS service. # 2. Create an ECS task definition, an ECS cluster, and an ECS service.
# For example, follow the Getting Started guide on the ECS console: # For example, follow the Getting Started guide on the ECS console:
# https://us-east-2.console.aws.amazon.com/ecs/home?region=us-east-2#/firstRun # https://us-east-2.console.aws.amazon.com/ecs/home?region=us-east-2#/firstRun
# Replace the values for `service` and `cluster` in the workflow below with your service and cluster names. # Replace the value of the `ECS_SERVICE` environment variable in the workflow below with the name you set for the Amazon ECS service.
# Replace the value of the `ECS_CLUSTER` environment variable in the workflow below with the name you set for the cluster.
# #
# 3. Store your ECS task definition as a JSON file in your repository. # 3. Store your ECS task definition as a JSON file in your repository.
# The format should follow the output of `aws ecs register-task-definition --generate-cli-skeleton`. # The format should follow the output of `aws ecs register-task-definition --generate-cli-skeleton`.
# Replace the value of `task-definition` in the workflow below with your JSON file's name. # Replace the value of the `ECS_TASK_DEFINITION` environment variable in the workflow below with the path to the JSON file.
# Replace the value of `container-name` in the workflow below with the name of the container # Replace the value of the `CONTAINER_NAME` environment variable in the workflow below with the name of the container
# in the `containerDefinitions` section of the task definition. # in the `containerDefinitions` section of the task definition.
# #
# 4. Store an IAM user access key in GitHub Actions secrets named `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`. # 4. Store an IAM user access key in GitHub Actions secrets named `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`.
# See the documentation for each action used below for the recommended IAM policies for this IAM user, # See the documentation for each action used below for the recommended IAM policies for this IAM user,
# and best practices on handling the access key credentials. # and best practices on handling the access key credentials.
on:
release:
types: [created]
name: Deploy to Amazon ECS name: Deploy to Amazon ECS
on:
push:
branches:
- $default-branch
env:
AWS_REGION: MY_AWS_REGION # set this to your preferred AWS region, e.g. us-west-1
ECR_REPOSITORY: MY_ECR_REPOSITORY # set this to your Amazon ECR repository name
ECS_SERVICE: MY_ECS_SERVICE # set this to your Amazon ECS service name
ECS_CLUSTER: MY_ECS_CLUSTER # set this to your Amazon ECS cluster name
ECS_TASK_DEFINITION: MY_ECS_TASK_DEFINITION # set this to the path to your Amazon ECS task definition
# file, e.g. .aws/task-definition.json
CONTAINER_NAME: MY_CONTAINER_NAME # set this to the name of the container in the
# containerDefinitions section of your task definition
jobs: jobs:
deploy: deploy:
name: Deploy name: Deploy
@@ -44,7 +56,7 @@ jobs:
with: with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-2 aws-region: ${{ env.AWS_REGION }}
- name: Login to Amazon ECR - name: Login to Amazon ECR
id: login-ecr id: login-ecr
@@ -54,7 +66,6 @@ jobs:
id: build-image id: build-image
env: env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
ECR_REPOSITORY: my-ecr-repo
IMAGE_TAG: ${{ github.sha }} IMAGE_TAG: ${{ github.sha }}
run: | run: |
# Build a docker container and # Build a docker container and
@@ -68,14 +79,14 @@ jobs:
id: task-def id: task-def
uses: aws-actions/amazon-ecs-render-task-definition@v1 uses: aws-actions/amazon-ecs-render-task-definition@v1
with: with:
task-definition: task-definition.json task-definition: ${{ env.ECS_TASK_DEFINITION }}
container-name: sample-app container-name: ${{ env.CONTAINER_NAME }}
image: ${{ steps.build-image.outputs.image }} image: ${{ steps.build-image.outputs.image }}
- name: Deploy Amazon ECS task definition - name: Deploy Amazon ECS task definition
uses: aws-actions/amazon-ecs-deploy-task-definition@v1 uses: aws-actions/amazon-ecs-deploy-task-definition@v1
with: with:
task-definition: ${{ steps.task-def.outputs.task-definition }} task-definition: ${{ steps.task-def.outputs.task-definition }}
service: sample-app-service service: ${{ env.ECS_SERVICE }}
cluster: default cluster: ${{ env.ECS_CLUSTER }}
wait-for-service-stability: true wait-for-service-stability: true
+4 -3
View File
@@ -1,4 +1,4 @@
# This workflow will build and push a node.js application to an Azure Web App when a release is created. # This workflow will build and push a node.js application to an Azure Web App when there is a push to the $default-branch branch.
# #
# This workflow assumes you have already created the target Azure App Service web app. # This workflow assumes you have already created the target Azure App Service web app.
# For instructions see https://docs.microsoft.com/azure/app-service/app-service-plan-manage#create-an-app-service-plan # For instructions see https://docs.microsoft.com/azure/app-service/app-service-plan-manage#create-an-app-service-plan
@@ -16,8 +16,9 @@
# For more information on GitHub Actions for Azure, refer to https://github.com/Azure/Actions # For more information on GitHub Actions for Azure, refer to https://github.com/Azure/Actions
# For more samples to get started with GitHub Action workflows to deploy to Azure, refer to https://github.com/Azure/actions-workflow-samples # For more samples to get started with GitHub Action workflows to deploy to Azure, refer to https://github.com/Azure/actions-workflow-samples
on: on:
release: push:
types: [created] branches:
- $default-branch
env: env:
AZURE_WEBAPP_NAME: your-app-name # set this to your application's name AZURE_WEBAPP_NAME: your-app-name # set this to your application's name
+4 -3
View File
@@ -1,4 +1,4 @@
# This workflow will build a docker container, publish it to Google Container Registry, and deploy it to GKE when a release is created # This workflow will build a docker container, publish it to Google Container Registry, and deploy it to GKE when there is a push to the $default-branch branch.
# #
# To configure this workflow: # To configure this workflow:
# #
@@ -13,8 +13,9 @@
name: Build and Deploy to GKE name: Build and Deploy to GKE
on: on:
release: push:
types: [created] branches:
- $default-branch
env: env:
PROJECT_ID: ${{ secrets.GKE_PROJECT }} PROJECT_ID: ${{ secrets.GKE_PROJECT }}
+4 -3
View File
@@ -1,4 +1,4 @@
# This workflow will build a docker container, publish it to IBM Container Registry, and deploy it to IKS when a release is created # This workflow will build a docker container, publish it to IBM Container Registry, and deploy it to IKS when there is a push to the $default-branch branch.
# #
# To configure this workflow: # To configure this workflow:
# #
@@ -9,8 +9,9 @@
name: Build and Deploy to IKS name: Build and Deploy to IKS
on: on:
release: push:
types: [created] branches:
- $default-branch
# Environment variables available to all jobs and steps in this workflow # Environment variables available to all jobs and steps in this workflow
env: env:
-75
View File
@@ -1,75 +0,0 @@
# This workflow will build a docker container, publish it to IBM Container Registry, and deploy it to IKS when a release is created
#
# To configure this workflow:
#
# 1. Ensure that your repository contains a Dockerfile
# 2. Setup secrets in your repository by going to settings: Create ICR_NAMESPACE and IBM_CLOUD_API_KEY
# 3. Change the values for the IBM_CLOUD_REGION, REGISTRY_HOSTNAME, IMAGE_NAME, IKS_CLUSTER, DEPLOYMENT_NAME, and PORT
name: Build and Deploy to IKS
on:
release:
types: [created]
# Environment variables available to all jobs and steps in this workflow
env:
GITHUB_SHA: ${{ github.sha }}
IBM_CLOUD_API_KEY: ${{ secrets.IBM_CLOUD_API_KEY }}
IBM_CLOUD_REGION: us-south
ICR_NAMESPACE: ${{ secrets.ICR_NAMESPACE }}
REGISTRY_HOSTNAME: us.icr.io
IMAGE_NAME: iks-test
IKS_CLUSTER: example-iks-cluster-name-or-id
DEPLOYMENT_NAME: iks-test
PORT: 5001
jobs:
setup-build-publish-deploy:
name: Setup, Build, Publish, and Deploy
runs-on: ubuntu-latest
environment: production
steps:
- name: Checkout
uses: actions/checkout@v2
# Download and Install IBM Cloud CLI
- name: Install IBM Cloud CLI
run: |
curl -fsSL https://clis.cloud.ibm.com/install/linux | sh
ibmcloud --version
ibmcloud config --check-version=false
ibmcloud plugin install -f kubernetes-service
ibmcloud plugin install -f container-registry
# Authenticate with IBM Cloud CLI
- name: Authenticate with IBM Cloud CLI
run: |
ibmcloud login --apikey "${IBM_CLOUD_API_KEY}" -r "${IBM_CLOUD_REGION}" -g default
ibmcloud cr region-set "${IBM_CLOUD_REGION}"
ibmcloud cr login
# Build the Docker image
- name: Build with Docker
run: |
docker build -t "$REGISTRY_HOSTNAME"/"$ICR_NAMESPACE"/"$IMAGE_NAME":"$GITHUB_SHA" \
--build-arg GITHUB_SHA="$GITHUB_SHA" \
--build-arg GITHUB_REF="$GITHUB_REF" .
# Push the image to IBM Container Registry
- name: Push the image to ICR
run: |
docker push $REGISTRY_HOSTNAME/$ICR_NAMESPACE/$IMAGE_NAME:$GITHUB_SHA
# Deploy the Docker image to the IKS cluster
- name: Deploy to IKS
run: |
ibmcloud ks cluster config --cluster $IKS_CLUSTER
kubectl config current-context
kubectl create deployment $DEPLOYMENT_NAME --image=$REGISTRY_HOSTNAME/$ICR_NAMESPACE/$IMAGE_NAME:$GITHUB_SHA --dry-run -o yaml > deployment.yaml
kubectl apply -f deployment.yaml
kubectl rollout status deployment/$DEPLOYMENT_NAME
kubectl create service loadbalancer $DEPLOYMENT_NAME --tcp=80:$PORT --dry-run -o yaml > service.yaml
kubectl apply -f service.yaml
kubectl get services -o wide
-26
View File
@@ -1,26 +0,0 @@
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
name: Java CI with Maven
on:
push:
branches: [ $default-branch ]
pull_request:
branches: [ $default-branch ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
cache: maven
- name: Build with Maven
run: mvn -B package --file pom.xml
+78 -71
View File
@@ -3,61 +3,57 @@
# separate terms of service, privacy policy, and support # separate terms of service, privacy policy, and support
# documentation. # documentation.
### The OpenShift Starter workflow will: # 💁 The OpenShift Starter workflow will:
# - Checkout your repository # - Checkout your repository
# - Perform a Docker build # - Perform a container image build
# - Push the built image to an image registry # - Push the built image to the GitHub Container Registry (GHCR)
# - Log in to your OpenShift cluster # - Log in to your OpenShift cluster
# - Create an OpenShift app from the image and expose it to the internet. # - Create an OpenShift app from the image and expose it to the internet
### Before you begin: # ️ Configure your repository and the workflow with the following steps:
# - Have write access to a container image registry such as quay.io or Dockerhub. # 1. Have access to an OpenShift cluster. Refer to https://www.openshift.com/try
# - Have access to an OpenShift cluster. # 2. Create the OPENSHIFT_SERVER and OPENSHIFT_TOKEN repository secrets. Refer to:
# - For instructions to get started with OpenShift see https://www.openshift.com/try # - https://github.com/redhat-actions/oc-login#readme
# - The project you wish to add this workflow to should have a Dockerfile. # - https://docs.github.com/en/actions/reference/encrypted-secrets
# - If you don't have a Dockerfile at the repository root, see the buildah-build step. # - https://cli.github.com/manual/gh_secret_set
# - Builds from scratch are also available, but require more configuration. # 3. (Optional) Edit the top-level 'env' section as marked with '🖊️' if the defaults are not suitable for your project.
# 4. (Optional) Edit the build-image step to build your project.
# The default build type is by using a Dockerfile at the root of the repository,
# but can be replaced with a different file, a source-to-image build, or a step-by-step buildah build.
# 5. Commit and push the workflow file to your default branch to trigger a workflow run.
### To get the workflow running: # 👋 Visit our GitHub organization at https://github.com/redhat-actions/ to see our actions and provide feedback.
# 1. Add this workflow to your repository.
# 2. Edit the top-level 'env' section, which contains a list of environment variables that must be configured.
# 3. Create the secrets referenced in the 'env' section under your repository Settings.
# 4. Edit the 'branches' in the 'on' section to trigger the workflow on a push to your branch.
# 5. Commit and push your changes.
# For a more sophisticated example, see https://github.com/redhat-actions/spring-petclinic/blob/main/.github/workflows/petclinic-sample.yaml
# Also see our GitHub organization, https://github.com/redhat-actions/
# ▶️ See a video of how to set up this workflow at https://www.youtube.com/watch?v=6hgBO-1pKho
name: OpenShift name: OpenShift
# ⬇️ Modify the fields marked with ⬇️ to fit your project, and create any secrets that are referenced.
# https://docs.github.com/en/free-pro-team@latest/actions/reference/encrypted-secrets
env: env:
# EDIT with your registry and registry path. # 🖊 EDIT your repository secrets to log into your OpenShift cluster and set up the context.
REGISTRY: quay.io/<username>
# ⬇️ EDIT with your registry username.
REGISTRY_USER: <username>
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
# ⬇️ EDIT to log into your OpenShift cluster and set up the context.
# See https://github.com/redhat-actions/oc-login#readme for how to retrieve these values. # See https://github.com/redhat-actions/oc-login#readme for how to retrieve these values.
# To get a permanent token, refer to https://github.com/redhat-actions/oc-login/wiki/Using-a-Service-Account-for-GitHub-Actions
OPENSHIFT_SERVER: ${{ secrets.OPENSHIFT_SERVER }} OPENSHIFT_SERVER: ${{ secrets.OPENSHIFT_SERVER }}
OPENSHIFT_TOKEN: ${{ secrets.OPENSHIFT_TOKEN }} OPENSHIFT_TOKEN: ${{ secrets.OPENSHIFT_TOKEN }}
# 🖊️ EDIT to set the kube context's namespace after login. Leave blank to use your user's default namespace.
# ⬇️ EDIT with any additional port your application should expose.
# By default, oc new-app action creates a service to the image's lowest numeric exposed port.
APP_PORT: ""
# ⬇️ EDIT if you wish to set the kube context's namespace after login. Leave blank to use the default namespace.
OPENSHIFT_NAMESPACE: "" OPENSHIFT_NAMESPACE: ""
# If you wish to manually provide the APP_NAME and TAG, set them here, otherwise they will be auto-detected. # 🖊️ EDIT to set a name for your OpenShift app, or a default one will be generated below.
APP_NAME: "" APP_NAME: ""
TAG: ""
# 🖊️ EDIT with the port your application should be accessible on.
# If the container image exposes *exactly one* port, this can be left blank.
# Refer to the 'port' input of https://github.com/redhat-actions/oc-new-app
APP_PORT: ""
# 🖊️ EDIT to change the image registry settings.
# Registries such as GHCR, Quay.io, and Docker Hub are supported.
IMAGE_REGISTRY: ghcr.io/${{ github.repository_owner }}
IMAGE_REGISTRY_USER: ${{ github.actor }}
IMAGE_REGISTRY_PASSWORD: ${{ github.token }}
# 🖊️ EDIT to specify custom tags for the container image, or default tags will be generated below.
IMAGE_TAGS: ""
on: on:
# https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows # https://docs.github.com/en/actions/reference/events-that-trigger-workflows
push: push:
# Edit to the branch(es) you want to build and deploy on each push. # Edit to the branch(es) you want to build and deploy on each push.
branches: [ $default-branch ] branches: [ $default-branch ]
@@ -65,32 +61,40 @@ on:
jobs: jobs:
openshift-ci-cd: openshift-ci-cd:
name: Build and deploy to OpenShift name: Build and deploy to OpenShift
# ubuntu-20.04 can also be used.
runs-on: ubuntu-18.04 runs-on: ubuntu-18.04
environment: production environment: production
outputs: outputs:
ROUTE: ${{ steps.deploy-and-expose.outputs.route }} ROUTE: ${{ steps.deploy-and-expose.outputs.route }}
SELECTOR: ${{ steps.deploy-and-expose.outputs.selector }} SELECTOR: ${{ steps.deploy-and-expose.outputs.selector }}
steps: steps:
- name: Check if secrets exists - name: Check for required secrets
uses: actions/github-script@v3 uses: actions/github-script@v4
with: with:
script: | script: |
const secrets = { const secrets = {
REGISTRY_PASSWORD: `${{ secrets.REGISTRY_PASSWORD }}`,
OPENSHIFT_SERVER: `${{ secrets.OPENSHIFT_SERVER }}`, OPENSHIFT_SERVER: `${{ secrets.OPENSHIFT_SERVER }}`,
OPENSHIFT_TOKEN: `${{ secrets.OPENSHIFT_TOKEN }}`, OPENSHIFT_TOKEN: `${{ secrets.OPENSHIFT_TOKEN }}`,
}; };
const GHCR = "ghcr.io";
if (`${{ env.IMAGE_REGISTRY }}`.startsWith(GHCR)) {
core.info(`Image registry is ${GHCR} - no registry password required`);
}
else {
core.info("A registry password is required");
secrets["IMAGE_REGISTRY_PASSWORD"] = `${{ secrets.IMAGE_REGISTRY_PASSWORD }}`;
}
const missingSecrets = Object.entries(secrets).filter(([ name, value ]) => { const missingSecrets = Object.entries(secrets).filter(([ name, value ]) => {
if (value.length === 0) { if (value.length === 0) {
core.warning(`Secret "${name}" is not set`); core.error(`Secret "${name}" is not set`);
return true; return true;
} }
core.info(`✔️ Secret "${name}" is set`); core.info(`✔️ Secret "${name}" is set`);
return false; return false;
}); });
if (missingSecrets.length > 0) { if (missingSecrets.length > 0) {
@@ -104,48 +108,50 @@ jobs:
core.info(`✅ All the required secrets are set`); core.info(`✅ All the required secrets are set`);
} }
- uses: actions/checkout@v2 - name: Check out repository
uses: actions/checkout@v2
- name: Determine app name - name: Determine app name
if: env.APP_NAME == '' if: env.APP_NAME == ''
run: | run: |
echo "APP_NAME=$(basename $PWD)" | tee -a $GITHUB_ENV echo "APP_NAME=$(basename $PWD)" | tee -a $GITHUB_ENV
- name: Determine tag - name: Determine image tags
if: env.TAG == '' if: env.IMAGE_TAGS == ''
run: | run: |
echo "TAG=${GITHUB_SHA::7}" | tee -a $GITHUB_ENV echo "IMAGE_TAGS=latest ${GITHUB_SHA::12}" | tee -a $GITHUB_ENV
# https://github.com/redhat-actions/buildah-build#readme # https://github.com/redhat-actions/buildah-build#readme
- name: Build from Dockerfile - name: Build from Dockerfile
id: image-build id: build-image
uses: redhat-actions/buildah-build@v2 uses: redhat-actions/buildah-build@v2
with: with:
image: ${{ env.APP_NAME }} image: ${{ env.APP_NAME }}
tags: ${{ env.TAG }} tags: ${{ env.IMAGE_TAGS }}
# If you don't have a dockerfile, see:
# https://github.com/redhat-actions/buildah-build#scratch-build-inputs # If you don't have a Dockerfile/Containerfile, refer to https://github.com/redhat-actions/buildah-build#scratch-build-inputs
# Otherwise, point this to your Dockerfile relative to the repository root. # Or, perform a source-to-image build using https://github.com/redhat-actions/s2i-build
# Otherwise, point this to your Dockerfile/Containerfile relative to the repository root.
dockerfiles: | dockerfiles: |
./Dockerfile ./Dockerfile
# https://github.com/redhat-actions/push-to-registry#readme # https://github.com/redhat-actions/push-to-registry#readme
- name: Push to registry - name: Push to registry
id: push-to-registry id: push-image
uses: redhat-actions/push-to-registry@v2 uses: redhat-actions/push-to-registry@v2
with: with:
image: ${{ steps.image-build.outputs.image }} image: ${{ steps.build-image.outputs.image }}
tags: ${{ steps.image-build.outputs.tags }} tags: ${{ steps.build-image.outputs.tags }}
registry: ${{ env.REGISTRY }} registry: ${{ env.IMAGE_REGISTRY }}
username: ${{ env.REGISTRY_USER }} username: ${{ env.IMAGE_REGISTRY_USER }}
password: ${{ env.REGISTRY_PASSWORD }} password: ${{ env.IMAGE_REGISTRY_PASSWORD }}
# The path the image was pushed to is now stored in ${{ steps.push-to-registry.outputs.registry-path }} # The path the image was pushed to is now stored in ${{ steps.push-image.outputs.registry-path }}
# oc-login works on all platforms, but oc must be installed first. - name: Install oc
# The GitHub Ubuntu runner already includes oc. uses: redhat-actions/openshift-tools-installer@v1
# Otherwise, https://github.com/redhat-actions/openshift-tools-installer can be used to install oc, with:
# as well as many other tools. oc: 4
# https://github.com/redhat-actions/oc-login#readme # https://github.com/redhat-actions/oc-login#readme
- name: Log in to OpenShift - name: Log in to OpenShift
@@ -163,18 +169,19 @@ jobs:
uses: redhat-actions/oc-new-app@v1 uses: redhat-actions/oc-new-app@v1
with: with:
app_name: ${{ env.APP_NAME }} app_name: ${{ env.APP_NAME }}
image: ${{ steps.push-to-registry.outputs.registry-path }} image: ${{ steps.push-image.outputs.registry-path }}
namespace: ${{ env.OPENSHIFT_NAMESPACE }} namespace: ${{ env.OPENSHIFT_NAMESPACE }}
port: ${{ env.APP_PORT }} port: ${{ env.APP_PORT }}
- name: View application route - name: Print application URL
env:
ROUTE: ${{ steps.deploy-and-expose.outputs.route }}
SELECTOR: ${{ steps.deploy-and-expose.outputs.selector }}
run: | run: |
[[ -n ${{ env.ROUTE }} ]] || (echo "Determining application route failed in previous step"; exit 1) [[ -n ${{ env.ROUTE }} ]] || (echo "Determining application route failed in previous step"; exit 1)
echo
echo "======================== Your application is available at: ========================" echo "======================== Your application is available at: ========================"
echo ${{ env.ROUTE }} echo ${{ env.ROUTE }}
echo "===================================================================================" echo "==================================================================================="
echo echo
echo "Your app can be taken down with: \"oc delete all --selector='${{ env.SELECTOR }}'\"" echo "Your app can be taken down with: \"oc delete all --selector='${{ env.SELECTOR }}'\""
env:
ROUTE: ${{ steps.deploy-and-expose.outputs.route }}
SELECTOR: ${{ steps.deploy-and-expose.outputs.selector }}
@@ -3,5 +3,5 @@
"description": "Deploy a container to Alibaba Cloud Container Service for Kubernetes (ACK).", "description": "Deploy a container to Alibaba Cloud Container Service for Kubernetes (ACK).",
"creator": "Alibaba Cloud", "creator": "Alibaba Cloud",
"iconName": "alibabacloud", "iconName": "alibabacloud",
"categories": ["Deployment"] "categories": ["Deployment", "Dockerfile"]
} }
+2 -2
View File
@@ -3,5 +3,5 @@
"description": "Deploy a container to an Amazon ECS service powered by AWS Fargate or Amazon EC2.", "description": "Deploy a container to an Amazon ECS service powered by AWS Fargate or Amazon EC2.",
"creator": "Amazon Web Services", "creator": "Amazon Web Services",
"iconName": "aws", "iconName": "aws",
"categories": ["Deployment", "JavaScript", "npm"] "categories": ["Deployment", "Dockerfile"]
} }
+2 -2
View File
@@ -1,7 +1,7 @@
{ {
"name": "Deploy Node.js to Azure Web App", "name": "Deploy Node.js to Azure Web App",
"description": "[Test Partner]Build a Node.js project and deploy it to an Azure Web App.", "description": "Build a Node.js project and deploy it to an Azure Web App.",
"creator": "Microsoft Azure", "creator": "Microsoft Azure",
"iconName": "azure", "iconName": "azure",
"categories": ["Deployment", "JavaScript", "npm"] "categories": ["Deployment"]
} }
@@ -3,5 +3,5 @@
"description": "Build a docker container, publish it to Google Container Registry, and deploy to GKE.", "description": "Build a docker container, publish it to Google Container Registry, and deploy to GKE.",
"creator": "Google Cloud", "creator": "Google Cloud",
"iconName": "googlegke", "iconName": "googlegke",
"categories": ["Deployment"] "categories": ["Deployment", "Dockerfile"]
} }
+2 -2
View File
@@ -1,7 +1,7 @@
{ {
"name": "(Python)Deploy to IBM Cloud Kubernetes Service", "name": "Deploy to IBM Cloud Kubernetes Service",
"description": "Build a docker container, publish it to IBM Cloud Container Registry, and deploy to IBM Cloud Kubernetes Service.", "description": "Build a docker container, publish it to IBM Cloud Container Registry, and deploy to IBM Cloud Kubernetes Service.",
"creator": "IBM", "creator": "IBM",
"iconName": "ibm", "iconName": "ibm",
"categories": ["Deployment", "Python"] "categories": ["Deployment", "Dockerfile"]
} }
@@ -1,7 +0,0 @@
{
"name": "(Java)Deploy to IBM Cloud Kubernetes Service",
"description": "(Java)Build a docker container, publish it to IBM Cloud Container Registry, and deploy to IBM Cloud Kubernetes Service.",
"creator": "IBM",
"iconName": "ibm",
"categories": ["Deployment", "Java"]
}
@@ -1,7 +0,0 @@
{
"name": "CD Java with Maven",
"description": "CD Build and test a Java project with Apache Maven.",
"creator": "Amazon Web Services",
"iconName": "aws",
"categories": ["Deployment", "Java", "Maven", "Spring", "JSF"]
}
@@ -1,7 +0,0 @@
{
"name": "CD Python application",
"description": "CD Create and test a Python application.",
"creator": "IBM",
"iconName": "ibm",
"categories": ["Deployment", "Python", "Bottle", "Flask"]
}
@@ -3,5 +3,5 @@
"description": "This workflow will build a docker container, publish and deploy it to Tencent Kubernetes Engine (TKE).", "description": "This workflow will build a docker container, publish and deploy it to Tencent Kubernetes Engine (TKE).",
"creator": "Tencent Cloud", "creator": "Tencent Cloud",
"iconName": "tencentcloud", "iconName": "tencentcloud",
"categories": ["Deployment"] "categories": ["Deployment", "Dockerfile"]
} }
-36
View File
@@ -1,36 +0,0 @@
# This workflow will install Python dependencies, run tests and lint with a single version of Python
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
name: Python application
on:
push:
branches: [ $default-branch ]
pull_request:
branches: [ $default-branch ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.9
uses: actions/setup-python@v2
with:
python-version: 3.9
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8 pytest
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Lint with flake8
run: |
# stop the build if there are Python syntax errors or undefined names
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
- name: Test with pytest
run: |
pytest
+4 -3
View File
@@ -1,4 +1,4 @@
# This workflow will build a docker container, publish and deploy it to Tencent Kubernetes Engine (TKE). # This workflow will build a docker container, publish and deploy it to Tencent Kubernetes Engine (TKE) when there is a push to the $default-branch branch.
# #
# To configure this workflow: # To configure this workflow:
# #
@@ -16,8 +16,9 @@
name: Tencent Kubernetes Engine name: Tencent Kubernetes Engine
on: on:
release: push:
types: [created] branches:
- $default-branch
# Environment variables available to all jobs and steps in this workflow # Environment variables available to all jobs and steps in this workflow
env: env:
+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 160.0 180.0" style="enable-background:new 0 0 566.93 192.22;" xml:space="preserve">
<style type="text/css">
.st0{fill:#2D2D2D;}
.st1{fill:#7F488E;}
.st2{fill:#FFFFFF;}
</style>
<polygon class="st1" points="154.94,136.71 154.94,53.26 82.67,11.54 10.4,53.26 10.4,136.71 82.67,178.44 "/>
<path class="st2" d="M71.02,77.04h11.61v43.88h0.14v9.83h-0.14v13.8H71.72v-13.8H35.09v-9.63L71.02,77.04z M71.72,120.91V91.42
l-24.04,29.49H71.72z"/>
<path class="st2" d="M82.06,57.1c6.68-4.57,14.16-6.85,22.44-6.85c7.08,0,12.81,1.64,17.17,4.91c4.37,3.28,6.55,7.96,6.55,14.05
c0,5.05-1.68,9.36-5.05,12.93c-3.37,3.57-7.95,7.07-13.75,10.47c-0.45,0.28-1.29,0.79-2.5,1.54c-1.22,0.75-2.08,1.28-2.59,1.59
c-0.51,0.31-1.29,0.79-2.33,1.43c-1.05,0.64-1.82,1.12-2.33,1.43c-0.51,0.31-1.17,0.79-2,1.43c-0.82,0.64-1.43,1.18-1.82,1.62
c-0.39,0.44-0.85,0.98-1.38,1.62c-0.53,0.64-0.9,1.23-1.13,1.77c-0.23,0.54-0.44,1.15-0.64,1.83c-0.2,0.68-0.3,1.35-0.3,2.03
l36.19-0.1v10.23h-48.8v-5.16c0-8.6,3.64-15.75,10.92-21.44c2.03-1.53,5.84-3.99,11.41-7.39c5.61-3.22,9.22-5.56,10.83-7.01
c2.65-2.58,3.97-5.46,3.97-8.64c0-2.91-1.18-5.13-3.52-6.65c-2.35-1.52-5.64-2.28-9.88-2.28c-7.35,0-14.49,2.52-21.44,7.54V57.1z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

+1
View File
@@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 31.44 37.52"><defs><style>.cls-1{fill:#307fe2;}</style></defs><path class="cls-1" d="M24.8,29.72V13.77C24.8,9,21,5.51,15.65,5.51A8.83,8.83,0,0,0,7,11.35c0,.45.06,1.25,1.37,1.66s2-.3,2.16-.79A5.29,5.29,0,0,1,15.65,8.7c3.21,0,5.55,2.15,5.55,5.11v1.27c0,.6-.8,1-1.54,1.15L13.27,17.9C8.49,19,6.63,20.84,6.63,24.5c0,4.26,3.83,7.47,8.93,7.51a.48.48,0,0,0,.2,0,1.47,1.47,0,0,0,.78-1.5,1.69,1.69,0,0,0-.78-1.6.42.42,0,0,0-.21-.06c-3.09,0-5.31-1.84-5.31-4.31,0-2.28,1.25-3,3.88-3.61,0,0,4.62-1.22,6.44-1.76a.48.48,0,0,1,.62.46l0,1v5.61a.65.65,0,0,0,0,.2A7.49,7.49,0,0,0,24.42,30C24.73,30.15,24.8,29.89,24.8,29.72Z"/></svg>

After

Width:  |  Height:  |  Size: 699 B

+464
View File
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 439 KiB

+14
View File
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 128 128" style="enable-background:new 0 0 128 128;" xml:space="preserve">
<style type="text/css">
.st0{fill:#54B848;}
</style>
<path class="st0" d="M98.3,72.1c-4.2,0-7.7,3.4-7.7,7.7v2.9c0,4.2-3.4,7.5-7.5,7.5H44.9c-4.2,0-7.5-3.4-7.5-7.5v-37
c0-4.2,3.4-7.5,7.5-7.5H83c1,0,1.8,0,2.5,0h0.1c1.9,0.5,3,1.6,3.6,3c0.7,1.6,1.2,3.9-1.4,6.1L65.9,63.2l-6.7-8.5
c-2.6-3.3-7.4-4-10.8-1.4c-3.3,2.6-4,7.4-1.4,10.8l11.2,14.5c2.5,3.3,7.2,4,10.6,1.5l25.4-18.6c0.3-0.2,3.6-2.8,3.9-3.1
c7.6-6.8,9.2-15.6,6.1-23.3c-3.2-7.8-11.4-12.7-21.3-12.7H44.9C32.3,22.4,22,32.7,22,45.3v37.3c0,12.6,10.3,22.9,22.9,22.9h38.2
c12.6,0,22.9-10.2,22.9-22.9v-2.9C106,75.5,102.6,72.1,98.3,72.1z M95.1,39c-0.2-0.1-0.3-0.1-0.5-0.2C94.8,38.9,94.9,38.9,95.1,39
L95.1,39z"/>
</svg>

After

Width:  |  Height:  |  Size: 1016 B

+53
View File
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 147.4 147.4" style="enable-background:new 0 0 147.4 147.4;" xml:space="preserve">
<style type="text/css">
.st0{fill:#32A4DD;}
.st1{fill:#8EC043;}
.st2{fill:#005794;}
</style>
<g>
<g>
<path class="st0" d="M117.91,44.88c2.57,5.98,4.01,12.56,4.01,19.48c0,27.24-22.08,49.32-49.32,49.32S23.28,91.6,23.28,64.36
c0-10.83,3.5-20.84,9.42-28.97c-9.74,9.86-15.75,23.41-15.75,38.36c0,30.16,24.45,54.61,54.61,54.61s54.61-24.45,54.61-54.61
C126.17,63.15,123.14,53.25,117.91,44.88z"/>
</g>
<path class="st1" d="M113.45,51.23c-2.6-8.18-7.56-15.32-14.09-20.59c3.71,3.71,6.69,8.16,8.71,13.1c0.95,1.74,1.77,3.55,2.47,5.43
c-1.62-1-3.33-1.84-5.11-2.49c2.92,2.94,5.19,6.62,6.47,10.86c0.76,2.54,1.12,5.11,1.11,7.64h0c-0.26,5.67-1.68,11.03-4.02,15.86
c-0.44-1.91-1.07-3.77-1.9-5.56c-0.01,4.15-1.01,8.35-3.11,12.25c-0.94,1.75-2.05,3.34-3.3,4.78c-4.27,4.15-9.44,7.37-15.2,9.34
c1.1-1.73,2.02-3.57,2.73-5.5c-2.94,2.92-6.62,5.19-10.86,6.47c-2.54,0.76-5.11,1.12-7.64,1.11l0,0.05
c-7.51-0.46-14.47-2.94-20.34-6.92c2.13-0.19,4.23-0.62,6.27-1.29c-4.11-0.5-8.17-1.99-11.8-4.54c-2.04-1.43-3.8-3.12-5.3-4.97
c-2.31-3.37-4.12-7.1-5.33-11.1c0.64,0.17,1.31,0.28,2.01,0.31c0.84,0.03,1.66-0.07,2.44-0.27c-2.87-0.93-5.08-3.28-5.82-6.2
c-0.11-0.79-0.2-1.58-0.27-2.38c0-0.02,0-0.04,0-0.06l0,0c-0.09-1.09-0.14-2.2-0.14-3.32c0-0.63,0.02-1.25,0.05-1.87
c-0.05-0.86-0.09-1.72-0.09-2.58c0-5.73,1.22-11.17,3.4-16.09c-3.68,6.36-5.79,13.74-5.79,21.61c0,0.73,0.02,1.45,0.06,2.18
c0.12,2.4,0.43,4.75,0.93,7.04c1.12,5.15,3.16,9.97,5.94,14.26c2.23,3.45,4.94,6.56,8.04,9.24c7,6.06,15.95,9.91,25.79,10.47
c0.83,0.05,1.66,0.08,2.5,0.08c3.28,0,6.46-0.38,9.53-1.07c7.53-1.69,14.32-5.35,19.8-10.41c3.18-2.94,5.92-6.35,8.1-10.12
c3.56-6.14,5.65-13.24,5.8-20.82c0.01-0.28,0.02-0.56,0.02-0.84C115.49,59.75,114.77,55.36,113.45,51.23z"/>
<g>
<path class="st2" d="M46.36,66.58c-0.7-0.39-1.44-0.72-2.19-1.02l-0.64-0.25c-1.03-0.41-2.09-0.73-3.16-0.99
c2.42-1.14,5.13-1.78,7.98-1.78c3.22,0,6.26,0.82,8.91,2.25c1.5,3.77,2.96,7.51,8.19,8.75c1.04,0.25,2.23,0.39,3.6,0.41
c-0.61,1.11-1.52,1.95-2.49,2.73c-1.68,1.35-3.65,2.39-5.85,3.01c-3.9,1.09-7.86,0.68-11.27-0.88c-1.19-0.55-1.38-2.08-0.54-2.94
c0.49-0.5,0.98-1.01,1.29-1.65C51.59,71.29,50.13,68.68,46.36,66.58z M25.69,53.54c1.44,5.13,6.32,9.32,11.25,10.13
c3.29-2.13,7.21-3.38,11.41-3.38c2.67,0,5.22,0.5,7.57,1.42c0-0.01-0.01-0.01-0.01-0.02c4.71,1.96,9.54,4.53,12.45,7.62
c3.93,4.16,2.95,9.67,2.95,9.67c10.03-10.02,5.41-21.34,5.41-21.34c-15.29,0.65-17.51-12.89-17.51-12.89s-7.06-7.84-28.75-14.63
C8.79,23.31,5.4,9.72,5.4,9.72C4.61,29.72,26.96,37.95,26.96,37.95C15.33,38.08,5.4,29.06,5.4,29.06
c2.24,10.95,9.75,16.95,18.73,21.29c0.37,0.18,0.74,0.35,1.11,0.52C25.3,51.76,25.44,52.65,25.69,53.54z M18.23,102.31
c-0.69-1.2-1.34-2.5-1.94-3.85l0,0c-1.65-3.57-2.95-7.32-3.86-11.14l-0.45,0.06c0.23,6.37,1.35,12.62,3.32,18.59l0.02,0.07
l0.06,0.04c2.35,1.56,4.86,2.92,7.45,4.05l0.8,0.34l-0.53-0.69C21.32,107.45,19.68,104.93,18.23,102.31z M12.08,80.77
c-0.28-2.39-0.42-4.73-0.42-6.97c0-7.59,1.42-15.03,4.23-22.09l-0.41-0.19c-3.94,7.04-6.68,14.59-8.13,22.42l-0.01,0.08l0.04,0.07
c1.25,2.39,2.7,4.69,4.3,6.85l0.5,0.68L12.08,80.77z M26.74,115.5l-1.51-1.53l1.16,1.81c2.91,4.55,6.35,8.7,10.23,12.34l0.06,0.05
l0.08,0.01c1.34,0.12,2.69,0.18,4.04,0.18c1.11,0,2.23-0.04,3.34-0.12l0.87-0.06l-0.79-0.37
C37.68,124.76,31.81,120.62,26.74,115.5z M123.32,28.47c-9.07-9.07-20.38-15.08-32.69-17.51c-1.26-0.25-2.54-0.45-3.82-0.62
c-2.87-0.39-5.78-0.6-8.73-0.6c-1.59,0-3.18,0.07-4.75,0.19c-0.3,0.02-0.6,0.03-0.89,0.06c-1.09,0.09-2.17,0.22-3.24,0.37
c-7.45,1.03-14.59,3.35-21.16,6.85c-0.16,0.09-0.33,0.17-0.49,0.26c0.17-0.07,0.34-0.14,0.51-0.22
c6.78-2.91,14.08-4.58,21.56-4.91c1.68-0.07,3.38,0.21,4.91,0.92c1.88,0.88,3.38,2.25,4.01,3.74c0.18-0.66,0.24-1.35,0.14-2.04
c-0.13-0.91-0.51-1.74-1.07-2.46c2.85,0.24,5.66,0.68,8.41,1.3c3.76,0.85,6.99,3.42,8.45,6.99c0.36,0.89,0.61,1.8,0.72,2.7
c0.39-0.93,0.65-1.93,0.73-2.99c0.11-1.3-0.05-2.55-0.42-3.72c3.21,1.31,6.31,2.89,9.26,4.74l0,0.01
c0.02,0.01,0.04,0.02,0.05,0.03c0.11,0.07,0.22,0.14,0.33,0.21c3.81,2.42,6.42,6.44,6.85,10.94c0.13,1.32,0.07,2.63-0.18,3.85
c0.81-0.93,1.5-2,2.01-3.19c0.57-1.32,0.86-2.69,0.94-4.05c0.34,0.32,0.69,0.64,1.02,0.97c11.55,11.55,17.94,26.88,18,43.21
c0.06,15.81-6.02,31.16-16.92,42.61c-11.72,12.3-27.6,19.1-44.53,19.1c0,0,0,0-0.01,0c-8.61,0-17.04-1.8-24.77-5.2
c9.26,5.04,19.69,7.72,30.53,7.72c17.09,0,33.15-6.65,45.24-18.74C148.26,94,148.26,53.41,123.32,28.47z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

+16
View File
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
<title>codacy-white</title>
<g>
<path d="M5.7,14.3c0.8-3.1,2.9-5.8,5.7-7.4L8.7,2.3C4.7,4.7,1.8,8.5,0.6,13L5.7,14.3z"/>
<path d="M14.3,5.7c1-0.3,2.1-0.4,3.2-0.4V0c-1.5,0-3,0.2-4.5,0.6L14.3,5.7z"/>
<path d="M20.7,5.7c3.1,0.8,5.8,2.9,7.4,5.7l4.6-2.6c-2.3-4-6.1-6.9-10.6-8.1L20.7,5.7z"/>
<path d="M0,17.5c0,1.5,0.2,3,0.6,4.5l5.1-1.4c-0.3-1-0.4-2.1-0.4-3.2L0,17.5L0,17.5z"/>
<path d="M2.3,26.3c0.8,1.3,1.7,2.5,2.8,3.6l3.7-3.7c-0.8-0.8-1.4-1.6-1.9-2.5L2.3,26.3z"/>
<path d="M8.7,32.7c2.7,1.5,5.7,2.3,8.7,2.3v-5.2c-2.1,0-4.3-0.6-6.1-1.6L8.7,32.7z"/>
<path d="M28.1,23.6c-1.6,2.8-4.3,4.8-7.4,5.7l1.4,5.1c4.5-1.2,8.3-4.1,10.6-8.1L28.1,23.6z"/>
<path d="M34.4,22.2c0.8-3,0.8-6.1,0-9.1l-5.1,1.4c0.6,2.1,0.6,4.3,0,6.4L34.4,22.2z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

+69
View File
@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">
<g>
<defs>
<rect id="SVGID_1_" x="1" y="8.78" width="30.126" height="15.07"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_2_)" d="M17.178,14.913c-0.11-0.564-0.387-1.083-0.794-1.489c-0.448-0.382-1.025-0.577-1.613-0.546
c-0.452-0.015-0.899,0.097-1.291,0.323c-0.366,0.197-0.681,0.478-0.918,0.819c-0.246,0.347-0.43,0.733-0.546,1.142
c-0.264,0.857-0.264,1.774,0,2.631c0.121,0.407,0.305,0.792,0.546,1.142c0.237,0.341,0.552,0.622,0.918,0.819
c0.396,0.214,0.84,0.325,1.291,0.323c0.307,0.007,0.612-0.052,0.893-0.174c0.275-0.121,0.527-0.289,0.745-0.496
c0.223-0.225,0.408-0.485,0.546-0.77c0.143-0.306,0.235-0.633,0.273-0.968h1.042c-0.097,0.904-0.489,1.75-1.117,2.408
c-0.596,0.596-1.39,0.869-2.358,0.869c-0.589,0.008-1.173-0.111-1.713-0.348c-0.488-0.214-0.915-0.547-1.241-0.968
c-0.352-0.413-0.614-0.895-0.769-1.415c-0.364-1.13-0.364-2.345,0-3.475c0.155-0.52,0.417-1.002,0.769-1.415
c0.345-0.402,0.767-0.731,1.241-0.968c0.536-0.248,1.122-0.367,1.713-0.348c0.827-0.017,1.637,0.236,2.308,0.72
c0.621,0.472,0.993,1.216,1.117,2.184H17.178z"/>
<path clip-path="url(#SVGID_2_)" d="M25.013,14.739c0.005-0.286-0.063-0.568-0.199-0.819c-0.115-0.222-0.276-0.416-0.472-0.571
c-0.207-0.16-0.443-0.277-0.695-0.348c-0.275-0.071-0.559-0.104-0.844-0.099c-0.234,0-0.467,0.025-0.695,0.074
c-0.228,0.046-0.446,0.129-0.645,0.248c-0.186,0.116-0.346,0.268-0.472,0.447c-0.127,0.209-0.188,0.451-0.174,0.695
c-0.011,0.205,0.05,0.407,0.174,0.571c0.115,0.157,0.258,0.291,0.422,0.397c0.183,0.106,0.374,0.197,0.571,0.273
c0.199,0.074,0.397,0.124,0.571,0.174l1.365,0.323c0.299,0.045,0.591,0.128,0.869,0.248c0.273,0.119,0.531,0.269,0.77,0.447
c0.227,0.192,0.413,0.429,0.546,0.695c0.155,0.298,0.232,0.632,0.223,0.968c0.015,0.413-0.098,0.82-0.323,1.167
c-0.199,0.323-0.471,0.595-0.794,0.794c-0.335,0.206-0.705,0.349-1.092,0.422c-0.392,0.078-0.791,0.12-1.191,0.124
c-0.993,0-1.787-0.223-2.408-0.695c-0.62-0.472-0.968-1.216-1.067-2.259h1.042c0.009,0.617,0.291,1.199,0.769,1.588
c0.506,0.359,1.117,0.543,1.737,0.521c0.258,0,0.516-0.025,0.769-0.074c0.262-0.049,0.513-0.142,0.745-0.273
c0.223-0.124,0.417-0.293,0.571-0.496c0.155-0.217,0.233-0.479,0.223-0.745c0.021-0.427-0.199-0.83-0.571-1.042
c-0.193-0.109-0.392-0.209-0.596-0.298c-0.22-0.078-0.443-0.144-0.67-0.199L22.158,16.7c-0.347-0.099-0.645-0.199-0.943-0.298
c-0.271-0.095-0.523-0.238-0.745-0.422c-0.212-0.165-0.382-0.378-0.496-0.62c-0.129-0.288-0.188-0.603-0.174-0.918
c-0.011-0.386,0.092-0.766,0.298-1.092c0.196-0.295,0.449-0.549,0.745-0.745c0.315-0.187,0.659-0.321,1.018-0.397
c0.365-0.09,0.741-0.132,1.117-0.124c0.404-0.007,0.806,0.052,1.191,0.174c0.354,0.094,0.685,0.264,0.968,0.496
c0.276,0.235,0.504,0.522,0.67,0.844c0.172,0.374,0.265,0.78,0.273,1.191h-1.067V14.739z"/>
</g>
<polygon fill="#3666F0" points="9.91,8.782 4.897,20.944 5.765,20.944 10.754,8.782 "/>
<g>
<defs>
<rect id="SVGID_3_" x="1" y="8.78" width="30.126" height="15.07"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_4_)" fill="#3666F0" d="M2.365,16.054c0.154-0.132,0.28-0.292,0.372-0.472
c0.149-0.249,0.266-0.516,0.348-0.794c0.108-0.371,0.158-0.756,0.149-1.142v-2.308c0.004-0.208,0.021-0.415,0.05-0.621
c0.02-0.189,0.07-0.373,0.149-0.546c0.062-0.143,0.155-0.27,0.273-0.372c0.117-0.1,0.268-0.153,0.422-0.149H4.45V8.782H3.631
C3.203,8.758,2.795,8.966,2.564,9.328c-0.269,0.449-0.398,0.967-0.372,1.489v2.432c0,0.323-0.025,0.645-0.05,0.968
c-0.014,0.288-0.073,0.573-0.174,0.844c-0.082,0.222-0.209,0.425-0.372,0.596C1.436,15.81,1.221,15.891,1,15.881v0.869
c0.221-0.011,0.436,0.07,0.596,0.223c0.171,0.165,0.299,0.369,0.372,0.596c0.089,0.274,0.147,0.557,0.174,0.844
c0.025,0.323,0.05,0.645,0.05,0.968v2.408c-0.026,0.522,0.104,1.04,0.372,1.489c0.235,0.357,0.64,0.565,1.067,0.546H4.45v-0.025
v-0.05v-0.819H4.127c-0.155,0.008-0.307-0.045-0.422-0.149c-0.11-0.109-0.203-0.234-0.273-0.372
C3.35,22.237,3.3,22.052,3.283,21.862c-0.029-0.214-0.045-0.429-0.05-0.645v-2.283c0.008-0.386-0.043-0.771-0.149-1.142
c-0.082-0.278-0.199-0.545-0.348-0.794c-0.099-0.176-0.224-0.335-0.372-0.472c-0.081-0.086-0.172-0.162-0.273-0.223v-0.025
C2.142,16.228,2.241,16.154,2.365,16.054"/>
<path clip-path="url(#SVGID_4_)" fill="#3666F0" d="M28.495,8.782c0.427-0.019,0.832,0.189,1.067,0.546
c0.269,0.449,0.398,0.967,0.372,1.489v2.432c0,0.323,0.025,0.645,0.05,0.968c0.026,0.287,0.085,0.57,0.174,0.844
c0.073,0.226,0.201,0.431,0.372,0.596c0.159,0.153,0.375,0.234,0.596,0.223v0.869c-0.221-0.011-0.436,0.07-0.596,0.223
c-0.163,0.171-0.29,0.374-0.372,0.596c-0.101,0.271-0.159,0.555-0.174,0.844c-0.025,0.323-0.05,0.645-0.05,0.968v2.432
c0.026,0.522-0.104,1.04-0.372,1.489c-0.231,0.362-0.639,0.57-1.067,0.546h-0.819v-0.869h0.323
c0.154,0.004,0.304-0.049,0.422-0.149c0.118-0.102,0.211-0.229,0.273-0.372c0.082-0.172,0.132-0.357,0.149-0.546
c0.03-0.214,0.046-0.429,0.05-0.645v-2.283c-0.01-0.386,0.041-0.771,0.149-1.142c0.082-0.278,0.199-0.545,0.347-0.794
c0.092-0.18,0.219-0.34,0.372-0.471c0.124-0.099,0.223-0.174,0.273-0.223v-0.025c-0.101-0.062-0.193-0.137-0.273-0.223
c-0.148-0.137-0.273-0.296-0.372-0.472c-0.144-0.251-0.261-0.518-0.347-0.794c-0.106-0.371-0.157-0.756-0.149-1.142v-2.308
c-0.003-0.208-0.02-0.415-0.05-0.62c-0.023-0.188-0.073-0.372-0.149-0.546c-0.071-0.138-0.163-0.264-0.273-0.372
c-0.117-0.1-0.268-0.153-0.422-0.149h-0.323V8.832h0.819V8.782z"/>
</g>
<rect x="27.676" y="8.782" fill="#3666F0" width="0.819" height="0.099"/>
</svg>

After

Width:  |  Height:  |  Size: 5.7 KiB

+1
View File
@@ -0,0 +1 @@
<svg width="95" height="63" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" overflow="hidden"><defs><clipPath id="clip0"><rect x="979" y="281" width="95" height="63"/></clipPath></defs><g clip-path="url(#clip0)" transform="translate(-979 -281)"><path d="M0.495362 32.6809 16.4466 32.6809 16.4466 36.8041 5.29445 36.8041 5.29445 41.7043 16.2098 41.7043 16.2098 45.8261 5.29445 45.8261 5.29445 55.2206 0.495362 55.2206Z" transform="matrix(1 0 0 1.01243 979.012 281)"/><path d="M17.6294 47.0435C17.6294 42.4134 20.8731 38.4938 26.247 38.4938 31.6541 38.4938 34.8978 42.4134 34.8978 47.0435 34.8978 51.7069 31.6541 55.6264 26.247 55.6264 20.8731 55.6264 17.6294 51.7025 17.6294 47.0435ZM30.4366 47.0435C30.4366 44.5089 28.9173 42.3123 26.2484 42.3123 23.5795 42.3123 22.0963 44.5089 22.0963 47.0435 22.0963 49.6113 23.5824 51.8094 26.2528 51.8094 28.9231 51.8094 30.4366 49.6113 30.4366 47.0435Z" transform="matrix(1 0 0 1.01243 979.012 281)"/><path d="M37.0612 38.8997 41.3534 38.8997 41.3534 41.1295C42.5087 39.6766 44.5306 38.5299 46.5525 38.5299L46.5525 42.7181C46.1644 42.6295 45.7677 42.584 45.3697 42.5824 43.95 42.5824 42.0581 43.394 41.349 44.4411L41.349 55.2206 37.0612 55.2206Z" transform="matrix(1 0 0 1.01243 979.012 281)"/><path d="M50.4027 51.1667 50.4027 42.6459 47.7064 42.6459 47.7064 38.891 50.4027 38.891 50.4027 34.4385 54.7354 34.4385 54.7354 38.8997 58.0469 38.8997 58.0469 42.6546 54.7354 42.6546 54.7354 50.02C54.7354 51.031 55.2755 51.8108 56.2214 51.8108 56.8641 51.8108 57.4721 51.574 57.709 51.3386L58.6203 54.5823C57.979 55.16 56.8295 55.6293 55.0386 55.6293 52.0318 55.6264 50.4027 54.0725 50.4027 51.1667Z" transform="matrix(1 0 0 1.01243 979.012 281)"/><path d="M59.533 33.9388C59.5282 32.5199 60.6746 31.3657 62.0936 31.3609 63.5125 31.3561 64.6667 32.5025 64.6715 33.9215 64.6762 35.3404 63.5298 36.4946 62.1109 36.4994 62.1076 36.4994 62.1041 36.4994 62.1008 36.4994 60.69 36.4884 59.5479 35.3495 59.533 33.9388ZM59.9663 38.9069 64.2671 38.9069 64.2671 55.2264 59.9735 55.2264Z" transform="matrix(1 0 0 1.01243 979.012 281)"/><path d="M68.4553 42.6502 65.7517 42.6502 65.7517 38.8953 68.4553 38.8953 68.4553 38.0158C68.4553 34.4674 70.753 32.3386 73.9635 32.3386 75.1795 32.3386 76.2944 32.6087 77.0729 33.0145L76.1934 36.056C75.7716 35.8179 75.2923 35.701 74.8083 35.7181 73.5909 35.7181 72.7865 36.5297 72.7865 38.0837L72.7865 38.8953 76.098 38.8953 76.098 42.6502 72.7879 42.6502 72.7879 55.2148 68.4553 55.2148Z" transform="matrix(1 0 0 1.01243 979.012 281)"/><path d="M80.3166 58.0267C81.4315 58.0267 82.1752 57.722 82.5811 56.8439L83.1862 55.4575 76.5659 38.8997 81.1643 38.8997 85.4189 50.2583 89.6851 38.8997 94.3066 38.8997 86.6364 57.8909C85.4189 60.9657 83.257 61.7773 80.4523 61.8452 79.737 61.8309 79.0244 61.7516 78.3235 61.6083L78.9648 57.7552C79.3944 57.9294 79.853 58.0214 80.3166 58.0267Z" transform="matrix(1 0 0 1.01243 979.012 281)"/><path d="M22.5166 12.2757C22.519 17.9292 17.9379 22.5141 12.2844 22.5166 12.2815 22.5166 12.2786 22.5166 12.2757 22.5166L0 22.5166 0 12.2757ZM12.2757 10.2351 12.2757 10.2351C17.9284 10.2383 22.5134 5.65845 22.5166 0.00577884 22.5166 0.00385269 22.5166 0.00192654 22.5166 3.96827e-07L0 0 0 10.2351Z" fill="#F42147" transform="matrix(1 0 0 1.01243 979.012 281)"/></g></svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

+34
View File
@@ -0,0 +1,34 @@
<svg xmlns:xlink="http://www.w3.org/1999/xlink" 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" version="1.1" id="svg79" xml:space="preserve" width="533.33331" height="533.33331" viewBox="0 0 533.33331 533.33331" style="color: #23292e;"><title>microsoft</title>
<metadata id="metadata85">
<rdf:rdf>
<cc:work rdf:about="">
<dc:format>
image/svg+xml
</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"></dc:type>
<dc:title></dc:title>
</cc:work>
</rdf:rdf>
</metadata>
<defs id="defs83">
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath105">
<path d="M 0,400 H 400 V 0 H 0 Z" id="path103"></path>
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath119">
<path d="M 80.797,80.296 H 319.705 V 319.204 H 80.797 Z" id="path117"></path>
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath253">
<path d="M 0,400 H 400 V 0 H 0 Z" id="path251"></path>
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath403">
<path d="M 0,400 H 400 V 0 H 0 Z" id="path401"></path>
</clipPath>
</defs>
<g id="g87" transform="matrix(1.3333333,0,0,-1.3333333,0,533.33333)">
<path d="M 0,0 H 400 V 400 H 0 Z" style="fill-opacity: 1; fill-rule: nonzero; stroke: none;" id="path89" fill="#FFFFFF"></path>
<path d="M 194.342,205.658 H 80.796 v 113.546 h 113.546 z" style="fill-opacity: 1; fill-rule: nonzero; stroke: none;" id="path91" fill="#F25022"></path>
<path d="M 319.704,205.658 H 206.158 v 113.546 h 113.546 z" style="fill-opacity: 1; fill-rule: nonzero; stroke: none;" id="path93" fill="#7FBA00"></path>
<path d="M 194.342,80.296 H 80.796 v 113.546 h 113.546 z" style="fill-opacity: 1; fill-rule: nonzero; stroke: none;" id="path95" fill="#00A4EF"></path>
<path d="M 319.704,80.296 H 206.158 v 113.546 h 113.546 z" style="fill-opacity: 1; fill-rule: nonzero; stroke: none;" id="path97" fill="#FFB900"></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

+114
View File
@@ -0,0 +1,114 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="128px" height="128px" viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve"> <image id="image0" width="128" height="128" x="0" y="0"
href="data:image/png;base64,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
YWR5ccllPAAAAABJRU5ErkJggg==" />
</svg>

After

Width:  |  Height:  |  Size: 8.7 KiB

+755
View File
@@ -0,0 +1,755 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="600px" height="600px" viewBox="0 0 600 600" enable-background="new 0 0 600 600" xml:space="preserve"> <image id="image0" width="600" height="600" x="0" y="0"
href="data:image/png;base64,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
KzAwOjAwlR64RQAAAABJRU5ErkJggg==" />
</svg>

After

Width:  |  Height:  |  Size: 57 KiB

+21
View File
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.4.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 720 720" style="enable-background:new 0 0 720 720;" xml:space="preserve">
<style type="text/css">
.st0{fill:#0099FF;}
</style>
<g>
<path class="st0" d="M699,316.2L567.8,88.6c-15.6-27.1-44.7-43.9-76-43.9H360.3H228.4c-31.2,0-60.2,16.8-75.9,43.7L21.1,315.1
c-15.7,27.1-15.7,60.8,0,88l65.6,113.2c0.2,0.3,0.3,0.7,0.5,1l94.4,158h310.2c31.3,0,60.4-16.8,76-43.9L699,403.8
C714.6,376.8,714.5,343.3,699,316.2z M65.4,340.8l131.4-226.7c6.5-11.2,18.6-18.2,31.6-18.2h87.5L109.4,453.3l-44-75.9
C58.9,366.1,58.9,352.1,65.4,340.8z M443.6,268.1l53.1,91.9l-151.3,264H237.5L443.6,268.1z M654.6,378.3L523.5,605.8
c-6.5,11.3-18.6,18.3-31.6,18.3h-87.4l144-251.4c1.4-2.4,2.3-5,2.9-7.6c0-0.1,0-0.2,0.1-0.3c0.1-0.3,0.1-0.6,0.1-0.9
c0-0.2,0.1-0.5,0.1-0.7c0-0.4,0.1-0.7,0.1-1.1c0-0.2,0-0.4,0.1-0.6c0-0.4,0-0.7,0-1.1c0-0.2,0-0.4,0-0.6c0-0.4,0-0.7,0-1.1
c0-0.2,0-0.4,0-0.5c0-0.4-0.1-0.8-0.1-1.2c0-0.1,0-0.3,0-0.4c0-0.3-0.1-0.6-0.1-0.9c0-0.3-0.1-0.5-0.1-0.8
c-0.1-0.3-0.1-0.6-0.2-0.9c-0.1-0.3-0.1-0.5-0.2-0.8c-0.1-0.4-0.2-0.7-0.3-1.1c-0.1-0.2-0.1-0.3-0.2-0.5c-0.5-1.6-1.2-3.1-2.1-4.6
l-82.6-143c-1.1-2-2.5-3.8-4.1-5.3c-4.7-4.7-11.2-7.5-18-7.5h0h0c-1.5,0-3,0.1-4.4,0.4c-0.4,0.1-0.7,0.1-1.1,0.2
c-5.8,1.3-11,4.5-14.6,9.1c-0.1,0.1-0.1,0.1-0.2,0.2c-0.1,0.2-0.2,0.3-0.4,0.5c-0.5,0.7-1.1,1.5-1.5,2.3L193.1,598.5l-54.2-94
L375,95.9h116.8c13,0,25.1,7,31.6,18.3l131.2,227.6C661.1,353.1,661.1,367,654.6,378.3z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

+16
View File
@@ -0,0 +1,16 @@
<svg width="56" height="56" viewBox="0 0 56 56" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0)">
<path d="M8.79286 56.16C10.0629 56.16 11.0329 55.74 11.5229 55.37V53.81H11.5129C10.7829 54.36 9.99286 54.76 8.90286 54.76C7.35286 54.76 6.57286 53.78 6.57286 52.53C6.57286 51.22 7.41286 50.24 8.91286 50.24C10.0229 50.24 10.7629 50.73 11.5129 51.23H11.5229V49.67C11.0129 49.27 10.0929 48.84 8.94286 48.84C6.32286 48.84 4.99286 50.6 4.99286 52.54C4.99286 54.44 6.10286 56.16 8.79286 56.16Z" fill="white"/>
<path d="M14.8554 56H20.3354L20.3854 54.58H16.3954V49H14.8554V56Z" fill="white"/>
<path d="M26.6253 56.16C28.9853 56.16 30.4753 54.72 30.4753 52.5C30.4753 50.28 28.9853 48.84 26.6253 48.84C24.2653 48.84 22.7753 50.28 22.7753 52.5C22.7753 54.72 24.2653 56.16 26.6253 56.16ZM26.6153 54.77C25.1653 54.77 24.3553 53.91 24.3553 52.5C24.3553 51.09 25.1853 50.23 26.6353 50.23C28.0853 50.23 28.8953 51.09 28.8953 52.5C28.8953 53.91 28.0653 54.77 26.6153 54.77Z" fill="white"/>
<path d="M37.0408 56.16C38.9208 56.16 40.4108 55.39 40.4108 53.25V49H38.8708V53.28C38.8708 54.39 38.0008 54.74 37.0608 54.74C36.1208 54.74 35.2508 54.37 35.2508 53.23V49H33.7108V53.3C33.7108 55.38 35.1608 56.16 37.0408 56.16Z" fill="white"/>
<path d="M44.0534 56H47.4834C49.6834 56 51.0034 54.67 51.0034 52.49C51.0034 50.3 49.6834 49 47.4834 49H44.0534V56ZM45.5934 54.61V50.39H47.4734C48.7134 50.39 49.4234 51.07 49.4234 52.51C49.4234 53.96 48.7134 54.61 47.4734 54.61H45.5934Z" fill="white"/>
<path d="M33.2199 26.6697V8.14819L43 26.6697H33.2199Z" fill="#54BEE4"/>
<path d="M33.2151 8.14832L23.435 26.6698H33.2151V40L13 20L33.2151 0V8.14832Z" fill="#54BEE4"/>
</g>
<defs>
<clipPath id="clip0">
<rect width="56" height="56" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

+1
View File
@@ -0,0 +1 @@
<svg width="2119" height="2500" viewBox="0 0 256 302" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid"><path d="M248.495 128.68v-9.683c0-10.596-8.669-19.268-19.267-19.268H26.772c-10.596 0-19.267 8.672-19.267 19.268v9.684C3.019 131.433 0 136.367 0 141.987v25.905c0 5.62 3.02 10.556 7.505 13.309v10.05c0 10.596 8.671 19.267 19.267 19.267h202.456c10.598 0 19.267-8.671 19.267-19.267V181.2c4.488-2.753 7.505-7.69 7.505-13.31v-25.904c0-5.62-3.017-10.556-7.505-13.306zM128.758 0C74.194 0 29.18 40.77 22.439 93.501h212.638C228.335 40.77 183.322 0 128.757 0zM95.969 237.236h63.296l6.463 7.482 9.72-8.395-10.304-11.932H90.088l-10.305 11.932 9.722 8.395 6.464-7.482zm109.6-22.818v40.984c0 11.264-9.217 20.482-20.481 20.482H173.94v-.04c-2.44 0-4.595-1.142-6.03-2.895h-.028l-13.33-17.026-.014.012c-1.424-1.845-3.628-3.057-6.133-3.074-.018 0-.033-.005-.05-.005-.015 0-.03.005-.048.005h-38.59c-.017 0-.032-.005-.047-.005-.018 0-.033.005-.05.005-2.321.015-4.378 1.06-5.804 2.675l-.028-.012-13.64 17.425h-.02c-1.436 1.753-3.59 2.895-6.031 2.895v.04H72.939c-11.264 0-20.481-9.218-20.481-20.482v-40.984H27.426v41.1c0 25.033 20.481 45.515 45.513 45.515h112.156c25.035 0 45.514-20.482 45.514-45.514v-41.101h-25.04z" fill="#0A0B09"/><path d="M210.785 167.62H45.217c-7.82 0-14.217-6.398-14.217-14.218s6.398-14.218 14.217-14.218h165.568c7.817 0 14.215 6.398 14.215 14.218s-6.398 14.217-14.215 14.217" fill="#D7252C"/></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

+3
View File
@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid meet" viewBox="0 0 650 650" width="650" height="650"><defs><path d="M78.18 80.28C-17.91 176.41 -17.91 332.82 78.18 428.96C163.77 514.53 297.08 523.7 393.13 456.88C395.15 466.44 399.77 475.57 407.21 483C421.21 497 533.18 608.98 547.18 622.98C567.58 643.33 600.54 643.33 620.83 622.98C641.21 602.6 641.21 569.64 620.83 549.32C606.84 535.32 494.86 423.31 480.86 409.31C473.47 401.93 464.32 397.29 454.76 395.27C521.62 299.2 512.45 165.91 426.84 80.28C330.73 -15.83 174.3 -15.83 78.18 80.28ZM122.37 384.77C50.66 313.01 50.66 196.25 122.37 124.49C194.11 52.76 310.89 52.76 382.65 124.49C454.4 196.25 454.4 313.01 382.65 384.77C310.89 456.52 194.11 456.52 122.37 384.77Z" id="ax51glKjl"></path><path d="M252.87 68.79C161.9 68.79 86.31 134.62 71.12 221.25C88.61 221.26 102.78 235.44 102.78 252.93C102.78 270.43 88.6 284.61 71.1 284.61C71.06 284.61 71.03 284.61 70.99 284.61C85.85 371.63 161.62 437.86 252.87 437.86C354.79 437.86 437.41 355.24 437.41 253.33C437.41 151.41 354.79 68.79 252.87 68.79" id="b16WydrtxU"></path><path d="M103.23 253.33C103.23 271.12 88.79 285.57 70.99 285.57C53.19 285.57 38.75 271.12 38.75 253.33C38.75 235.53 53.19 221.08 70.99 221.08C88.79 221.08 103.23 235.53 103.23 253.33Z" id="a3fSdH2Na6"></path><path d="M94.3 253.33C94.3 266.2 83.87 276.64 70.99 276.64C58.11 276.64 47.68 266.2 47.68 253.33C47.68 240.45 58.11 230.01 70.99 230.01C83.87 230.01 94.3 240.45 94.3 253.33" id="b39iKYr0O"></path><path d="M194.28 274.58L175.29 274.58C154.64 243.09 143.17 225.6 140.87 222.1C138.85 219.03 137.45 216.72 136.68 215.17C136.65 215.17 136.47 215.17 136.45 215.17C136.76 218.27 136.91 222.78 136.91 228.68C136.91 231.74 136.91 247.04 136.91 274.58L119.15 274.58L119.15 191.05L139.41 191.05L172.56 241.9L176.75 248.72C176.89 248.72 176.97 248.72 176.98 248.72C176.67 246.7 176.52 242.87 176.52 237.24C176.52 234.16 176.52 218.77 176.52 191.05L194.28 191.05L194.28 274.58ZM263.48 274.58L213.39 274.58L213.39 191.05L261.55 191.05L261.55 206.37L232.2 206.37L232.2 224.95L259.51 224.95L259.51 240.21L232.2 240.21L232.2 259.32L263.48 259.32L263.48 274.58ZM335.52 206.37L311.7 206.37L311.7 274.58L292.83 274.58L292.83 206.37L269.13 206.37L269.13 191.05L335.52 191.05L335.52 206.37Z" id="h2U8ed98JX"></path></defs><g><g><g><g><filter id="shadow9140395" x="-1.48" y="0.59" width="645.3" height="645.35" filterUnits="userSpaceOnUse" primitiveUnits="userSpaceOnUse"><feFlood></feFlood><feComposite in2="SourceAlpha" operator="in"></feComposite><feGaussianBlur stdDeviation="1"></feGaussianBlur><feOffset dx="0.1" dy="0.1" result="afterOffset"></feOffset><feFlood flood-color="#000000" flood-opacity="0.5"></feFlood><feComposite in2="afterOffset" operator="in"></feComposite><feMorphology operator="dilate" radius="0.5"></feMorphology><feComposite in2="SourceAlpha" operator="out"></feComposite></filter><path d="M78.18 80.28C-17.91 176.41 -17.91 332.82 78.18 428.96C163.77 514.53 297.08 523.7 393.13 456.88C395.15 466.44 399.77 475.57 407.21 483C421.21 497 533.18 608.98 547.18 622.98C567.58 643.33 600.54 643.33 620.83 622.98C641.21 602.6 641.21 569.64 620.83 549.32C606.84 535.32 494.86 423.31 480.86 409.31C473.47 401.93 464.32 397.29 454.76 395.27C521.62 299.2 512.45 165.91 426.84 80.28C330.73 -15.83 174.3 -15.83 78.18 80.28ZM122.37 384.77C50.66 313.01 50.66 196.25 122.37 124.49C194.11 52.76 310.89 52.76 382.65 124.49C454.4 196.25 454.4 313.01 382.65 384.77C310.89 456.52 194.11 456.52 122.37 384.77Z" id="bPSRIZres" fill="white" fill-opacity="1" stroke="black" stroke-width="2%"></path></g><use xlink:href="#ax51glKjl" opacity="1" fill="#ffffff" fill-opacity="1"></use></g><g><use xlink:href="#b16WydrtxU" opacity="1" fill="#68217a" fill-opacity="1"></use><g><use xlink:href="#b16WydrtxU" opacity="1" fill-opacity="0" stroke="#000000" stroke-width="1" stroke-opacity="0"></use></g></g><g><use xlink:href="#a3fSdH2Na6" opacity="1" fill="#ffffff" fill-opacity="1"></use></g><g><use xlink:href="#b39iKYr0O" opacity="1" fill="#cf18fd" fill-opacity="1"></use><g><use xlink:href="#b39iKYr0O" opacity="1" fill-opacity="0" stroke="#000000" stroke-width="1" stroke-opacity="0"></use></g></g><g><use xlink:href="#h2U8ed98JX" opacity="1" fill="#ffffff" fill-opacity="1"></use><g><use xlink:href="#h2U8ed98JX" opacity="1" fill-opacity="0" stroke="#000000" stroke-width="1" stroke-opacity="0"></use></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

+4
View File
@@ -0,0 +1,4 @@
<svg width="64" height="64" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M26.8269 1.44335C30.028 -0.481118 33.972 -0.481117 37.1731 1.44335L54.8269 12.0567C58.028 13.9812 60 17.5377 60 21.3867V42.6133C60 46.4623 58.028 50.0188 54.8269 51.9433L37.1731 62.5567C33.972 64.4811 30.028 64.4811 26.8269 62.5567L9.17306 51.9433C5.97196 50.0188 4 46.4623 4 42.6133V21.3867C4 17.5377 5.97196 13.9812 9.17306 12.0567L26.8269 1.44335ZM34.5742 12.546C32.9813 11.5861 31.0187 11.5861 29.4257 12.546L17.2409 19.8883C15.648 20.8481 14.6667 22.6221 14.6667 24.5418V39.2263C14.6667 41.1461 15.648 42.92 17.2409 43.8799L29.4257 51.2221C31.0187 52.182 32.9813 52.182 34.5742 51.2221L46.7591 43.8799C48.352 42.92 49.3333 41.1461 49.3333 39.2263V24.5418C49.3333 22.6221 48.352 20.8481 46.7591 19.8883L34.5742 12.546Z" fill="#10222F"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M26.8269 1.44335C30.028 -0.481118 33.972 -0.481117 37.1731 1.44335L54.8269 12.0567C58.028 13.9812 60 17.5377 60 21.3867V42.6133C60 46.4623 58.028 50.0188 54.8269 51.9433L37.1731 62.5567C33.972 64.4811 30.028 64.4811 26.8269 62.5567L9.17306 51.9433C5.97196 50.0188 4 46.4623 4 42.6133V21.3867C4 17.5377 5.97196 13.9812 9.17306 12.0567L26.8269 1.44335ZM34.5742 12.546C32.9813 11.5861 31.0187 11.5861 29.4257 12.546L17.2409 19.8883C15.648 20.8481 14.6667 22.6221 14.6667 24.5418V39.2263C14.6667 41.1461 15.648 42.92 17.2409 43.8799L29.4257 51.2221C31.0187 52.182 32.9813 52.182 34.5742 51.2221L46.7591 43.8799C48.352 42.92 49.3333 41.1461 49.3333 39.2263V24.5418C49.3333 22.6221 48.352 20.8481 46.7591 19.8883L34.5742 12.546Z" fill="#0974D7"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

Some files were not shown because too many files have changed in this diff Show More