STANDALONE.md
# OeditusCredo Standalone Usage
This guide covers how to use OeditusCredo as a standalone tool without adding it as a project dependency.
## Installation Methods
### Method 1: Hex Archive (Recommended)
Install OeditusCredo as a Hex archive for system-wide availability:
```bash
# Install from Hex
mix archive.install hex oeditus_credo
# Or install from local build
mix archive.build
mix archive.install
```
Once installed, you can run it in any Elixir project:
```bash
mix oeditus_credo
mix oeditus_credo --strict
mix oeditus_credo lib/my_app
```
To uninstall:
```bash
mix archive.uninstall oeditus_credo
```
### Method 2: Escript Executable
Build a standalone executable that can be used without Mix:
```bash
# Build the escript
mix escript.build
# This creates an executable: ./oeditus_credo
# Run it directly
./oeditus_credo
# Or install it globally
sudo cp oeditus_credo /usr/local/bin/
oeditus_credo
```
The escript can be distributed as a single file and works on any system with Erlang installed.
## Usage
Both installation methods support the same command-line options as Credo:
```bash
# Basic usage - analyze current project
mix oeditus_credo
# or
oeditus_credo
# Strict mode - fail on any issues
mix oeditus_credo --strict
# Analyze specific directory
mix oeditus_credo lib/my_app
# Show all issues including low priority
mix oeditus_credo --all
# Different output formats
mix oeditus_credo --format=json
mix oeditus_credo --format=flycheck
# Get help
mix oeditus_credo --help
```
## What's Included
The standalone installation automatically enables all 20 OeditusCredo checks:
**Error Handling**
- MissingErrorHandling
- SilentErrorCase
- SwallowingException
**Database & Performance**
- InefficientFilter
- NPlusOneQuery
- MissingPreload
**LiveView & Concurrency**
- UnmanagedTask
- SyncOverAsync
- MissingHandleAsync
- MissingThrottle
- InlineJavascript
**Code Quality**
- DirectStructUpdate
- CallbackHell
- BlockingInPlug
**Telemetry & Observability**
- MissingTelemetryInObanWorker
- MissingTelemetryInLiveViewMount
- TelemetryInRecursiveFunction
- MissingTelemetryInAuthPlug
- MissingTelemetryForExternalHttp
## CI/CD Integration
### GitHub Actions
```yaml
name: Code Quality
on: [push, pull_request]
jobs:
credo:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: erlef/setup-beam@v1
with:
elixir-version: '1.15'
otp-version: '26'
- name: Install OeditusCredo
run: mix archive.install hex oeditus_credo --force
- name: Run OeditusCredo
run: mix oeditus_credo --strict
```
### GitLab CI
```yaml
oeditus_credo:
image: elixir:1.15
script:
- mix local.hex --force
- mix archive.install hex oeditus_credo --force
- mix oeditus_credo --strict
```
## Comparison: Archive vs Escript
| Feature | Hex Archive | Escript |
|---------|-------------|---------|
| Installation | `mix archive.install` | Copy binary |
| Usage | `mix oeditus_credo` | `./oeditus_credo` or `oeditus_credo` |
| Updates | `mix archive.install` (overwrites) | Replace binary |
| Requires Mix | Yes | No |
| Distribution | Via Hex or file | Single binary file |
| Best for | Development environments | CI/CD, containers |
## Development Workflow
For library maintainers working on OeditusCredo:
```bash
# Build and test locally
mix deps.get
mix compile
mix test
# Build escript
mix escript.build
# Test the escript
./oeditus_credo
# Build archive
mix archive.build
# Install locally for testing
mix archive.install
# Test in another project
cd /path/to/other/project
mix oeditus_credo
```
## Troubleshooting
**Issue: "The task 'oeditus_credo' could not be found"**
- Solution: Reinstall the archive: `mix archive.install hex oeditus_credo --force`
**Issue: Escript fails with "Cannot find Elixir"**
- Solution: Ensure Erlang and Elixir are in your PATH
**Issue: Checks not running**
- Solution: Make sure you're in an Elixir project directory with `mix.exs`
**Issue: Permission denied on escript**
- Solution: `chmod +x oeditus_credo`