Skip to content

Commit 892566d

Browse files
authored
Merge pull request #5750 from learningequality/unstable
unstable to hotfixes, Q1 major release
2 parents c71852c + 4a63cf3 commit 892566d

493 files changed

Lines changed: 47244 additions & 20461 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/dependabot.yml

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,29 @@ version: 2
44
updates:
55

66
# Maintain dependencies for Python
7-
- package-ecosystem: "pip"
7+
- package-ecosystem: "uv"
88
directory: "/"
99
schedule:
10-
interval: "weekly"
11-
day: "wednesday"
10+
interval: "monthly"
1211
time: "00:00"
12+
cooldown:
13+
default-days: 7
1314

1415
# Maintain dependencies for Javascript
1516
- package-ecosystem: "npm"
1617
directory: "/"
1718
schedule:
18-
interval: "weekly"
19-
day: "wednesday"
19+
interval: "monthly"
2020
time: "00:00"
21+
cooldown:
22+
default-days: 7
23+
exclude:
24+
- kolibri-build
25+
- kolibri-constants
26+
- kolibri-design-system
27+
- kolibri-format
28+
- kolibri-i18n
29+
- kolibri-logging
2130
groups:
2231
babel:
2332
patterns:
@@ -33,9 +42,10 @@ updates:
3342
- package-ecosystem: "github-actions"
3443
directory: "/"
3544
schedule:
36-
interval: "weekly"
37-
day: "wednesday"
45+
interval: "monthly"
3846
time: "00:00"
47+
cooldown:
48+
default-days: 7
3949
groups:
4050
github:
4151
patterns:
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
name: Send reply on a new contributor pull request
2+
on:
3+
pull_request_target:
4+
types: [opened]
5+
jobs:
6+
call-workflow:
7+
name: Call shared workflow
8+
uses: learningequality/.github/.github/workflows/contributor-pr-reply.yml@main
9+
secrets:
10+
LE_BOT_APP_ID: ${{ secrets.LE_BOT_APP_ID }}
11+
LE_BOT_PRIVATE_KEY: ${{ secrets.LE_BOT_PRIVATE_KEY }}
12+
SLACK_COMMUNITY_NOTIFICATIONS_WEBHOOK_URL: ${{ secrets.SLACK_COMMUNITY_NOTIFICATIONS_WEBHOOK_URL }}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
name: Handle pull request events
2+
on:
3+
pull_request_target:
4+
types: [opened, review_requested, labeled]
5+
jobs:
6+
call-workflow:
7+
name: Call shared workflow
8+
uses: learningequality/.github/.github/workflows/pull-request-target.yml@main
9+
secrets:
10+
LE_BOT_APP_ID: ${{ secrets.LE_BOT_APP_ID }}
11+
LE_BOT_PRIVATE_KEY: ${{ secrets.LE_BOT_PRIVATE_KEY }}
Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
name: Update community pull requests spreadsheet
22
on:
33
pull_request_target:
4-
types: [assigned,unassigned,opened,closed,reopened]
4+
types: [assigned, unassigned, opened, closed, reopened, edited, review_requested, review_request_removed]
55

66
jobs:
7-
call-update-spreadsheet:
7+
call-workflow:
8+
name: Call shared workflow
89
uses: learningequality/.github/.github/workflows/update-pr-spreadsheet.yml@main
910
secrets:
11+
LE_BOT_APP_ID: ${{ secrets.LE_BOT_APP_ID }}
12+
LE_BOT_PRIVATE_KEY: ${{ secrets.LE_BOT_PRIVATE_KEY }}
1013
CONTRIBUTIONS_SPREADSHEET_ID: ${{ secrets.CONTRIBUTIONS_SPREADSHEET_ID }}
1114
CONTRIBUTIONS_SHEET_NAME: ${{ secrets.CONTRIBUTIONS_SHEET_NAME }}
1215
GH_UPLOADER_GCP_SA_CREDENTIALS: ${{ secrets.GH_UPLOADER_GCP_SA_CREDENTIALS }}

.github/workflows/containerbuild.yml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,32 +32,32 @@ jobs:
3232
runs-on: ubuntu-latest
3333
steps:
3434
- name: Checkout codebase
35-
uses: actions/checkout@v4
35+
uses: actions/checkout@v6
3636

3737
- name: Set up QEMU
38-
uses: docker/setup-qemu-action@v3
38+
uses: docker/setup-qemu-action@v4
3939

4040
- name: Set up Docker Buildx
41-
uses: docker/setup-buildx-action@v3
41+
uses: docker/setup-buildx-action@v4
4242

4343
- name: Log in to Docker Hub
4444
if: github.event_name != 'pull_request'
45-
uses: docker/login-action@v3
45+
uses: docker/login-action@v4
4646
with:
4747
registry: ghcr.io
4848
username: ${{ github.actor }}
4949
password: ${{ secrets.GITHUB_TOKEN }}
5050

