Giter Club home page Giter Club logo

diffuse-action's Introduction

Diffuse - Github Action

.github/workflows/after_merge.yml

Simple Github Action wrapper for Jake Wharton's Diffuse tool.

Usage

The action only exposes output containing the diff, so to effectively consume its output it is highly recommended to use other Github Actions to customize your experience.

Configuration:

By default, this action uses Diffuse fork - https://github.com/usefulness/diffuse (due to: JakeWharton/diffuse#111)

  - id: diffuse
    uses: usefulness/diffuse-action@v1
    with:
      old-file-path: old/file/path/old_file.apk
      new-file-path: new/file/path/new_file.apk

You can override the config to use the original Diffuse binary

  - id: diffuse
    uses: usefulness/diffuse-action@v1
    with:
      old-file-path: old/file/path/old_file.apk
      new-file-path: new/file/path/new_file.apk
      diffuse-repo: JakeWharton/diffuse
      lib-version: 0.1.0
Parameters

old-file-path - Path to reference file the diff should be generated for
new-file-path - Path to current file the diff should be generated for
lib-version (Optional) - Overrides dependency version, by default uses the latest published version
diffuse-repo (Optional) - Overrides usefulness/diffuse as the default repository containing published release artifacts.

Outputs

See full list of outputs.
For example: referencing steps.diffuse.outputs.diff-gh-comment at a later stage will print Diffuse tool output as a nicely formatted github comment

Sample: Create Pull Request comment

TODO: explain why to use free actions/cache for now and list its limitation.
Good introduction to the problem: JakeWharton/dependency-tree-diff#8 (comment)

  1. Integrate with a regular Pull Request workflow:
name: Pull Request workflow

on:
  pull_request:

jobs:
  generate-diff:
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v2
    
    - uses: actions/setup-java@v3
      with:
        distribution: 'temurin'
        java-version: 21
      
    - uses: gradle/actions/setup-gradle@v3
      with:
        arguments: assemble

    # Generating the diff starts here ๐Ÿ‘‡ 

    - uses: actions/cache@v2
      name: Download base
      with:
        path: diffuse-source-file
        key: diffuse-${{ github.event.pull_request.base.sha }}

    - id: diffuse
      uses: usefulness/diffuse-action@v1
      with:
        old-file-path: diffuse-source-file
        new-file-path: app/build/outputs/release/app.apk


    # Consuming action output starts here ๐Ÿ‘‡

    - uses: peter-evans/find-comment@v1
      id: find_comment
      with:
        issue-number: ${{ github.event.pull_request.number }}
        body-includes: Diffuse output

    - uses: peter-evans/create-or-update-comment@v1
      if: ${{ steps.diffuse.outputs.diff-raw != null || steps.find_comment.outputs.comment-id != null }}
      with:
        body: |
          Diffuse output (customize your message here): 

          ${{ steps.diffuse.outputs.diff-gh-comment }}
        edit-mode: replace
        comment-id: ${{ steps.find_comment.outputs.comment-id }}
        issue-number: ${{ github.event.pull_request.number }}
        token: ${{ secrets.GITHUB_TOKEN }}

    - uses: actions/upload-artifact@v2
      with:
        name: diffuse-output
        path: ${{ steps.diffuse.outputs.diff-file }}
  1. Integrate with you post-merge flow:
on:
  push:
    branches:
      - master
      - main
      - trunk
      - develop
      - maine
      - mane
  schedule:
    - cron: '0 3 * * 1,4'

jobs:
  diffuse_cache:
    runs-on: ubuntu-latest
    name: Cache artifact for diffuse
    steps:
      - uses: actions/checkout@v2
      
      - uses: actions/setup-java@v3
        with:
          distribution: 'temurin'
          java-version: 21
          
      - uses: gradle/actions/setup-gradle@v3
        with:
          arguments: assemble

      # Integration starts here ๐Ÿ‘‡ 
      
      - uses: actions/cache@v2
        name: Upload base
        with:
          path: diffuse-source-file
          key: diffuse-${{ github.sha }}

      # Copy your build artifact under `diffuse-source-file` name which will be saved in cache
      - run: cp /app/build/outputs/debug/sample-apk.apk diffuse-source-file 
        shell: bash

More examples

Sample application as a pull request comment
Corresponding workflow file

pull_request

๐Ÿ™ Praise ๐Ÿ™ be ๐Ÿ™ to ๐Ÿ™ Wharton ๐Ÿ™

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.