Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
2b569c4
feat(spec): scaffold TypeSpec sources for me namespace
dschmidt May 12, 2026
0b20e27
refactor(spec): apply emitter patterns to me namespace
dschmidt May 12, 2026
b4e56b9
feat(spec): add drives namespace with full driveItem schema
dschmidt May 12, 2026
c154ec8
feat(spec): cover me/drive convenience routes + v1beta1 driveItem ops
dschmidt May 12, 2026
dd7aa97
feat(spec): add sharing/permissions surface for drives + driveItems
dschmidt May 12, 2026
bcfb875
feat(spec): cover users, groups, invitations, activities
dschmidt May 12, 2026
fa4af6a
feat(spec): cover education, applications, roleManagement, tags
dschmidt May 12, 2026
036fad0
fix(spec): drop descriptions on remaining direct $ref properties
dschmidt May 12, 2026
5a6e4c7
feat(spec): mark unique-item query params + complete appRoleAssignment
dschmidt May 12, 2026
c278869
feat(spec): match CollectionOfX schema naming + ExportPersonalDataReq…
dschmidt May 12, 2026
364b644
fix(spec): inline ad-hoc body+enum to avoid extra schema components
dschmidt May 12, 2026
382f5fd
build: regenerate api/openapi-spec/v1.0.yaml from TypeSpec in CI + Ma…
dschmidt May 12, 2026
494b45e
refactor(spec): move per-domain schemas out of models.tsp + restore docs
dschmidt May 12, 2026
b8b1aef
feat(spec): add GET /v1.0/drives/{drive-id}/items/{item-id}/children
dschmidt May 12, 2026
bf7e814
docs(spec): refresh stale comments + write up the writeOnly trade-off
dschmidt May 12, 2026
bb6e642
refactor(spec): introduce LibreGraphOps templates + apply to education
dschmidt May 12, 2026
84b9d7a
refactor(spec): share driveItem operation shape via DriveItemOps inte…
dschmidt May 12, 2026
67c5c8c
refactor(spec): drop misleading Me-prefix on cross-domain response types
dschmidt May 12, 2026
b2b6209
refactor(spec): move drive-shared models from me.tsp to drives.tsp
dschmidt May 13, 2026
6f23c34
refactor(spec): share response shapes via generic Retrieved/Created/N…
dschmidt May 13, 2026
f379afa
refactor(spec): route /me/drive/root/children through DriveItemOps.li…
dschmidt May 13, 2026
65b2fa8
feat(spec): add GET /v1.0/drives/{drive-id}/root/children
dschmidt May 13, 2026
a84de5a
refactor(spec): share permission/link/invite operation shape via Perm…
dschmidt May 13, 2026
a1be850
refactor(spec): move drive-anchored sharing routes from permissions.t…
dschmidt May 13, 2026
114f06c
build: self-document Makefile targets via inline ## comments
dschmidt May 13, 2026
a73b07a
build: keep `make` (no args) defaulting to compiling the spec
dschmidt May 13, 2026
f6e392d
fix(build): rebuild spec when TypeSpec sources change
dschmidt May 13, 2026
d0ec901
fix(spec): silence openapi3 $-in-component-key warnings in education.tsp
dschmidt May 13, 2026
d415f21
refactor(spec): share OData collection shape via Collection model tem…
dschmidt May 13, 2026
7d86466
refactor(spec): split big domain files by kind (models/templates/routes)
dschmidt May 13, 2026
cb8bfd6
fix(spec): restore writeOnly on passwordProfile.password + describe P…
dschmidt May 13, 2026
3eb6558
fix(ci): quote interpolated CI_COMMIT_MESSAGE/AUTHOR/EMAIL settings
dschmidt May 13, 2026
5d969bd
refactor(spec): move domain-specific models out of common.models.tsp
dschmidt May 13, 2026
65a6897
fix(spec): restore readOnly markers that were dropped during the Type…
dschmidt May 13, 2026
73a4876
fix(spec): restore auth security schemes that were dropped during the…
dschmidt May 13, 2026
75fa28e
fix(spec): restore datetime pattern: regex constraints
dschmidt May 13, 2026
c65121b
fix(spec): restore examples, deprecated marker, and nullable field
dschmidt May 13, 2026
8bc3c4e
fix(spec): drop bearerFormat extension that openapi-generator-cli rej…
dschmidt May 13, 2026
cca242e
docs(spec): keep the bearerFormat extension as a commented-out reminder
dschmidt May 13, 2026
61ccf53
fix: address Copilot review comments on #45
dschmidt May 13, 2026
2265078
fix(build): always run npm ci, drop the lockfile-timestamp gate
dschmidt May 13, 2026
85208d8
fix: address second round of Copilot review comments on #45
dschmidt May 13, 2026
d55b7e8
fix(spec): split auth scheme declarations into auth.tsp at global nam…
dschmidt May 13, 2026
099e4ac
fix(spec): re-enable GetActivities @opExample using utcDateTime.fromISO
dschmidt May 16, 2026
02cb5fd
build(spec): bump TypeSpec to 1.13.0-dev and drop #10677 workaround
dschmidt May 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
composer.lock
vendor
tmp
tmp

