Compare commits
23 Commits
Author | SHA1 | Date | |
---|---|---|---|
43fc67ded6 | |||
8e7781a346 | |||
68dd90048f | |||
7bf54bbd8c | |||
9fa5818860 | |||
77859b3d94 | |||
9e26479f67 | |||
000797f930 | |||
1e8e06738b | |||
28dbf76789 | |||
93aa1ebd3b | |||
bf13344cbe | |||
62358e100c | |||
7ee1cd94dc | |||
893aa4db51 | |||
6b9da9dc15 | |||
44e08b62fd | |||
3feb35ea7b | |||
849fec6f01 | |||
d27ee1202b | |||
32ac21afd2 | |||
39959f041d | |||
124d702ec4 |
@ -65,13 +65,20 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: release # Wait for binary cache to propagate
|
needs: release # Wait for binary cache to propagate
|
||||||
steps:
|
steps:
|
||||||
|
- name: Get domain
|
||||||
|
id: get_domain
|
||||||
|
run: |
|
||||||
|
DOMAIN=$(basename ${{ gitea.server_url }})
|
||||||
|
echo $DOMAIN
|
||||||
|
echo "domain=$DOMAIN" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Docker meta
|
- name: Docker meta
|
||||||
id: meta
|
id: meta
|
||||||
uses: docker/metadata-action@v5
|
uses: docker/metadata-action@v5
|
||||||
with:
|
with:
|
||||||
# list of Docker images to use as base name for tags
|
# list of Docker images to use as base name for tags
|
||||||
images: |
|
images: |
|
||||||
${{ gitea.server_url }}/${{ gitea.repository }}
|
${{ steps.get_domain.outputs.domain }}/${{ gitea.repository }}
|
||||||
# generate Docker tags based on the following events/attributes
|
# generate Docker tags based on the following events/attributes
|
||||||
tags: |
|
tags: |
|
||||||
type=ref,event=branch
|
type=ref,event=branch
|
||||||
|
123
.github/workflows/release.yaml
vendored
123
.github/workflows/release.yaml
vendored
@ -30,9 +30,45 @@ jobs:
|
|||||||
- name: Check
|
- name: Check
|
||||||
run: nix flake check
|
run: nix flake check
|
||||||
|
|
||||||
release:
|
# release:
|
||||||
|
# runs-on: ubuntu-latest
|
||||||
|
# needs: check
|
||||||
|
# steps:
|
||||||
|
# - name: Checkout
|
||||||
|
# uses: actions/checkout@v4
|
||||||
|
|
||||||
|
# - name: Install Nix
|
||||||
|
# uses: cachix/install-nix-action@v31
|
||||||
|
# with:
|
||||||
|
# nix_path: nixpkgs=channel:nixos-unstable
|
||||||
|
|
||||||
|
# - name: Use Cachix
|
||||||
|
# uses: cachix/cachix-action@v16
|
||||||
|
# with:
|
||||||
|
# name: trevstack
|
||||||
|
# authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
|
|
||||||
|
# - name: Build
|
||||||
|
# run: >
|
||||||
|
# nix build
|
||||||
|
# .#trevstack-linux-amd64
|
||||||
|
# .#trevstack-linux-arm64
|
||||||
|
# .#trevstack-linux-arm
|
||||||
|
# .#trevstack-windows-amd64
|
||||||
|
# .#trevstack-darwin-amd64
|
||||||
|
# .#trevstack-darwin-arm64
|
||||||
|
|
||||||
|
# - name: Release
|
||||||
|
# uses: softprops/action-gh-release@v2
|
||||||
|
# with:
|
||||||
|
# generate_release_notes: true
|
||||||
|
# files: |-
|
||||||
|
# result*/bin/*
|
||||||
|
|
||||||
|
# https://docs.docker.com/build/ci/github-actions/manage-tags-labels/
|
||||||
|
package:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: check
|
needs: check # Wait for binary cache to propagate
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
@ -48,39 +84,14 @@ jobs:
|
|||||||
name: trevstack
|
name: trevstack
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
|
|
||||||
- name: Build
|
- name: Set env
|
||||||
run: >
|
run: |
|
||||||
nix build
|
TAG=${{ github.ref_name }}
|
||||||
.#trevstack-linux-amd64
|
VERSION=${TAG#v}
|
||||||
.#trevstack-linux-arm64
|
REGISTRY="ghcr.io"
|
||||||
.#trevstack-linux-arm
|
|
||||||
.#trevstack-windows-amd64
|
|
||||||
.#trevstack-darwin-amd64
|
|
||||||
.#trevstack-darwin-arm64
|
|
||||||
|
|
||||||
- name: Release
|
echo "VERSION=${VERSION}" >> $GITHUB_ENV
|
||||||
uses: softprops/action-gh-release@v2
|
echo "REGISTRY=${REGISTRY}" >> $GITHUB_ENV
|
||||||
with:
|
|
||||||
generate_release_notes: true
|
|
||||||
files: |-
|
|
||||||
result*/bin/*
|
|
||||||
|
|
||||||
# https://docs.docker.com/build/ci/github-actions/manage-tags-labels/
|
|
||||||
package:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: release # Wait for binary cache to propagate
|
|
||||||
steps:
|
|
||||||
- name: Docker meta
|
|
||||||
id: meta
|
|
||||||
uses: docker/metadata-action@v5
|
|
||||||
with:
|
|
||||||
# list of Docker images to use as base name for tags
|
|
||||||
images: |
|
|
||||||
ghcr.io/${{ github.repository }}
|
|
||||||
# generate Docker tags based on the following events/attributes
|
|
||||||
tags: |
|
|
||||||
type=ref,event=branch
|
|
||||||
type=semver,pattern={{version}}
|
|
||||||
|
|
||||||
- name: Login to GitHub Container Registry
|
- name: Login to GitHub Container Registry
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
@ -89,15 +100,39 @@ jobs:
|
|||||||
username: ${{ github.actor }}
|
username: ${{ github.actor }}
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Set up QEMU
|
- name: Build & Load Images
|
||||||
uses: docker/setup-qemu-action@v3
|
run: |
|
||||||
|
nix build .#trevstack-linux-amd64-image && ./result | docker load
|
||||||
|
nix build .#trevstack-linux-arm64-image && ./result | docker load
|
||||||
|
nix build .#trevstack-linux-arm-image && ./result | docker load
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Push Images
|
||||||
uses: docker/setup-buildx-action@v3
|
run: |
|
||||||
|
docker image tag trevstack:$VERSION-amd64 $REGISTRY/$GITHUB_REPOSITORY:$VERSION-amd64
|
||||||
|
docker push $REGISTRY/$GITHUB_REPOSITORY:$VERSION-amd64
|
||||||
|
|
||||||
- name: Build and push
|
docker image tag trevstack:$VERSION-arm64 $REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm64
|
||||||
uses: docker/build-push-action@v6
|
docker push $REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm64
|
||||||
with:
|
|
||||||
push: true
|
docker image tag trevstack:$VERSION-arm $REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
docker push $REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
|
||||||
|
- name: Push Manifest
|
||||||
|
run: |
|
||||||
|
docker manifest create $REGISTRY/$GITHUB_REPOSITORY:$VERSION \
|
||||||
|
$REGISTRY/$GITHUB_REPOSITORY:$VERSION-amd64 \
|
||||||
|
$REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm64 \
|
||||||
|
$REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm
|
||||||
|
docker manifest annotate $REGISTRY/$GITHUB_REPOSITORY:$VERSION $REGISTRY/$GITHUB_REPOSITORY:$VERSION-amd64 --arch amd64
|
||||||
|
docker manifest annotate $REGISTRY/$GITHUB_REPOSITORY:$VERSION $REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm64 --arch arm64
|
||||||
|
docker manifest annotate $REGISTRY/$GITHUB_REPOSITORY:$VERSION $REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm --arch arm
|
||||||
|
docker manifest push $REGISTRY/$GITHUB_REPOSITORY:$VERSION
|
||||||
|
|
||||||
|
docker manifest create $REGISTRY/$GITHUB_REPOSITORY:latest \
|
||||||
|
$REGISTRY/$GITHUB_REPOSITORY:$VERSION-amd64 \
|
||||||
|
$REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm64 \
|
||||||
|
$REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm
|
||||||
|
docker manifest annotate $REGISTRY/$GITHUB_REPOSITORY:latest $REGISTRY/$GITHUB_REPOSITORY:$VERSION-amd64 --arch amd64
|
||||||
|
docker manifest annotate $REGISTRY/$GITHUB_REPOSITORY:latest $REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm64 --arch arm64
|
||||||
|
docker manifest annotate $REGISTRY/$GITHUB_REPOSITORY:latest $REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm --arch arm
|
||||||
|
docker manifest push $REGISTRY/$GITHUB_REPOSITORY:latest
|
||||||
|
@ -19,7 +19,9 @@ echo "${version} -> ${next_version}"
|
|||||||
echo "bumping openapi"
|
echo "bumping openapi"
|
||||||
cd "${git_root}"
|
cd "${git_root}"
|
||||||
sed -i -e "s/${version}/${next_version}/g" openapi.yaml
|
sed -i -e "s/${version}/${next_version}/g" openapi.yaml
|
||||||
|
sed -i -e "s/${version}/${next_version}/g" client/static/openapi/openapi.yaml
|
||||||
git add openapi.yaml
|
git add openapi.yaml
|
||||||
|
git add client/static/openapi/openapi.yaml
|
||||||
|
|
||||||
echo "bumping client"
|
echo "bumping client"
|
||||||
cd "${git_root}/client"
|
cd "${git_root}/client"
|
||||||
|
30
Dockerfile
30
Dockerfile
@ -1,30 +0,0 @@
|
|||||||
# Nix builder
|
|
||||||
FROM nixos/nix:latest AS builder
|
|
||||||
|
|
||||||
# Copy our source and setup our working dir.
|
|
||||||
COPY . /tmp/build
|
|
||||||
WORKDIR /tmp/build
|
|
||||||
|
|
||||||
# Build our Nix environment
|
|
||||||
RUN nix \
|
|
||||||
--extra-experimental-features "nix-command flakes" \
|
|
||||||
--option filter-syscalls false \
|
|
||||||
--accept-flake-config \
|
|
||||||
build
|
|
||||||
|
|
||||||
# Copy the Nix store closure into a directory. The Nix store closure is the
|
|
||||||
# entire set of Nix store values that we need for our build.
|
|
||||||
RUN mkdir /tmp/nix-store-closure
|
|
||||||
RUN cp -R $(nix-store -qR result/) /tmp/nix-store-closure
|
|
||||||
|
|
||||||
# Final image is based on scratch. We copy a bunch of Nix dependencies
|
|
||||||
# but they're fully self-contained so we don't need Nix anymore.
|
|
||||||
FROM scratch
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
# Copy /nix/store
|
|
||||||
COPY --from=builder /tmp/nix-store-closure /nix/store
|
|
||||||
COPY --from=builder /tmp/build/result /app
|
|
||||||
|
|
||||||
CMD ["/app/bin/trevstack"]
|
|
@ -42,7 +42,7 @@ It's that simple. If you're feeling fancy, install [direnv](https://direnv.net/)
|
|||||||
|
|
||||||
- `nix flake check`: runs all validations
|
- `nix flake check`: runs all validations
|
||||||
|
|
||||||
- `buf lint` & `buf generate`: lints and generates code from protocol buffers
|
- `buf lint proto` & `buf generate`: lints and generates code from protocol buffers
|
||||||
|
|
||||||
- `sqlc vet` & `sqlc generate`: verifies and generates code from SQL files
|
- `sqlc vet` & `sqlc generate`: verifies and generates code from SQL files
|
||||||
|
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
version: v2
|
version: v2
|
||||||
clean: true
|
clean: true
|
||||||
|
inputs:
|
||||||
|
- directory: proto
|
||||||
|
|
||||||
managed:
|
managed:
|
||||||
enabled: true
|
enabled: true
|
||||||
override:
|
override:
|
||||||
|
4
client/package-lock.json
generated
4
client/package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "trevstack",
|
"name": "trevstack",
|
||||||
"version": "0.0.32",
|
"version": "0.0.43",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "trevstack",
|
"name": "trevstack",
|
||||||
"version": "0.0.32",
|
"version": "0.0.43",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@bufbuild/protovalidate": "^0.1.1",
|
"@bufbuild/protovalidate": "^0.1.1",
|
||||||
"@connectrpc/connect": "^2.0.2",
|
"@connectrpc/connect": "^2.0.2",
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "trevstack",
|
"name": "trevstack",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.32",
|
"version": "0.0.43",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite dev",
|
"dev": "vite dev",
|
||||||
|
@ -3,8 +3,8 @@ servers:
|
|||||||
- url: /grpc
|
- url: /grpc
|
||||||
info:
|
info:
|
||||||
title: Trevstack API
|
title: Trevstack API
|
||||||
version: 1.0.0
|
version: 0.0.33
|
||||||
description: API for trevstack
|
description: API for Trevstack
|
||||||
contact:
|
contact:
|
||||||
name: Trev
|
name: Trev
|
||||||
email: spam@trev.xyz
|
email: spam@trev.xyz
|
||||||
|
6
flake.lock
generated
6
flake.lock
generated
@ -2,11 +2,11 @@
|
|||||||
"nodes": {
|
"nodes": {
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1746904237,
|
"lastModified": 1747179050,
|
||||||
"narHash": "sha256-3e+AVBczosP5dCLQmMoMEogM57gmZ2qrVSrmq9aResQ=",
|
"narHash": "sha256-qhFMmDkeJX9KJwr5H32f1r7Prs7XbQWtO0h3V0a0rFY=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "d89fc19e405cb2d55ce7cc114356846a0ee5e956",
|
"rev": "adaa24fbf46737f3f1b5497bf64bae750f82942e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
39
flake.nix
39
flake.nix
@ -21,7 +21,7 @@
|
|||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
pname = "trevstack";
|
pname = "trevstack";
|
||||||
version = "0.0.32";
|
version = "0.0.43";
|
||||||
|
|
||||||
build-systems = [
|
build-systems = [
|
||||||
"x86_64-linux"
|
"x86_64-linux"
|
||||||
@ -83,7 +83,10 @@
|
|||||||
packages = with pkgs; [
|
packages = with pkgs; [
|
||||||
treli.packages."${system}".default
|
treli.packages."${system}".default
|
||||||
git
|
git
|
||||||
|
|
||||||
|
# Nix
|
||||||
nix-update
|
nix-update
|
||||||
|
alejandra
|
||||||
|
|
||||||
# Server
|
# Server
|
||||||
go
|
go
|
||||||
@ -127,7 +130,7 @@
|
|||||||
pname = "check-client";
|
pname = "check-client";
|
||||||
inherit version;
|
inherit version;
|
||||||
src = ./client;
|
src = ./client;
|
||||||
npmDepsHash = "sha256-iY1tZjYYUETULfyDdq9sjAStzSKe3NZYpZ6F8Y1E00k=";
|
npmDepsHash = "sha256-vgOTish91m4iVNCMuLfFRpTGdyyVr+/g4Ex3PRWqqGI=";
|
||||||
dontNpmInstall = true;
|
dontNpmInstall = true;
|
||||||
|
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
@ -190,7 +193,7 @@
|
|||||||
client = pkgs.buildNpmPackage {
|
client = pkgs.buildNpmPackage {
|
||||||
inherit pname version;
|
inherit pname version;
|
||||||
src = ./client;
|
src = ./client;
|
||||||
npmDepsHash = "sha256-iY1tZjYYUETULfyDdq9sjAStzSKe3NZYpZ6F8Y1E00k=";
|
npmDepsHash = "sha256-vgOTish91m4iVNCMuLfFRpTGdyyVr+/g4Ex3PRWqqGI=";
|
||||||
|
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
cp -r build "$out"
|
cp -r build "$out"
|
||||||
@ -208,11 +211,8 @@
|
|||||||
HOME=$PWD
|
HOME=$PWD
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
in
|
|
||||||
{
|
binaries = builtins.listToAttrs (builtins.map (x: {
|
||||||
default = server;
|
|
||||||
}
|
|
||||||
// builtins.listToAttrs (builtins.map (x: {
|
|
||||||
name = "${pname}-${x.GOOS}-${x.GOARCH}";
|
name = "${pname}-${x.GOOS}-${x.GOARCH}";
|
||||||
value = server.overrideAttrs {
|
value = server.overrideAttrs {
|
||||||
nativeBuildInputs =
|
nativeBuildInputs =
|
||||||
@ -235,7 +235,28 @@
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
host-systems)
|
host-systems);
|
||||||
|
|
||||||
|
images = builtins.listToAttrs (builtins.map (x: {
|
||||||
|
name = "${pname}-${x.GOOS}-${x.GOARCH}-image";
|
||||||
|
value = pkgs.dockerTools.streamLayeredImage {
|
||||||
|
name = "${pname}";
|
||||||
|
tag = "${version}-${x.GOARCH}";
|
||||||
|
created = "now";
|
||||||
|
architecture = "${x.GOARCH}";
|
||||||
|
contents = [binaries."${pname}-${x.GOOS}-${x.GOARCH}"];
|
||||||
|
config = {
|
||||||
|
Cmd = ["${binaries."${pname}-${x.GOOS}-${x.GOARCH}"}/bin/${pname}-${x.GOOS}-${x.GOARCH}-${version}"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
})
|
||||||
|
(builtins.filter (x: x.GOOS == "linux") host-systems));
|
||||||
|
in
|
||||||
|
{
|
||||||
|
default = server;
|
||||||
|
}
|
||||||
|
// binaries
|
||||||
|
// images
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@ servers:
|
|||||||
- url: /grpc
|
- url: /grpc
|
||||||
info:
|
info:
|
||||||
title: Trevstack API
|
title: Trevstack API
|
||||||
version: 0.0.32
|
version: 0.0.43
|
||||||
description: API for Trevstack
|
description: API for Trevstack
|
||||||
contact:
|
contact:
|
||||||
name: Trev
|
name: Trev
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# For details on buf.yaml configuration, visit https://buf.build/docs/configuration/v2/buf-yaml
|
# For details on buf.yaml configuration, visit https://buf.build/docs/configuration/v2/buf-yaml
|
||||||
version: v2
|
version: v2
|
||||||
modules:
|
modules:
|
||||||
- path: proto
|
- path: .
|
||||||
deps:
|
deps:
|
||||||
- buf.build/bufbuild/protovalidate
|
- buf.build/bufbuild/protovalidate
|
Reference in New Issue
Block a user