5151
- name: Extract metadata (tags, labels) for Docker
5252
id: meta
53-
uses: docker/metadata-action@v5
53+
uses: docker/metadata-action@v6
5454
with:
5555
images: ghcr.io/learningequality/postgres
5656
env:
5757
DOCKER_METADATA_ANNOTATIONS_LEVELS: manifest,index
5858

5959
- name: Build and push Docker image
60-
uses: docker/build-push-action@v6
60+
uses: docker/build-push-action@v7
6161
with:
6262
context: ./docker
6363
file: ./docker/Dockerfile.postgres.dev
@@ -88,16 +88,16 @@ jobs:
8888
runs-on: ubuntu-latest
8989
steps:
9090
- name: Checkout codebase
91-
uses: actions/checkout@v4
91+
uses: actions/checkout@v6
9292

9393
- name: Set up QEMU
94-
uses: docker/setup-qemu-action@v3
94+
uses: docker/setup-qemu-action@v4
9595

9696
- name: Set up Docker Buildx
97-
uses: docker/setup-buildx-action@v3
97+
uses: docker/setup-buildx-action@v4
9898

9999
- name: Build Docker image
100-
uses: docker/build-push-action@v6
100+
uses: docker/build-push-action@v7
101101
with:
102102
context: ./
103103
file: ./docker/Dockerfile.nginx.prod

.github/workflows/deploytest.yml

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ jobs:
2727
if: ${{ needs.pre_job.outputs.should_skip != 'true' }}
2828
runs-on: ubuntu-latest
2929
steps:
30-
- uses: actions/checkout@v4
30+
- uses: actions/checkout@v6
3131
- name: Use pnpm
32-
uses: pnpm/action-setup@v4
32+
uses: pnpm/action-setup@v6.0.3
3333
- name: Use Node.js
34-
uses: actions/setup-node@v4
34+
uses: actions/setup-node@v6
3535
with:
3636
node-version: '20.x'
3737
cache: 'pnpm'
@@ -47,29 +47,21 @@ jobs:
4747
if: ${{ needs.pre_job.outputs.should_skip != 'true' }}
4848
runs-on: ubuntu-latest
4949
steps:
50-
- uses: actions/checkout@v4
51-
- name: Set up Python 3.10
52-
uses: actions/setup-python@v5
50+
- uses: actions/checkout@v6
51+
- name: Install uv
52+
uses: astral-sh/setup-uv@v7
5353
with:
5454
python-version: '3.10'
55-
- name: pip cache
56-
uses: actions/cache@v4
57-
with:
58-
path: ~/.cache/pip
59-
key: ${{ runner.os }}-pyprod-${{ hashFiles('requirements.txt') }}
60-
restore-keys: |
61-
${{ runner.os }}-pyprod-
62-
- name: Install pip-tools and python dependencies
55+
activate-environment: "true"
56+
enable-cache: "true"
57+
- name: Install python dependencies with uv
6358
run: |
64-
# Pin pip to 25.2 to avoid incompatibility with pip-tools and 25.3
65-
# see https://github.com/jazzband/pip-tools/issues/2252
66-
python -m pip install pip==25.2
67-
pip install pip-tools
68-
pip-sync requirements.txt
59+
# Use uv to install dependencies directly from requirements files
60+
uv pip sync requirements.txt
6961
- name: Use pnpm
70-
uses: pnpm/action-setup@v4
62+
uses: pnpm/action-setup@v6.0.3
7163
- name: Use Node.js
72-
uses: actions/setup-node@v4
64+
uses: actions/setup-node@v6
7365
with:
7466
node-version: '20.x'
7567
cache: 'pnpm'

