Contrast Scan GitHub action

Overview

Use Contrast Scan to analyze your code

This github action will enable you to use Contrast Scan to detect vulnerabilities in your code.

This action can currently scan JVM bytecode artifacts produced from Java source code. Note that it targets JVM bytecode and NOT Java source code. The scanner is designed to be run on your deployable artifact.

Requirements

You will need the following items to use Contrast Scan:

  • Credentials for the Contrast's Security Platform.
    • Username
    • Service Key
    • Api Key
    • Organization ID

Usage

All Contrast-related account secrets should be configured as github secrets and will be passed to the scanner via environment variables in the github runner.

A simple workflow to get going is:

on:
  # Trigger analysis when pushing to main or an existing pull requests.  Also trigger on 
  # new pull requests
  push:
    branches:
      - main
  pull_request:
      types: [opened, synchronize, reopened]
name: Common Workflow
jobs:
  build_and_scan:
    runs-on: ubuntu-latest
    # check out project
    steps:
    - uses: actions/checkout@v2
        
    # steps to build the artifact you want to scan
    # -name: Build Project
    # ...
      
    # Scan Artifact    
    - name: Contrast Scan
      uses: Contrast-Security-OSS/contrastscan-action@v1
      with:
        artifact: mypath/target/myartifact.jar
        
      env:
        CONTRAST__API__USER_NAME: "<user name>"
        CONTRAST__API__ORGANIZATION_ID: "<organization id>"
        CONTRAST__API__SERVICE_KEY: ${{ secrets.CONTRAST_SERVICE_KEY }}
        CONTRAST__API__API_KEY: ${{ secrets.CONTRAST_API_KEY }}
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Environment Secrets

  • CONTRAST__API__SERVICE_KEY – [Required] This is the token used to authenticate access to the Contrast Security Platform.
  • CONTRAST__API__API_KEY – [Required] This is the token used to authenticate access to the Contrast Security Platform.
  • GITHUB_TOKENProvided by Github (see Authenticating with the GITHUB_TOKEN).

Don't use this GitHub action if you are in the following situations

  • You are already using the Contrast Scan Maven plug-in. That is, you are using maven to build AND you run 'org.contrastsecurity.maven:scan' during the build (see Contrast Maven Plugin). The Github action and that build plugin accomplish the same thing and can't be used at the same time.

Initial On-boarding of using the action.

These instructions assume you already have setup a github workflow to build your project. If not, read the GitHub Actions documentation to learn what GitHub Actions are and how to set them up. After understanding what a GitHub action is, then come back here to complete the following steps:

  1. Create a branch of your code to add the scanning action to your workflow. This is typically located at ./github/workflows/build.yml
  2. Add the contrastscan-action as described above to your workflow and commit.
  3. After committing, create a Pull Request to merge the update back to your main branch. If using the parameters in the example workflow above, creating the PR will trigger the Scan to run. You will see the extra "Code Scanning" check appear in the PR.
  4. Based on Contrast Scan analysis findings, GitHub will control whether a build check will fail or not. It does this by comparing the code scanning analysis of the PR to the last code scanning analysis of the destination branch. GitHub will fail the check if the code scanning analysis has additional findings that the destination branch does not have. This is intended to prevent new code from introducing vulnerabilities.
  5. On the first run of Contrast Scan, the destination branch will have not had any code scanning analysis performed and thus all vulnerabilities will be discovered as "new", but since there is nothing to compare it to on the destination branch GitHub will not fail the code scanning check. Since its likely there will be new findings with the addition of a new security scanning tool, Contrast Scan in this case, we don't want to fail and block merging the PR that adds the scanning tool, forcing the owner of the PR to now fix all the newly exposed vulnerabilities that already existed in the code base.
  6. Once the PR is merged back to the main branch, the contrastscan-action will run on the main branch and a code scanning analysis will be added to GitHub for it. This will cause the "Security" Tab of the repo to now show all the current vulnerabilities the code base has on its main branch. After this occurs, now all new PRs that are created where the contrastscan-action is run will fail the code scanning check if they introduce new vulnerabilities beyond the baseline we just established.
You might also like...
Playground Android project to test jacoco-report github action

jacoco-android-playground Playground Android project to test jacoco-report github action Running Code Coverage at Module level The app module has mult

A sample app that uses CameraX and Milkit to scan multiple barcodes and QR code
A sample app that uses CameraX and Milkit to scan multiple barcodes and QR code

