Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
f90420f
chore(deps): bump the gems group with 2 updates
dependabot[bot] Aug 18, 2026
845f043
Merge pull request #958 from voc/dependabot/bundler/gems-2bd947a7eb
github-actions[bot] Aug 18, 2026
e1a3da0
chore(deps): bump haml from 7.3.1 to 7.4.1 in the gems group
dependabot[bot] Aug 25, 2026
5074de7
Merge pull request #959 from voc/dependabot/bundler/gems-242bb3aa10
github-actions[bot] Aug 25, 2026
395512e
chore(deps): bump the gems group with 2 updates
dependabot[bot] Sep 1, 2026
1359cd1
Merge pull request #960 from voc/dependabot/bundler/gems-d7f26d614b
github-actions[bot] Sep 1, 2026
a8216ee
Use URL type for all URLs, and only URLs
justjanne Jul 26, 2026
5bc2f71
Make structured types non-nullable if their fields are nullable
justjanne Jul 26, 2026
c30af6d
Expose primary video via GraphQL API
justjanne Jul 26, 2026
76d4556
feat(graphql): add Slug scalar, use on slug fields
saerdnaer Jun 28, 2026
de25788
feat(graphql): rename fields and add descriptions on Lecture and Reso…
saerdnaer Aug 16, 2026
bb9f103
feat(graphql): use SlugType for conference acronym field
saerdnaer Aug 16, 2026
417f02e
feat(graphql): add format preference args to Lecture.video field
saerdnaer Aug 17, 2026
e04c93c
feat(graphql): add translations field to Lecture type
saerdnaer Aug 17, 2026
4e99c54
feat(graphql): expose promoted lectures query
saerdnaer Aug 16, 2026
6dad55d
feat(graphql): add nodes-only BaseConnection, drop edges from tests
saerdnaer Aug 17, 2026
47cd946
feat(graphql): expose raw metadata and streaming fields on Conference
saerdnaer Aug 16, 2026
77fb97c
feat(graphql): add images and logo fields to Conference type
saerdnaer Aug 16, 2026
1accdb0
chore: cleanup
saerdnaer Aug 17, 2026
52e1397
feat(graphql): introduce generic `items`, deprecate lecture-named fields
saerdnaer Aug 17, 2026
4b029e3
chore(graphql): update dumped schema
saerdnaer Aug 17, 2026
25ed35e
Merge pull request #951 from justjanne/graphql-improvements
saerdnaer Sep 1, 2026
8e963d9
fix(public-api): guard against nil metadata in confernces images builder
saerdnaer Sep 1, 2026
25c7dcf
fix(public-api): guard against nil metadata in Event#related_events a…
saerdnaer Sep 1, 2026
ad3a3db
chore(deps): bump psych 5.4.0 → 5.5.0
saerdnaer Sep 2, 2026
9bf01c6
fix(deploy): switch CAP_REPO to SSH URL
saerdnaer Sep 2, 2026
8713926
chore(deps): bump actions/cache from 5 to 6 (#939)
dependabot[bot] Sep 2, 2026
0c75adb
feat: show git revision in footer
saerdnaer Jun 20, 2026
a049232
ci: deploy to staging when PR has "deploy" label
saerdnaer Sep 6, 2026
1cef91a
admin: show schedule_url in conference index
saerdnaer Jun 21, 2026
ee8cea9
chore(deps): bump actions/github-script from 8 to 9
dependabot[bot] Sep 8, 2026
8202f66
Merge pull request #962 from voc/dependabot/github_actions/actions/gi…
github-actions[bot] Sep 8, 2026
4dd2757
wip
manno Jun 21, 2026
1087ba7
chore: upgrade Rails from 7.2 to 8.1
saerdnaer Sep 6, 2026
8226e39
build: migrate asset pipeline from Sprockets to Propshaft + esbuild/s…
saerdnaer Sep 6, 2026
adffd55
fix: repair JS globals broken by the Sprockets->esbuild bundling switch
saerdnaer Sep 6, 2026
9a1bf1c
chore: regenerate schema.rb for Rails 8.1
saerdnaer Sep 6, 2026
887f6d0
ci: set up Node and pnpm for asset build
saerdnaer Sep 6, 2026
0658c5c
fix(test): recordings task test failing when filesizes dir absent
saerdnaer Sep 7, 2026
c4e977f
Restore player plugin icons under Propshaft
manno Sep 10, 2026
a7c771d
Drop the bootstrap-sprockets import
manno Sep 10, 2026
8aa54d1
Replace deprecated sass global builtins
manno Sep 10, 2026
376bb71
Minify assets and quiet vendor sass warnings
manno Sep 10, 2026
0dcb34e
Build assets in the Docker dev environment
manno Sep 10, 2026
7b2d27c
Share node_modules across deploys
manno Sep 10, 2026
5cab0c1
Remove leftover Estrangelo Edessa font
manno Sep 20, 2026
fc21b25
chore(deps): bump jquery in the npm_and_yarn group across 1 directory
dependabot[bot] Sep 22, 2026
0c9fcda
Merge pull request #964 from voc/dependabot/npm_and_yarn/npm_and_yarn…
github-actions[bot] Sep 22, 2026
506b16a
docs: add AGENTS.md with LLM usage disclosure policy
saerdnaer Sep 7, 2026
a668ae0
chore(deps): bump the gems group across 1 directory with 2 updates
dependabot[bot] Sep 22, 2026
03c1545
Merge pull request #963 from voc/dependabot/bundler/gems-264cfcfab4
github-actions[bot] Sep 23, 2026
d986c6e
chore(deps): bump actions/setup-node from 6 to 7
dependabot[bot] Sep 29, 2026
206f397
Merge pull request #966 from voc/dependabot/github_actions/actions/se…
github-actions[bot] Sep 29, 2026
1419beb
chore(deps): bump the gems group with 3 updates
dependabot[bot] Oct 6, 2026
59a704b
Merge pull request #967 from voc/dependabot/bundler/gems-631ca919fb
github-actions[bot] Oct 6, 2026
cc52cbd
chore(sync): merge voc/main with conflicts (resolve before merge)
github-actions[bot] Oct 12, 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
19 changes: 18 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ on:
- master
- staging
pull_request:
types: [opened, synchronize, reopened, labeled]

jobs:
test:
Expand Down Expand Up @@ -44,13 +45,21 @@ jobs:
- name: Set up Ruby
uses: ruby/setup-ruby@v1

- name: Set up Node
uses: actions/setup-node@v7
with:
node-version: 22

- name: Enable pnpm
run: corepack enable

- name: Setup config
run: |
cp config/settings.yml.template config/settings.yml
cp config/database.yml.template config/database.yml

- name: Cache dependencies
uses: actions/cache@v5
uses: actions/cache@v6
with:
path: vendor/bundle
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
Expand Down Expand Up @@ -86,3 +95,11 @@ jobs:

- name: Show images
run: docker images

deploy-staging:
needs: test
if: github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'deploy')
uses: ./.github/workflows/deploy.yml
with:
ref: ${{ github.event.pull_request.head.ref }}
secrets: inherit
92 changes: 92 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,102 @@ name: Deploy staging (disabled)