.github/workflows/frontendtest.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ jobs:
2727
if: ${{ needs.pre_job.outputs.should_skip != 'true' }}
2828
runs-on: ubuntu-latest
2929
steps:
30-
- uses: actions/checkout@v4
30+
- uses: actions/checkout@v6
3131
- name: Use pnpm
32-
uses: pnpm/action-setup@v4
32+
uses: pnpm/action-setup@v6.0.3
3333
- name: Use Node.js
34-
uses: actions/setup-node@v4
34+
uses: actions/setup-node@v6
3535
with:
3636
node-version: '20.x'
3737
cache: 'pnpm'
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
name: Download translations from Crowdin
2+
3+
on:
4+
workflow_dispatch:
5+
6+
jobs:
7+
download:
8+
name: Download translations and update files
9+
runs-on: ubuntu-latest
10+
steps:
11+
- name: Checkout repository
12+
uses: actions/checkout@v6
13+
14+
- name: Install uv
15+
uses: astral-sh/setup-uv@v7
16+
with:
17+
python-version: '3.10'
18+
activate-environment: "true"
19+
enable-cache: "true"
20+
21+
- name: Install Python dependencies
22+
run: uv pip sync requirements.txt
23+
24+
- name: Use pnpm
25+
uses: pnpm/action-setup@v6.0.3
26+
27+
- name: Use Node.js
28+
uses: actions/setup-node@v6
29+
with:
30+
node-version: '20.x'
31+
cache: 'pnpm'
32+
33+
- name: Setup Java for crowdin-cli
34+
uses: actions/setup-java@v5
35+
with:
36+
distribution: 'temurin'
37+
java-version: '17'
38+
39+
- name: Install gettext
40+
run: sudo apt-get update && sudo apt-get install -y gettext
41+
42+
- name: Install JavaScript dependencies
43+
run: pnpm install --frozen-lockfile
44+
45+
- name: Download translations
46+
env:
47+
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_API_KEY }}
48+
run: make i18n-download
49+
50+
- name: Generate App Token
51+
id: generate-token
52+
uses: actions/create-github-app-token@v3
53+
with:
54+
app-id: ${{ secrets.LE_BOT_APP_ID }}
55+
private-key: ${{ secrets.LE_BOT_PRIVATE_KEY }}
56+
57+
- name: Create Pull Request
58+
uses: peter-evans/create-pull-request@v8
59+
with:
60+
token: ${{ steps.generate-token.outputs.token }}
61+
commit-message: |
62+
Update translations from Crowdin
63+
64+
This includes:
65+
- Updated translation files (.po and .json)
66+
- Compiled Django messages (.mo files)
67+
- Updated frontend i18n files
68+
branch: i18n-update-${{ github.ref_name }}
69+
base: ${{ github.ref_name }}
70+
delete-branch: true
71+
title: 'Update translations from Crowdin for ${{ github.ref_name }}'
72+
body: |
73+
## Summary of changes
74+
75+
This PR updates translations downloaded from Crowdin.
76+
77+
### Changes included:
78+
- Updated translation files (`.po` and `.json`)
79+
- Compiled Django messages (`.mo` files)
80+
- Updated frontend i18n files
81+
82+
### Testing checklist:
83+
- [ ] Verify that translations are not obviously empty or untranslated in the message files
84+
- [ ] Switch to a few different languages and navigate the app
85+
labels: |
86+
i18n
87+
TAG: user strings

.github/workflows/i18n-upload.yml

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
name: Upload translations to Crowdin
2+
3+
on:
4+
workflow_dispatch:
5+
6+
jobs:
7+
upload:
8+
name: Extract and upload strings to Crowdin
9+
runs-on: ubuntu-latest
10+
steps:
11+
- name: Checkout repository
12+
uses: actions/checkout@v6
13+
14+
- name: Install uv
15+
uses: astral-sh/setup-uv@v7
16+
with:
17+
python-version: '3.10'
18+
activate-environment: "true"
19+
enable-cache: "true"
20+
21+
- name: Install Python dependencies
22+
run: uv pip sync requirements.txt
23+
24+
- name: Use pnpm
25+
uses: pnpm/action-setup@v6.0.3
26+
27+
- name: Use Node.js
28+
uses: actions/setup-node@v6
29+
with:
30+
node-version: '20.x'
31+
cache: 'pnpm'
32+
33+
- name: Setup Java for crowdin-cli
34+
uses: actions/setup-java@v5
35+
with:
36+
distribution: 'temurin'
37+
java-version: '17'
38+
39+
- name: Install gettext
40+
run: sudo apt-get update && sudo apt-get install -y gettext
41+
42+
- name: Install JavaScript dependencies
43+
run: pnpm install --frozen-lockfile
44+
45+
- name: Extract and upload strings to Crowdin
46+
env:
47+
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_API_KEY }}
48+
run: |
49+
make i18n-upload
50+
make i18n-pretranslate-approve-all

.github/workflows/pre-commit.yml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,16 @@ jobs:
3131
if: ${{ needs.pre_job.outputs.should_skip != 'true' }}
3232
runs-on: ubuntu-latest
3333
steps:
34-
- uses: actions/checkout@v4
35-
- uses: actions/setup-python@v5
34+
- uses: actions/checkout@v6
35+
- name: Install uv
36+
uses: astral-sh/setup-uv@v7
3637
with:
3738
python-version: '3.10'
39+
ignore-nothing-to-cache: 'true'
3840
- name: Use pnpm
39-
uses: pnpm/action-setup@v4
41+
uses: pnpm/action-setup@v6.0.3
4042
- name: Use Node.js
41-
uses: actions/setup-node@v4
43+
uses: actions/setup-node@v6
4244
with:
4345
node-version: '20.x'
4446
cache: 'pnpm'

0 commit comments

Comments
 (0)