diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 5fd264a8..448dc1de 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -29,6 +29,6 @@ // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. "remoteUser": "node", "features": { - "ghcr.io/devcontainers/features/go:1": "1.21" + "ghcr.io/devcontainers/features/go:1": "1.24" } } diff --git a/.github/AGENTS.md b/.github/AGENTS.md new file mode 100644 index 00000000..3db03e75 --- /dev/null +++ b/.github/AGENTS.md @@ -0,0 +1,40 @@ +This is a Go based repository with a VueJS client for the frontend built with Vite and Nuxt, with ShadCN. + +To make life easier, the use of a Taskfile is included for the majority of development commands. + +Please follow these guidelines when contributing: + +## Required Before Each Commit +- Generate Swagger Files: `task swag --force` +- Generate JS API Client: `task typescript-types --force` +- Lint Golang: `task go:lint` +- Lint frontend: `task ui:fix` + +## Repository Structure +### Backend +- `backend/`: Contains the backend folders +- `backend/app`: Contains main app code including API endpoints +- `backend/internal/core`: Contains basic services such as currencies +- `backend/data`: Contains all information related to data, including `ent` schemas, repos, migrations, etc. +- `backend/data/migrations`: Contains migration data, the `sqlite3` sub-folder contains sqlite migrations, `postgres` sub-folder the postgres migrations, BOTH are REQUIRED. +- `backend/data/ent/schema`: Contains the actual `ent` data models. +- `backend/data/repo`: Contains the data repositories +- `backend/pkgs`: Contains general helper functions and services + +### Frontend +- `frontend/`: Contains initial frontend files +- `frontend/components`: Contains the ShadCN components +- `frontend/locales`: Contains the i18n JSON for languages +- `frontend/pages`: Contains VueJS pages +- `frontend/test`: Contains Playwright setup +- `frontend/test/e2e`: Contains actual Playwright test files + +### Docs +- `docs/`: Contains VitePress based documentation + +## Key Guidelines +1. Follow best practices for the various programming languages +2. Maintain existing code structure and organization when possible +3. Use dependency injection when reasonable +4. Write tests for new functionality and after fixing bugs to validate they're fixed +5. Document changes to the `docs/` folder when appropriate \ No newline at end of file diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml new file mode 100644 index 00000000..7a9cd774 --- /dev/null +++ b/.github/workflows/copilot-setup-steps.yml @@ -0,0 +1,52 @@ +name: "Copilot Setup Steps" + +# Automatically run the setup steps when they are changed to allow for easy validation, and +# allow manual testing through the repository's "Actions" tab +on: + workflow_dispatch: + push: + paths: + - .github/workflows/copilot-setup-steps.yml + pull_request: + paths: + - .github/workflows/copilot-setup-steps.yml + +jobs: + # The job MUST be called `copilot-setup-steps` or it will not be picked up by Copilot. + copilot-setup-steps: + runs-on: ubuntu-latest + + # Set the permissions to the lowest permissions possible needed for your steps. + # Copilot will be given its own token for its operations. + permissions: + # If you want to clone the repository as part of your setup steps, for example to install dependencies, you'll need the `contents: read` permission. If you don't clone the repository in your setup steps, Copilot will do this for you automatically after the steps complete. + contents: read + + # You can define any steps you want, and they will run before the agent starts. + # If you do not check out your code, Copilot will do this for you. + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: "22" + + - uses: pnpm/action-setup@v3.0.0 + with: + version: 9.12.2 + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: "1.24" + cache-dependency-path: backend/go.mod + + - name: Install Task + uses: arduino/setup-task@v1 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Perform setup + run: task setup