Skip to content

GitHub Action, containerized and written in Go, to detect simple cycles or topological generations in directed multi-graphs.

License

Notifications You must be signed in to change notification settings

tcm5343/circular-dependency-detector

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Repository files navigation

circular-dependency-detector

Go Report Card License: MIT

What?

A GitHub action, containerized and written in Go, to detect simple cycles or topological generations in directed multi-graphs. While this repo has utility, it is not novel and serves primarily pedagogical purposes.

This project was first implemented at the University of Texas at Austin as a group project with tcm5343, pabs159, and rory-tatum. A use case was identified that applied to our industry experience.

Usage

Below is an example GitHub Action job which utilizes the circular dependency detector. Simply write you graph input file to /testing/data and then pass that into the detector. Reminder that the checkout location in an Action is /github/workspace. Only Ubuntu runners support containerized Actions.

jobs:
  cdd:
    runs-on: ubuntu-latest
    steps:
      - name: create graph input file
        run: |
          echo -e "1 2\n2 3\n3 1" > some-input-graph.txt

      - name: circular-dependency-detector
        uses: tcm5343/circular-dependency-detector@<TODO LATEST VERSION HERE>
        with:
          adjacency_list_path: /github/workspace/some-input-graph.txt

Contributing

Command for generating the proto files: protoc --go_out=. --go-grpc_out=. --go_opt=paths=source_relative --go-grpc_opt=paths=source_relative protos/filestream.proto

Software

  • Task shall be used in the CI/CD pipelines and for local development for orchestration. Run task for the list of tasks.
  • Podman is used to manage containers in theTaskfile.
  • golangci-lint is used for lint.

Local Configuration

For local development, create a .env file at the root of the repository to use as your config. The only supported format for the input graph file environment variable (INPUT_FILE) is an adjacency list which follows the format used by NetworkX. An important note for debugging is the values in .env are simply passed to the app through positional arguments.

INPUT_FILE=/github/workspace/testing/data/adj_list_no_cycle.txt  # no spaces for now, defaults to {i don't know yet}
FAIL_ON_CYCLE=true  # default is false
OUTPUT_FILE="/github/workspace/"

Roadmap

Future work is identified in TODO.md.

Musical Acknowledgements

Bob Dylan - Early Mornin' Rain

About

GitHub Action, containerized and written in Go, to detect simple cycles or topological generations in directed multi-graphs.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published