MLKit-QR-and-Barcode-Scanner This sample app uses Firebase MLKit to scan bar codes and QR Codes There are a number of types of barcodes, MLKKIt is abl

Body Scan App in Jetpack Compose 🚀

Body Scan 📜 Description Demonstrating a effect that I can't name 😜 , maybe you can Just look at the video and code 💡 Motivation and Context Having

simple qrcode scan application
simple qrcode scan application

qrcode simple qrcode scan application

Scan and view your e-receipts
Scan and view your e-receipts

ReceptsKeeper Scan and view your e-receipts Main features: Display list of receipts sorted by date Adding receipts by scanning Entering a captcha, if

Burp extension to scan Log4Shell (CVE-2021-44228) vulnerability pre and post auth
Burp extension to scan Log4Shell (CVE-2021-44228) vulnerability pre and post auth

Log4J Scanner Burp extension to scan Log4Shell (CVE-2021-44228) vulnerability pre and post auth. Disclaimer I am not responsible for your actions, bur

A tool for scan and replace file content. Instead of global search and replace, it can specify replace scope

ScanReplace.kt A tool for scan and replace file content Instead of global search and replace, it can specify replace scope Usage java -jar ScanReplace

Scan and view your e-receipts
Scan and view your e-receipts

ReceptsKeeper Scan and view your e-receipts Main features: Display list of receipts sorted by date Adding receipts by scanning Entering a captcha, if

App that helps to scan barcodes, Qr that sends to destined link
App that helps to scan barcodes, Qr that sends to destined link

ScanCode Aplicación Android ScanCode Escanea cualquier código Implementación de

A flutter plugin to scan stripe readers and connect to the them and get the payment methods.

stripe_terminal A flutter plugin to scan stripe readers and connect to the them and get the payment methods. Installation Android No Configuration nee

Appshark is a static taint analysis platform to scan vulnerabilities in an Android app.
Appshark is a static taint analysis platform to scan vulnerabilities in an Android app.

Document Index 1.overview 2.startup 3.how to write rules 4.how to find compliance problems use appshark 5.a path traversal game 6.argument 7.engine co

📲  Android Application to track any user activity on Github built using the Github Developers API. Used Retrofit to fetch data and MVVM Architecture.
📲 Android Application to track any user activity on Github built using the Github Developers API. Used Retrofit to fetch data and MVVM Architecture.

Github Visualizer 📲 Android Application to track any user activity on Github built using the Github Developers Api. A sample application to demonstra

A simple app that consumes The GitHub APIs to display github users. The aim was to learn about different jetpack libraries, built with MVVM pattern.
A simple app that consumes The GitHub APIs to display github users. The aim was to learn about different jetpack libraries, built with MVVM pattern.

A simple app that consumes The GitHub APIs to display github users. The aim was to learn about different jetpack libraries, built with MVVM pattern.

Github-Api-Pagination-Example - Pagination 3 Example using Github Api

Github-Api-Pagination Pagination 3 Example using Github Api Tech Stack 100% Kotl

GithubUsersGalleryApp - Github users app consumed Github API

GithubUsersApp ✨ Github users app consumed Github API ✨ Architecture Using Moder

GitHub application fetches events, repositories and profile using GitHub APIs
GitHub application fetches events, repositories and profile using GitHub APIs

GitHub application using GitHub REST API Dagger MVVM architecture Mockk Jetpack Compose Kotlin Coroutines Application pages Attention If you want to u

Github User App for searching Github Users and get several information from it.
Github User App for searching Github Users and get several information from it.

GithubUserApp Github User App for searching Github Users and get several information from it. This code implement with Coroutines, Retrofit, Architect

An Android application consuming the GitHub API to search for users on Github, display their followers, following and repositories. The project is built with Compose, MVVM pattern as well as other architectural components and libraries. A simple Floating Action Button that shows an anchored Navigation View
A simple Floating Action Button that shows an anchored Navigation View

Floating Navigation View A simple Floating Action Button that shows an anchored Navigation View and was inspired by Menu Material Fixed created by Tom