# Generated by `make spec` (`scripts/compile-spec.sh`).
api/openapi-spec/v1.0.yaml

# Local build artefacts.
build/
spec/build/
spec/node_modules/
22 changes: 10 additions & 12 deletions .woodpecker/build-cpp-qt.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
variables:
- &alpine_image 'owncloudci/alpine:latest'
- &node_image 'node:22-alpine'
- &generator_image 'openapitools/openapi-generator-cli:v7.13.0@sha256:52b4b2bb6129b086b0f12614e98c884d378a84349fa114b07e20515702a793c5'
- &environment
HTTP_PROXY:
Expand All @@ -21,20 +22,17 @@ steps:
ref: HEAD
path: libre-graph-api-cpp-qt-client
remote: https://github.com/opencloud-eu/libre-graph-api-cpp-qt-client.git
compile-spec:
image: *node_image
environment: *environment
commands:
- sh scripts/compile-spec.sh
generate-cpp-qt:
image: *generator_image
environment: *environment
commands:
- rm -Rf libre-graph-api-cpp-qt-client/*
- '/usr/local/bin/docker-entrypoint.sh generate
--enable-post-process-file
-i api/openapi-spec/v1.0.yaml
--additional-properties=packageName=libregraph
--git-user-id=opencloud-eu
--git-repo-id=libre-graph-api-cpp-qt-client
-g cpp-qt-client
-t templates/cpp-qt-client
-o libre-graph-api-cpp-qt-client'
- sh scripts/generate-cpp-qt-client.sh
- cp LICENSE libre-graph-api-cpp-qt-client/LICENSE
diff:
image: *alpine_image
Expand Down Expand Up @@ -62,9 +60,9 @@ steps:
- commit
- push
followtags: true
message: ${CI_COMMIT_MESSAGE}
author_name: ${CI_COMMIT_AUTHOR}
author_email: ${CI_COMMIT_AUTHOR_EMAIL}
message: "${CI_COMMIT_MESSAGE}"
author_name: "${CI_COMMIT_AUTHOR}"
author_email: "${CI_COMMIT_AUTHOR_EMAIL}"
netrc_password:
from_secret: github_token
netrc_username:
Expand Down
22 changes: 10 additions & 12 deletions .woodpecker/build-go.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
variables:
- &alpine_image 'owncloudci/alpine:latest'
- &node_image 'node:22-alpine'
- &generator_image 'openapitools/openapi-generator-cli:v7.13.0@sha256:52b4b2bb6129b086b0f12614e98c884d378a84349fa114b07e20515702a793c5'
- &environment
HTTP_PROXY:
Expand All @@ -21,20 +22,17 @@ steps:
ref: HEAD
path: libre-graph-api-go
remote: https://github.com/opencloud-eu/libre-graph-api-go.git
compile-spec:
image: *node_image
environment: *environment
commands:
- sh scripts/compile-spec.sh
generate-go:
image: *generator_image
environment: *environment
commands:
- rm -Rf libre-graph-api-go/*
- '/usr/local/bin/docker-entrypoint.sh generate
--enable-post-process-file
-i api/openapi-spec/v1.0.yaml
--additional-properties=packageName=libregraph
--git-user-id=opencloud-eu
--git-repo-id=libre-graph-api-go
-g go
-o libre-graph-api-go
--api-name-suffix Api'
- sh scripts/generate-go.sh
- cp LICENSE libre-graph-api-go/LICENSE
diff:
image: *alpine_image
Expand Down Expand Up @@ -62,9 +60,9 @@ steps:
- commit
- push
followtags: true
message: ${CI_COMMIT_MESSAGE}
author_name: ${CI_COMMIT_AUTHOR}
author_email: ${CI_COMMIT_AUTHOR_EMAIL}
message: "${CI_COMMIT_MESSAGE}"
author_name: "${CI_COMMIT_AUTHOR}"
author_email: "${CI_COMMIT_AUTHOR_EMAIL}"
netrc_password:
from_secret: github_token
netrc_username:
Expand Down
22 changes: 10 additions & 12 deletions .woodpecker/build-php.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
variables:
- &alpine_image 'owncloudci/alpine:latest'
- &node_image 'node:22-alpine'
- &generator_image 'openapitools/openapi-generator-cli:v7.13.0@sha256:52b4b2bb6129b086b0f12614e98c884d378a84349fa114b07e20515702a793c5'
- &environment
HTTP_PROXY:
Expand All @@ -21,20 +22,17 @@ steps:
ref: HEAD
path: libre-graph-api-php
remote: https://github.com/opencloud-eu/libre-graph-api-php.git
compile-spec:
image: *node_image
environment: *environment
commands:
- sh scripts/compile-spec.sh
generate-php:
image: *generator_image
environment: *environment
commands:
- rm -Rf libre-graph-api-php/*
- '/usr/local/bin/docker-entrypoint.sh generate
--enable-post-process-file
-i api/openapi-spec/v1.0.yaml
--additional-properties=packageName=libregraph
--git-user-id=opencloud-eu
--git-repo-id=libre-graph-api-php
-g php-nextgen
-t templates/php-nextgen
-o libre-graph-api-php'
- sh scripts/generate-php.sh
- cp LICENSE libre-graph-api-php/LICENSE
diff:
image: *alpine_image
Expand Down Expand Up @@ -62,9 +60,9 @@ steps:
- commit
- push
followtags: true
message: ${CI_COMMIT_MESSAGE}
author_name: ${CI_COMMIT_AUTHOR}
author_email: ${CI_COMMIT_AUTHOR_EMAIL}
message: "${CI_COMMIT_MESSAGE}"
author_name: "${CI_COMMIT_AUTHOR}"
author_email: "${CI_COMMIT_AUTHOR_EMAIL}"
netrc_password:
from_secret: github_token
netrc_username:
Expand Down
22 changes: 10 additions & 12 deletions .woodpecker/build-typescript-axios.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
variables:
- &alpine_image 'owncloudci/alpine:latest'
- &node_image 'node:22-alpine'
- &generator_image 'openapitools/openapi-generator-cli:v7.13.0@sha256:52b4b2bb6129b086b0f12614e98c884d378a84349fa114b07e20515702a793c5'
- &environment
HTTP_PROXY:
Expand All @@ -21,20 +22,17 @@ steps:
ref: HEAD
path: libre-graph-api-typescript-axios
remote: https://github.com/opencloud-eu/libre-graph-api-typescript-axios.git
compile-spec:
image: *node_image
environment: *environment
commands:
- sh scripts/compile-spec.sh
generate-typescript-axios:
image: *generator_image
environment: *environment
commands:
- rm -Rf libre-graph-api-typescript-axios/*
- '/usr/local/bin/docker-entrypoint.sh generate
--enable-post-process-file
-i api/openapi-spec/v1.0.yaml
--additional-properties=packageName=libregraph
--git-user-id=opencloud-eu
--git-repo-id=libre-graph-api-typescript-axios
-g typescript-axios
-o libre-graph-api-typescript-axios
--api-name-suffix Api'
- sh scripts/generate-typescript-axios.sh
- cp LICENSE libre-graph-api-typescript-axios/LICENSE
diff:
image: *alpine_image
Expand Down Expand Up @@ -62,9 +60,9 @@ steps:
- commit
- push
followtags: true
message: ${CI_COMMIT_MESSAGE}
author_name: ${CI_COMMIT_AUTHOR}
author_email: ${CI_COMMIT_AUTHOR_EMAIL}
message: "${CI_COMMIT_MESSAGE}"
author_name: "${CI_COMMIT_AUTHOR}"
author_email: "${CI_COMMIT_AUTHOR_EMAIL}"
netrc_password:
from_secret: github_token
netrc_username:
Expand Down
11 changes: 9 additions & 2 deletions .woodpecker/docs.yaml
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
---
variables:
- &node_image 'node:22-alpine'

when:
- event: push
branch: ${CI_REPO_DEFAULT_BRANCH}
- event: [ manual, tag]

steps:
- name: compile-spec
image: *node_image
commands:
- sh scripts/compile-spec.sh
Comment thread
dschmidt marked this conversation as resolved.
- name: deploy-staging
image: debian:latest
environment:
Expand All @@ -22,7 +29,7 @@ steps:
- ssh-keyscan -t rsa $REMOTE_HOST >> $HOME/.ssh/known_hosts
- echo "$SSH_KEY" > "$HOME/.ssh/id_rsa"
- chmod 0600 $HOME/.ssh/id_rsa
- rsync -a --exclude '.git' --delete . $REMOTE_HOST:/var/swagger/libre-graph-api
- rsync -a --exclude '.git' --exclude 'spec/node_modules' --exclude 'spec/build' --exclude 'build' --delete . $REMOTE_HOST:/var/swagger/libre-graph-api
- name: deploy-production
image: debian:latest
environment:
Expand All @@ -39,4 +46,4 @@ steps:
- ssh-keyscan -t rsa $REMOTE_HOST >> $HOME/.ssh/known_hosts
- echo "$SSH_KEY" > "$HOME/.ssh/id_rsa"
- chmod 0600 $HOME/.ssh/id_rsa
- rsync -a --exclude '.git' --delete . woodpeckersyncer@$REMOTE_HOST:/var/swagger/libre-graph-api
- rsync -a --exclude '.git' --exclude 'spec/node_modules' --exclude 'spec/build' --exclude 'build' --delete . woodpeckersyncer@$REMOTE_HOST:/var/swagger/libre-graph-api
51 changes: 51 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# libre-graph-api local build entry points.
#
# `make` (or `make spec`) compiles the TypeSpec sources under spec/ into
# api/openapi-spec/v1.0.yaml. Per-language client generation targets pull the
# matching openapi-generator-cli image straight out of the woodpecker pipeline
# file for that language, so renovatebot remains the single source of truth
# for the generator version.

SPEC := api/openapi-spec/v1.0.yaml
SPEC_SOURCES := $(wildcard spec/*.tsp) spec/tspconfig.yaml spec/package.json spec/package-lock.json
NODE_IMAGE := node:22-alpine

# Extract `openapitools/openapi-generator-cli:<tag>@sha256:<digest>` from the
# .woodpecker pipeline file for the given language.
# $(call generator_image,go)
# $(call generator_image,typescript-axios)
generator_image = $(shell grep -oE "openapitools/openapi-generator-cli:[A-Za-z0-9._@:-]+" .woodpecker/build-$(1).yaml | head -n1)

DOCKER_RUN = docker run --rm \
--user $(shell id -u):$(shell id -g) \
-v "$(CURDIR):/work" \
-w /work

.PHONY: all spec go typescript-axios php cpp-qt-client clean help

all: spec

help: ## Show this help
@echo "Common commands:"
@echo ""
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'

spec: $(SPEC) ## Compile TypeSpec sources into api/openapi-spec/v1.0.yaml

$(SPEC): $(SPEC_SOURCES)
$(DOCKER_RUN) -e HOME=/tmp -e npm_config_cache=/tmp/.npm $(NODE_IMAGE) sh scripts/compile-spec.sh

Comment thread
dschmidt marked this conversation as resolved.
go: $(SPEC) ## Generate the Go client into build/clients/go
$(DOCKER_RUN) -e OUTPUT_DIR=build/clients/go $(call generator_image,go) sh scripts/generate-go.sh

typescript-axios: $(SPEC) ## Generate the TypeScript-Axios client into build/clients/typescript-axios
$(DOCKER_RUN) -e OUTPUT_DIR=build/clients/typescript-axios $(call generator_image,typescript-axios) sh scripts/generate-typescript-axios.sh

php: $(SPEC) ## Generate the PHP client into build/clients/php
$(DOCKER_RUN) -e OUTPUT_DIR=build/clients/php $(call generator_image,php) sh scripts/generate-php.sh

cpp-qt-client: $(SPEC) ## Generate the C++/Qt client into build/clients/cpp-qt-client
$(DOCKER_RUN) -e OUTPUT_DIR=build/clients/cpp-qt-client $(call generator_image,cpp-qt) sh scripts/generate-cpp-qt-client.sh

clean: ## Remove build artefacts and the generated spec
rm -rf build/ spec/build/ $(SPEC)
Loading