GitStore

Package Version Hex Docs

A Gleam library for using GitHub repositories as backend storage. GitStore provides a simple API to create, read, update, and delete files in GitHub repositories through the GitHub REST API.

Features

📁 File Operations: Create, read, update, and delete files in GitHub repositories

Installation

gleam add git_store@1

Configuration

Create a GitHubConfig with your repository details and authentication token:

import git_store

// Using the convenience function (recommended)
let config = git_store.new_config(
  owner: "your-username",
  repo: "your-repository", 
  token: "ghp_your-github-token"
)

Configuration Options

Direct construction

import git_store.{GitHubConfig}

let config = GitHubConfig(
  owner: "your-username",
  repo: "your-repository", 
  token: "ghp_your-github-token",
  base_url: "https://api.github.com"
)

For GitHub Enterprise

import git_store

let config = git_store.new_enterprise_config(
  owner: "your-org",
  repo: "your-repo",
  token: "your-token", 
  base_url: "https://github.your-company.com/api/v3"
)

Usage

import git_store
import gleam/io
import gleam/string

pub fn main() -> Nil {
  let config = git_store.new_config(
    owner: "your-username",
    repo: "your-repository",
    token: "your-github-token"
  )

  // Create a new file
  case git_store.create_file(config, "hello.txt", "Hello, World!") {
    Ok(_) -> io.println("File created successfully")
    Error(err) -> io.println("Error: " <> string.inspect(err))
  }

  // Read a file
  case git_store.get_file(config, "hello.txt") {
    Ok(response) -> {
      case response {
        types.GitHubGetFileResponse(content, _, _, _) -> 
          io.println("File content: " <> content)
        _ -> io.println("Unexpected response")
      }
    }
    Error(err) -> io.println("Error: " <> string.inspect(err))
  }

  // Update a file
  case git_store.update_file(config, "hello.txt", "Hello, Updated World!") {
    Ok(_) -> io.println("File updated successfully")
    Error(err) -> io.println("Error: " <> string.inspect(err))
  }

  // Delete a file
  case git_store.delete_file(config, "hello.txt") {
    Ok(_) -> io.println("File deleted successfully")
    Error(err) -> io.println("Error: " <> string.inspect(err))
  }
}

API Reference

Core Functions

Configuration

GitHubConfig(
  owner: String,    // Repository owner/organization
  repo: String,     // Repository name
  token: String,    // GitHub personal access token
  base_url: String  // GitHub API base URL
)

Error Types

Commit Message Format

GitStore automatically generates commit messages with operation prefixes:

Development

gleam run   # Run the project
gleam test  # Run the tests

Documentation

Further documentation can be found at https://hexdocs.pm/git_store.

Search Document