Comments
  • Unable to build action container

    Unable to build action container

    I'm trying to integrate the Contrast Scan Action to a pipeline but the GH execution is stuck building the action container I'm using this version Contrast-Security-OSS/contrastscan-action@v2

    Mon, 27 Jun 2022 18:02:50 GMT
    Build container for action use: '/home/runner/work/_actions/Contrast-Security-OSS/contrastscan-action/v2/Dockerfile'.
    Mon, 27 Jun 2022 18:02:50 GMT   /usr/bin/docker build -t 72882e:57d707e2ad494ed981317346c426b508 -f "/home/runner/work/_actions/Contrast-Security-OSS/contrastscan-action/v2/Dockerfile" "/home/runner/work/_actions/Contrast-Security-OSS/contrastscan-action/v2"
    Mon, 27 Jun 2022 18:02:52 GMT   Sending build context to Docker daemon  26.11kB
    Mon, 27 Jun 2022 18:02:52 GMT   
    Mon, 27 Jun 2022 18:02:52 GMT   Step 1/4 : FROM ubuntu:latest
    Mon, 27 Jun 2022 18:02:53 GMT   latest: Pulling from library/ubuntu
    Mon, 27 Jun 2022 18:02:53 GMT   405f018f9d1d: Pulling fs layer
    Mon, 27 Jun 2022 18:02:54 GMT   405f018f9d1d: Verifying Checksum
    Mon, 27 Jun 2022 18:02:54 GMT   405f018f9d1d: Download complete
    Mon, 27 Jun 2022 18:02:55 GMT   405f018f9d1d: Pull complete
    Mon, 27 Jun 2022 18:02:55 GMT   Digest: sha256:b6b83d3c331794420340093eb706a6f152d9c1fa51b262d9bf34594887c2c7ac
    Mon, 27 Jun 2022 18:02:55 GMT   Status: Downloaded newer image for ubuntu:latest
    Mon, 27 Jun 2022 18:02:55 GMT    ---> 27941809078c
    Mon, 27 Jun 2022 18:02:55 GMT   Step 2/4 : RUN apt-get update && apt-get install -y wget      && wget https://pkg.contrastsecurity.com/artifactory/cli/1.0.2/linux/contrast     && chmod +x contrast && mv contrast /usr/bin
    Mon, 27 Jun 2022 18:02:55 GMT    ---> Running in f56ddc75f029
    Mon, 27 Jun 2022 18:02:56 GMT   Get:1 http://archive.ubuntu.com/ubuntu jammy InRelease [270 kB]
    Mon, 27 Jun 2022 18:02:56 GMT   Get:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [109 kB]
    Mon, 27 Jun 2022 18:02:56 GMT   Get:3 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [99.8 kB]
    Mon, 27 Jun 2022 18:02:56 GMT   Get:4 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
    Mon, 27 Jun 2022 18:02:56 GMT   Get:5 http://archive.ubuntu.com/ubuntu jammy/main amd64 Packages [1792 kB]
    Mon, 27 Jun 2022 18:02:56 GMT   Get:6 http://archive.ubuntu.com/ubuntu jammy/restricted amd64 Packages [164 kB]
    Mon, 27 Jun 2022 18:02:56 GMT   Get:7 http://archive.ubuntu.com/ubuntu jammy/universe amd64 Packages [17.5 MB]
    Mon, 27 Jun 2022 18:02:56 GMT   Get:8 http://archive.ubuntu.com/ubuntu jammy/multiverse amd64 Packages [266 kB]
    Mon, 27 Jun 2022 18:02:56 GMT   Get:9 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 Packages [162 kB]
    Mon, 27 Jun 2022 18:02:56 GMT   Get:10 http://archive.ubuntu.com/ubuntu jammy-updates/restricted amd64 Packages [250 kB]
    Mon, 27 Jun 2022 18:02:56 GMT   Get:11 http://archive.ubuntu.com/ubuntu jammy-updates/multiverse amd64 Packages [4648 B]
    Mon, 27 Jun 2022 18:02:56 GMT   Get:12 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages [406 kB]
    Mon, 27 Jun 2022 18:02:56 GMT   Get:13 http://archive.ubuntu.com/ubuntu jammy-backports/universe amd64 Packages [5797 B]
    Mon, 27 Jun 2022 18:02:57 GMT   Get:14 http://security.ubuntu.com/ubuntu jammy-security/universe amd64 Packages [94.9 kB]
    Mon, 27 Jun 2022 18:02:57 GMT   Get:15 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages [238 kB]
    Mon, 27 Jun 2022 18:02:57 GMT   Get:16 http://security.ubuntu.com/ubuntu jammy-security/multiverse amd64 Packages [4648 B]
    Mon, 27 Jun 2022 18:02:57 GMT   Get:17 http://security.ubuntu.com/ubuntu jammy-security/restricted amd64 Packages [212 kB]
    Mon, 27 Jun 2022 18:02:57 GMT   Fetched 21.7 MB in 2s (13.1 MB/s)
    Mon, 27 Jun 2022 18:02:58 GMT   Reading package lists...
    Mon, 27 Jun 2022 18:02:59 GMT   Reading package lists...
    Mon, 27 Jun 2022 18:02:59 GMT   Building dependency tree...
    Mon, 27 Jun 2022 18:02:59 GMT   Reading state information...
    Mon, 27 Jun 2022 18:02:59 GMT   The following additional packages will be installed:
    Mon, 27 Jun 2022 18:02:59 GMT     ca-certificates libpsl5 openssl publicsuffix
    Mon, 27 Jun 2022 18:02:59 GMT   The following NEW packages will be installed:
    Mon, 27 Jun 2022 18:02:59 GMT     ca-certificates libpsl5 openssl publicsuffix wget
    Mon, 27 Jun 2022 18:02:59 GMT   0 upgraded, 5 newly installed, 0 to remove and 8 not upgraded.
    Mon, 27 Jun 2022 18:02:59 GMT   Need to get 1889 kB of archives.
    Mon, 27 Jun 2022 18:02:59 GMT   After this operation, 3929 kB of additional disk space will be used.
    Mon, 27 Jun 2022 18:02:59 GMT   Get:1 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 openssl amd64 3.0.2-0ubuntu1.5 [1186 kB]
    Mon, 27 Jun 2022 18:02:59 GMT   Get:2 http://archive.ubuntu.com/ubuntu jammy/main amd64 ca-certificates all 20211016 [148 kB]
    Mon, 27 Jun 2022 18:02:59 GMT   Get:3 http://archive.ubuntu.com/ubuntu jammy/main amd64 libpsl5 amd64 0.21.0-1.2build2 [58.4 kB]
    Mon, 27 Jun 2022 18:02:59 GMT   Get:4 http://archive.ubuntu.com/ubuntu jammy/main amd64 publicsuffix all 20211207.1025-1 [129 kB]
    Mon, 27 Jun 2022 18:02:59 GMT   Get:5 http://archive.ubuntu.com/ubuntu jammy/main amd64 wget amd64 1.21.2-2ubuntu1 [367 kB]
    Mon, 27 Jun 2022 18:02:59 GMT   debconf: delaying package configuration, since apt-utils is not installed
    Mon, 27 Jun 2022 18:02:59 GMT   Fetched 1889 kB in 0s (7319 kB/s)
    Mon, 27 Jun 2022 18:02:59 GMT   Selecting previously unselected package openssl.
    Mon, 27 Jun 2022 18:02:59 GMT   (Reading database ... 
    Mon, 27 Jun 2022 18:02:59 GMT   (Reading database ... 5%
    Mon, 27 Jun 2022 18:02:59 GMT   (Reading database ... 10%
    Mon, 27 Jun 2022 18:02:59 GMT   (Reading database ... 15%
    Mon, 27 Jun 2022 18:02:59 GMT   (Reading database ... 20%
    Mon, 27 Jun 2022 18:02:59 GMT   (Reading database ... 25%
    Mon, 27 Jun 2022 18:02:59 GMT   (Reading database ... 30%
    Mon, 27 Jun 2022 18:02:59 GMT   (Reading database ... 35%
    Mon, 27 Jun 2022 18:02:59 GMT   (Reading database ... 40%
    Mon, 27 Jun 2022 18:02:59 GMT   (Reading database ... 45%
    Mon, 27 Jun 2022 18:02:59 GMT   (Reading database ... 50%
    Mon, 27 Jun 2022 18:02:59 GMT   (Reading database ... 55%
    Mon, 27 Jun 2022 18:02:59 GMT   (Reading database ... 60%
    Mon, 27 Jun 2022 18:02:59 GMT   (Reading database ... 65%
    Mon, 27 Jun 2022 18:02:59 GMT   (Reading database ... 70%
    Mon, 27 Jun 2022 18:02:59 GMT   (Reading database ... 75%
    Mon, 27 Jun 2022 18:02:59 GMT   (Reading database ... 80%
    Mon, 27 Jun 2022 18:02:59 GMT   (Reading database ... 85%
    Mon, 27 Jun 2022 18:02:59 GMT   (Reading database ... 90%
    Mon, 27 Jun 2022 18:02:59 GMT   (Reading database ... 95%
    Mon, 27 Jun 2022 18:02:59 GMT   (Reading database ... 100%
    Mon, 27 Jun 2022 18:02:59 GMT   (Reading database ... 4395 files and directories currently installed.)
    Mon, 27 Jun 2022 18:02:59 GMT   Preparing to unpack .../openssl_3.0.2-0ubuntu1.5_amd64.deb ...
    Mon, 27 Jun 2022 18:02:59 GMT   Unpacking openssl (3.0.2-0ubuntu1.5) ...
    Mon, 27 Jun 2022 18:02:59 GMT   Selecting previously unselected package ca-certificates.
    Mon, 27 Jun 2022 18:02:59 GMT   Preparing to unpack .../ca-certificates_20211016_all.deb ...
    Mon, 27 Jun 2022 18:02:59 GMT   Unpacking ca-certificates (20211016) ...
    Mon, 27 Jun 2022 18:02:59 GMT   Selecting previously unselected package libpsl5:amd64.
    Mon, 27 Jun 2022 18:02:59 GMT   Preparing to unpack .../libpsl5_0.21.0-1.2build2_amd64.deb ...
    Mon, 27 Jun 2022 18:02:59 GMT   Unpacking libpsl5:amd64 (0.21.0-1.2build2) ...
    Mon, 27 Jun 2022 18:02:59 GMT   Selecting previously unselected package publicsuffix.
    Mon, 27 Jun 2022 18:02:59 GMT   Preparing to unpack .../publicsuffix_20211207.1025-1_all.deb ...
    Mon, 27 Jun 2022 18:02:59 GMT   Unpacking publicsuffix (20211207.1025-1) ...
    Mon, 27 Jun 2022 18:02:59 GMT   Selecting previously unselected package wget.
    Mon, 27 Jun 2022 18:02:59 GMT   Preparing to unpack .../wget_1.21.2-2ubuntu1_amd64.deb ...
    Mon, 27 Jun 2022 18:02:59 GMT   Unpacking wget (1.21.2-2ubuntu1) ...
    Mon, 27 Jun 2022 18:02:59 GMT   Setting up libpsl5:amd64 (0.21.0-1.2build2) ...
    Mon, 27 Jun 2022 18:02:59 GMT   Setting up wget (1.21.2-2ubuntu1) ...
    Mon, 27 Jun 2022 18:02:59 GMT   Setting up openssl (3.0.2-0ubuntu1.5) ...
    Mon, 27 Jun 2022 18:02:59 GMT   Setting up publicsuffix (20211207.1025-1) ...
    Mon, 27 Jun 2022 18:02:59 GMT   Setting up ca-certificates (20211016) ...
    Mon, 27 Jun 2022 18:02:59 GMT   debconf: unable to initialize frontend: Dialog
    Mon, 27 Jun 2022 18:02:59 GMT   debconf: (TERM is not set, so the dialog frontend is not usable.)
    Mon, 27 Jun 2022 18:02:59 GMT   debconf: falling back to frontend: Readline
    Mon, 27 Jun 2022 18:02:59 GMT   debconf: unable to initialize frontend: Readline
    Mon, 27 Jun 2022 18:02:59 GMT   debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.)
    Mon, 27 Jun 2022 18:02:59 GMT   debconf: falling back to frontend: Teletype
    Mon, 27 Jun 2022 18:03:00 GMT   Updating certificates in /etc/ssl/certs...
    Mon, 27 Jun 2022 18:03:00 GMT   127 added, 0 removed; done.
    Mon, 27 Jun 2022 18:03:00 GMT   Processing triggers for libc-bin (2.35-0ubuntu3) ...
    Mon, 27 Jun 2022 18:03:00 GMT   Processing triggers for ca-certificates (20211016) ...
    Mon, 27 Jun 2022 18:03:00 GMT   Updating certificates in /etc/ssl/certs...
    Mon, 27 Jun 2022 18:03:01 GMT   0 added, 0 removed; done.
    Mon, 27 Jun 2022 18:03:01 GMT   Running hooks in /etc/ca-certificates/update.d...
    Mon, 27 Jun 2022 18:03:01 GMT   done.
    Mon, 27 Jun 2022 18:03:01 GMT   --2022-06-27 18:03:01--  https://pkg.contrastsecurity.com/artifactory/cli/1.0.2/linux/contrast
    Mon, 27 Jun 2022 18:03:01 GMT   Resolving pkg.contrastsecurity.com (pkg.contrastsecurity.com)... 54.85.114.59, 54.174.213.68, 54.147.240.236, ...
    Mon, 27 Jun 2022 18:03:01 GMT   Connecting to pkg.contrastsecurity.com (pkg.contrastsecurity.com)|54.85.114.59|:443... connected.
    Mon, 27 Jun 2022 18:15:00 GMT   HTTP request sent, awaiting response... 
    Mon, 27 Jun 2022 18:15:00 GMT   Error: The operation was canceled.
    
    opened by cgperez 2
  • Add initial github action

    Add initial github action

    Implements the initial contrast scan github action. Note that for PR, I'm mostly unsure if I'm writing idiomatic kotlin or not. I'm still learning the KoTest Framework so there is nearly zero automated tests at the moment. However I wanted to collect feedback on my kotlin code sooner rather tha later. My intention is to keep adding tests while the review is occuring.

    opened by seschis 0
Releases(v2.0.3)
Owner
Contrast Security OSS
Contrast Security OSS
Simple API to perform AES encryption on Android. This is the Android counterpart to the AESCrypt library Ruby and Obj-C (with the same weak security defaults :( ) created by Gurpartap Singh. https://github.com/Gurpartap/aescrypt

AESCrypt-Android Simple API to perform AES encryption on Android with no dependancies. This is the Android counterpart to the AESCrypt library Ruby an

Scott Alexander-Bown 636 Dec 18, 2022
ArchGuard Scanner for scan Git change history, scan source code by Chapi for Java, TypeScript, Kotlin, Go..、Java bytecode use for JVM languages, scan Jacoco test coverage.

Arch Scanner Requirements: JDK 12 Scanner: scan_git - Git commit history scan scan_jacoco - Jacoco scan scan_bytecode - for JVM languages known issues

ArchGuard 27 Jul 28, 2022
Automated-build-android-app-with-github-action - CI/CD Automated Build Android App Bundle / APK / Signed With Github Action

Automated Build Android With Using Github Action Project Github Action Script Us

Faisal Amir 34 Dec 19, 2022
This application uses Google Play Services Vision library to scan barcodes. It uses Google's on device ML kit to scan for barcodes.

Barcode-Scanner This application showcases use of Google Play Services Vision library It uses Google's on device machine learning kit to scan for barc

Soumik 2 Apr 28, 2022
HorizontalListView is an Android ListView widget which scrolls in a horizontal manner (in contrast with the SDK-provided ListView which scrolls vertically).

HorizontalListView HorizontalListView is an Android ListView widget which scrolls in a horizontal manner (in contrast with the SDK-provided ListView w

MeetMe 722 Nov 10, 2022
[] Action bar implementation which uses the native action bar on Android 4.0+ and a custom implementation on pre-4.0 through a single API and theme.

DEPRECATED ActionBarSherlock is deprecated. No more development will be taking place. For an up-to-date action bar backport use AppCompat. Thanks for

Jake Wharton 7.1k Dec 24, 2022
Custom view to expand long text with view more,less action , you can customize min lines , action color

ExpandableTextView Custom expadable text view Examples : <mostafa.projects.expandabletextview.ExpandableTextView android:layout_wi

Mostafa Gad 8 Jan 25, 2022
A dual-function menu button that offers a default action as well as the possibility of choosing a different action by selecting from a set of alternatives.

A dual-function menu button that offers a default action as well as the possibility of choosing a different action by selecting from a set of alternatives.

Kojo Fosu Bempa Edue 114 Nov 29, 2022
Akka-in-action-kotlin - Accompanying source code for Akka in Action by Kotlin

Akka実践バイブル Kotlin版サンプルコード ( Accompanying source code for Akka in Action by Kotli

nrs 7 Jul 26, 2022
A composite Github Action to execute the Kotlin Script with compiler plugin and dependency caching!

Kotlin Script Github Action Kotlin can also be used as a scripting language, which is more safer, concise, and fun to write than bash or python. Githu

Suresh 9 Nov 28, 2022