on:
workflow_dispatch:
inputs:
ref:
description: Branch to deploy
required: false
type: string
workflow_call:
inputs:
ref:
description: Branch to deploy
required: true
type: string

jobs:
deploy:
if: false
runs-on: ubuntu-latest
steps:
<<<<<<< HEAD
- run: echo "VOC staging deploy is disabled on freifunk/voctoweb"
=======
- uses: actions/checkout@v7
with:
ref: ${{ inputs.ref || github.ref_name }}
- uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- uses: webfactory/ssh-agent@v0.10.0
with:
# Name of the variable configured in Secrets of our GitHub organisation
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
- name: Add server to known_hosts
run: ssh-keyscan -p 22 -H app.media.test.c3voc.de >> ~/.ssh/known_hosts
- name: Deploy
env:
CAP_REPO: https://github.com/voc/voctoweb.git
CAP_USER: media
CAP_BRANCH: ${{ inputs.ref || github.ref_name }}
CAP_HOST: app.media.test.c3voc.de
CAP_PORT: 22
SKIP_TAG: "true"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: bundle exec cap staging deploy

clear-deploy-labels:
needs: deploy
if: github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'deploy')
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: Remove deploy label from other PRs
uses: actions/github-script@v9
with:
script: |
const { owner, repo } = context.repo;
const currentPr = context.payload.pull_request.number;
const prs = await github.paginate(github.rest.pulls.list, {
owner, repo, state: "open", per_page: 100,
});
for (const pr of prs) {
if (pr.number === currentPr) continue;
if (pr.labels.some((l) => l.name === "deploy")) {
await github.rest.issues.removeLabel({
owner, repo, issue_number: pr.number, name: "deploy",
});
}
}

sync-deploy-label:
needs: deploy
if: github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: Move deploy label to PR for the deployed branch
uses: actions/github-script@v9
with:
script: |
const { owner, repo } = context.repo;
const ref = ${{ toJSON(inputs.ref || github.ref_name) }};
const prs = await github.paginate(github.rest.pulls.list, {
owner, repo, state: "open", per_page: 100,
});
for (const pr of prs) {
const hasLabel = pr.labels.some((l) => l.name === "deploy");
if (pr.head.ref === ref) {
if (!hasLabel) {
await github.rest.issues.addLabels({
owner, repo, issue_number: pr.number, labels: ["deploy"],
});
}
} else if (hasLabel) {
await github.rest.issues.removeLabel({
owner, repo, issue_number: pr.number, name: "deploy",
});
}
}
>>>>>>> voc/main
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ docker/ssh

# Ignore assets
public/assets
/node_modules
/app/assets/builds/*
!/app/assets/builds/.keep

# Ignore secret tokens and configs
config/database.yml
Expand Down
2 changes: 1 addition & 1 deletion .rubocop_todo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,7 @@ Naming/MethodParameterName:
# ForbiddenPrefixes: is_, has_, have_
# AllowedMethods: is_a?
# MethodDefinitionMacros: define_method, define_singleton_method
Naming/PredicateName:
Naming/PredicatePrefix:
Exclude:
- 'spec/**/*'
- 'app/models/concerns/storage.rb'
Expand Down
25 changes: 25 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Agents.md

Guidance for using LLM-based coding assistants on this repository.

## LLM Usage Policy

Using an LLM to help write code is fine. Reviewers just might want to know when it happened, so they can weigh the review accordingly — code that reads unusually verbose, follows an unfamiliar pattern, or touches a lot of files at once often has an LLM behind it, and reviewers benefit from knowing that up front.

**Rule:** if an LLM generated a substantial part of a commit (not just autocomplete or minor suggestions), add a trailer to the commit message:

```
Assisted-by: LLM
```

- Use the generic `LLM` value — don't name the specific product/vendor. The point is disclosure to reviewers, not advertising a tool.
- Trivial LLM use (autocomplete, one-line suggestions, boilerplate you'd have typed anyway) doesn't need a trailer.
- You're still fully responsible for the code you commit. Review, understand, and test it before committing, regardless of how it was produced.

## Example

```
fix: handle nil schedule in conference import

Assisted-by: LLM
```
13 changes: 10 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,20 @@ ARG RUBY_VERSION=3.4
FROM ruby:${RUBY_VERSION}-alpine

# Install runtime dependencies
# Node.js is used for JavaScript compression via the uglifier gem
# Node.js and pnpm are used to bundle JavaScript (esbuild) and CSS (sass)
# via jsbundling-rails / cssbundling-rails.
# Keep PNPM_VERSION in sync with "packageManager" in package.json.
ARG PNPM_VERSION=12.3.4
RUN set -eux; \
apk add --no-cache \
dumb-init \
nodejs \
npm \
tzdata \
;
; \
npm install -g "pnpm@${PNPM_VERSION}"; \
npm cache clean --force; \
pnpm --version

WORKDIR /voctoweb

Expand All @@ -30,7 +37,7 @@ RUN set -eux; \
gcc \
libffi-dev \
libxml2-dev \
libxslt-dev \
libxslt-dev \
make \
musl-dev \
patch \
Expand Down
28 changes: 9 additions & 19 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@ source 'https://rubygems.org'

gem 'openssl'

# json 3.0 changed JSON.parse's options arg to keyword-only, which breaks
# ActiveSupport::JSON.decode's positional call in this Rails version.
gem 'json', '< 3'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 7.2.2'
gem 'rails', '~> 8.0'
gem 'dotenv-rails'

gem 'activeadmin'
Expand Down Expand Up @@ -54,24 +58,10 @@ gem 'pg', group: :postgresql
gem 'elasticsearch-model', '~> 8.0'
gem 'elasticsearch-rails', '~> 8.0'

# Use SCSS for stylesheets
gem 'sass-rails'
gem 'bootstrap-sass', '~> 3.4.1'

# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'

# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails'

# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby

# Use jquery as the JavaScript library
gem 'jquery-rails'

# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Asset pipeline: Propshaft (static) + jsbundling-rails/esbuild + cssbundling-rails/sass, managed via pnpm
gem 'propshaft'
gem 'jsbundling-rails'
gem 'cssbundling-rails'

# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder'
Expand Down
Loading