Move SealShare from GitHub to Gitea only
docker / test (8.5) (push) Successful in 2m13s
linter / quality (push) Successful in 1m8s
tests / ci (8.5) (push) Successful in 2m7s
docker / build-and-push (push) Failing after 9m54s
docker / release (push) Has been skipped

The workflows live in .gitea/workflows. The Docker workflow logs in to
the Gitea container registry with REGISTRY_TOKEN (Gitea's job token cannot
publish packages yet), publishes gitea.nonameweb.ch/nonameweb/sealshare
with a registry build cache, and makes the release on Gitea with the
version's section of the changelog as its notes.

The README, the website's quick start, both compose files and the image
label point to Gitea; the changelog announces the new image name and
links Gitea. GiteaOnlyTest keeps GitHub and ghcr.io out.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V9NnLxnPp8vaaurb3Z1MFy
This commit is contained in:
Andreas Reinhold / reini
2026-09-13 13:59:07 +02:00
co-authored by Claude Opus 5
parent 606cc766f2
commit d860a16551
12 changed files with 82 additions and 33 deletions
+1 -1
View File
@@ -21,7 +21,7 @@ docker-compose*.yml
Dockerfile Dockerfile
# CI/CD # CI/CD
.github .gitea
# Testing # Testing
tests tests
+1 -1
View File
@@ -8,4 +8,4 @@
CHANGELOG.md export-ignore CHANGELOG.md export-ignore
README.md export-ignore README.md export-ignore
.github/workflows/browser-tests.yml export-ignore .gitea export-ignore
@@ -73,19 +73,21 @@ jobs:
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3 uses: docker/setup-buildx-action@v3
- name: Log in to GitHub Container Registry # Gitea's job token cannot publish packages yet: REGISTRY_TOKEN is an access token with
if: github.event_name != 'pull_request' # package write rights, owned by the account that pushes (gitea.actor).
- name: Log in to the Gitea container registry
if: gitea.event_name != 'pull_request'
uses: docker/login-action@v3 uses: docker/login-action@v3
with: with:
registry: ghcr.io registry: gitea.nonameweb.ch
username: ${{ github.repository_owner }} username: ${{ gitea.actor }}
password: ${{ secrets.GITHUB_TOKEN }} password: ${{ secrets.REGISTRY_TOKEN }}
- name: Extract Docker metadata - name: Extract Docker metadata
id: meta id: meta
uses: docker/metadata-action@v5 uses: docker/metadata-action@v5
with: with:
images: ghcr.io/${{ github.repository }} images: gitea.nonameweb.ch/nonameweb/sealshare
tags: | tags: |
type=semver,pattern={{version}} type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}}.{{minor}}
@@ -98,21 +100,27 @@ jobs:
with: with:
context: . context: .
platforms: linux/amd64,linux/arm64 platforms: linux/amd64,linux/arm64
push: ${{ github.event_name != 'pull_request' }} push: ${{ gitea.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }} tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }} labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha cache-from: type=registry,ref=gitea.nonameweb.ch/nonameweb/sealshare:buildcache
cache-to: type=gha,mode=max cache-to: ${{ gitea.event_name != 'pull_request' && 'type=registry,ref=gitea.nonameweb.ch/nonameweb/sealshare:buildcache,mode=max' || '' }}
release: release:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: build-and-push needs: build-and-push
if: startsWith(github.ref, 'refs/tags/v') if: startsWith(gitea.ref, 'refs/tags/v')
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v6 uses: actions/checkout@v6
- name: Create GitHub Release - name: Take the release notes from the changelog
uses: softprops/action-gh-release@v2 run: |
version="${{ gitea.ref_name }}"
awk -v heading="## [${version#v}]" 'index($0, heading) == 1 { found = 1; next } found && /^## \[/ { exit } found { print }' CHANGELOG.md > release-notes.md
test -s release-notes.md
- name: Create the Gitea release
uses: https://gitea.com/actions/gitea-release-action@v1
with: with:
generate_release_notes: true body_path: release-notes.md
@@ -44,4 +44,4 @@ jobs:
# commit_options: '--no-verify' # commit_options: '--no-verify'
# file_pattern: | # file_pattern: |
# **/* # **/*
# !.github/workflows/* # !.gitea/workflows/*
+3 -6
View File
@@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed ### Changed
- SealShare moved from GitHub to Gitea: the source is at https://gitea.nonameweb.ch/noNameWEB/SealShare, and the Docker image is published as `gitea.nonameweb.ch/nonameweb/sealshare`. Images at `ghcr.io/surtic86/sealshare` are no longer updated — change `image:` in your `docker-compose.yml` to the new name to keep receiving releases.
- The interface is rebuilt on [Livewire Material](https://gitea.nonameweb.ch/noNameWEB/livewire-material), a Material 3 Expressive component library, replacing Mary UI and DaisyUI. Every page — upload, share created, download, sign-in, settings, admin and the setup wizard — uses its components, in a colour scheme generated from SealShare's indigo. - The interface is rebuilt on [Livewire Material](https://gitea.nonameweb.ch/noNameWEB/livewire-material), a Material 3 Expressive component library, replacing Mary UI and DaisyUI. Every page — upload, share created, download, sign-in, settings, admin and the setup wizard — uses its components, in a colour scheme generated from SealShare's indigo.
- The theme follows the system's light or dark setting until a user picks Light, Dark or System in Settings → Appearance, or from the account menu. A theme chosen in 1.x is kept. - The theme follows the system's light or dark setting until a user picks Light, Dark or System in Settings → Appearance, or from the account menu. A theme chosen in 1.x is kept.
- A floating toolbar centred at the bottom of every page replaces the sidebar and header layouts. Signed-in users reach Upload and the admin pages from it, and Settings, the theme and Log out from its account menu. The site's name and logo head the upload and download pages. - A floating toolbar centred at the bottom of every page replaces the sidebar and header layouts. Signed-in users reach Upload and the admin pages from it, and Settings, the theme and Log out from its account menu. The site's name and logo head the upload and download pages.
@@ -105,9 +106,5 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Dark themed UI built with Livewire, Alpine.js, Tailwind CSS and DaisyUI. - Dark themed UI built with Livewire, Alpine.js, Tailwind CSS and DaisyUI.
- Docker images published to `ghcr.io/surtic86/sealshare`, served by FrankenPHP via Laravel Octane. - Docker images published to `ghcr.io/surtic86/sealshare`, served by FrankenPHP via Laravel Octane.
[Unreleased]: https://github.com/surtic86/SealShare/compare/v2.0.0...HEAD [Unreleased]: https://gitea.nonameweb.ch/noNameWEB/SealShare/compare/v2.0.0...main
[2.0.0]: https://github.com/surtic86/SealShare/compare/v1.2.0...v2.0.0 [2.0.0]: https://gitea.nonameweb.ch/noNameWEB/SealShare/releases/tag/v2.0.0
[1.2.0]: https://github.com/surtic86/SealShare/compare/v1.1.0...v1.2.0
[1.1.0]: https://github.com/surtic86/SealShare/compare/v1.0.1...v1.1.0
[1.0.1]: https://github.com/surtic86/SealShare/compare/v1.0.0...v1.0.1
[1.0.0]: https://github.com/surtic86/SealShare/releases/tag/v1.0.0
+2 -2
View File
@@ -41,7 +41,7 @@ RUN npm run build
FROM dunglas/frankenphp:php8.5-alpine AS production FROM dunglas/frankenphp:php8.5-alpine AS production
LABEL maintainer="surtic86" LABEL maintainer="surtic86"
LABEL org.opencontainers.image.source="https://github.com/surtic86/SealShare" LABEL org.opencontainers.image.source="https://gitea.nonameweb.ch/noNameWEB/SealShare"
LABEL org.opencontainers.image.description="Self-hosted encrypted file sharing" LABEL org.opencontainers.image.description="Self-hosted encrypted file sharing"
# Install required PHP extensions # Install required PHP extensions
@@ -84,7 +84,7 @@ COPY --from=vendor /app/vendor ./vendor
COPY --from=assets /app/public/build ./public/build COPY --from=assets /app/public/build ./public/build
# Remove dev/build files and stale cache not needed in production # Remove dev/build files and stale cache not needed in production
RUN rm -rf node_modules tests .github docker/dev.Dockerfile docker/dev-entrypoint.sh .env .env.example \ RUN rm -rf node_modules tests .gitea docker/dev.Dockerfile docker/dev-entrypoint.sh .env .env.example \
bootstrap/cache/*.php \ bootstrap/cache/*.php \
&& mkdir -p storage/app/shares storage/app/public storage/framework/cache \ && mkdir -p storage/app/shares storage/app/public storage/framework/cache \
storage/framework/sessions storage/framework/testing storage/framework/views \ storage/framework/sessions storage/framework/testing storage/framework/views \
+3 -3
View File
@@ -68,11 +68,11 @@ The app is available at `http://localhost:8000` with Vite HMR on port `5173`.
```bash ```bash
mkdir sealshare && cd sealshare mkdir sealshare && cd sealshare
curl -O https://raw.githubusercontent.com/surtic86/SealShare/main/docker-compose.example.yml curl -O https://gitea.nonameweb.ch/noNameWEB/SealShare/raw/branch/main/docker-compose.example.yml
cp docker-compose.example.yml docker-compose.yml cp docker-compose.example.yml docker-compose.yml
# Generate an app key and paste it into docker-compose.yml # Generate an app key and paste it into docker-compose.yml
docker run --rm ghcr.io/surtic86/sealshare:latest php artisan key:generate --show docker run --rm gitea.nonameweb.ch/nonameweb/sealshare:latest php artisan key:generate --show
# Edit docker-compose.yml — set APP_KEY, APP_URL, and SERVER_NAME # Edit docker-compose.yml — set APP_KEY, APP_URL, and SERVER_NAME
# Then start: # Then start:
@@ -114,7 +114,7 @@ Behind a reverse proxy, raise its request body limit and read timeout as well (n
### Manual (without Docker) ### Manual (without Docker)
```bash ```bash
git clone https://github.com/surtic86/SealShare.git git clone https://gitea.nonameweb.ch/noNameWEB/SealShare.git
cd SealShare cd SealShare
composer install --no-dev --optimize-autoloader composer install --no-dev --optimize-autoloader
+2 -2
View File
@@ -18,7 +18,7 @@ services:
# SealShare Application (FrankenPHP/Octane) # SealShare Application (FrankenPHP/Octane)
# ------------------------------------------ # ------------------------------------------
app: app:
image: ghcr.io/surtic86/sealshare:latest image: gitea.nonameweb.ch/nonameweb/sealshare:latest
restart: unless-stopped restart: unless-stopped
ports: ports:
- "80:80" # HTTP - "80:80" # HTTP
@@ -71,7 +71,7 @@ services:
# Scheduler - Runs cleanup for expired shares # Scheduler - Runs cleanup for expired shares
# ------------------------------------------ # ------------------------------------------
scheduler: scheduler:
image: ghcr.io/surtic86/sealshare:latest image: gitea.nonameweb.ch/nonameweb/sealshare:latest
restart: unless-stopped restart: unless-stopped
entrypoint: ["php", "artisan", "schedule:work"] entrypoint: ["php", "artisan", "schedule:work"]
volumes: volumes:
+2 -2
View File
@@ -1,6 +1,6 @@
services: services:
app: app:
image: ghcr.io/surtic86/sealshare:latest image: gitea.nonameweb.ch/nonameweb/sealshare:latest
build: build:
context: . context: .
dockerfile: Dockerfile dockerfile: Dockerfile
@@ -47,7 +47,7 @@ services:
retries: 3 retries: 3
scheduler: scheduler:
image: ghcr.io/surtic86/sealshare:latest image: gitea.nonameweb.ch/nonameweb/sealshare:latest
build: build:
context: . context: .
dockerfile: Dockerfile dockerfile: Dockerfile
+44
View File
@@ -0,0 +1,44 @@
<?php
/*
* SealShare lives on Gitea only: the source at gitea.nonameweb.ch/noNameWEB/SealShare and the image
* at gitea.nonameweb.ch/nonameweb/sealshare. The changelog keeps its history, and the website's
* comparison sources link other projects' repositories, so neither is checked.
*/
test('the project points to Gitea, not GitHub, for its source, image and workflows', function () {
$files = [
'README.md',
'Dockerfile',
'.dockerignore',
'.gitattributes',
'docker-compose.yml',
'docker-compose.example.yml',
...array_map(fn (string $path): string => str($path)->after(base_path().'/')->toString(), glob(base_path('.gitea/workflows/*.yml'))),
];
foreach ($files as $file) {
expect(file_get_contents(base_path($file)))->not->toMatch('/github|ghcr\.io/i', "{$file} still refers to GitHub");
}
expect(base_path('.github'))->not->toBeDirectory()
->and(glob(base_path('.gitea/workflows/*.yml')))->not->toBeEmpty();
});
test('the website installs SealShare from Gitea', function () {
preg_match('/<section[^>]*id="install".*?<\/section>/s', file_get_contents(base_path('website/index.html')), $install);
expect($install[0])->not->toMatch('/github|ghcr\.io/i')
->toContain('gitea.nonameweb.ch/nonameweb/sealshare:latest')
->toContain('https://gitea.nonameweb.ch/noNameWEB/SealShare/raw/branch/main/docker-compose.example.yml');
});
test('images are published to the Gitea registry and releases are made on Gitea', function () {
$workflow = file_get_contents(base_path('.gitea/workflows/docker.yml'));
expect($workflow)
->toContain('registry: gitea.nonameweb.ch')
->toContain('images: gitea.nonameweb.ch/nonameweb/sealshare')
->toContain('password: ${{ secrets.REGISTRY_TOKEN }}')
->toContain('uses: https://gitea.com/actions/gitea-release-action@v1');
});
+2 -2
View File
@@ -547,11 +547,11 @@
<div class="code"> <div class="code">
<div class="code__bar"><svg class="icon" aria-hidden="true"><use href="#i-terminal"/></svg><span>Production, with Docker Compose</span></div> <div class="code__bar"><svg class="icon" aria-hidden="true"><use href="#i-terminal"/></svg><span>Production, with Docker Compose</span></div>
<pre><code>mkdir sealshare &amp;&amp; cd sealshare <pre><code>mkdir sealshare &amp;&amp; cd sealshare
curl -O https://raw.githubusercontent.com/surtic86/SealShare/main/docker-compose.example.yml curl -O https://gitea.nonameweb.ch/noNameWEB/SealShare/raw/branch/main/docker-compose.example.yml
cp docker-compose.example.yml docker-compose.yml cp docker-compose.example.yml docker-compose.yml
<span class="comment"># Generate an app key and paste it into docker-compose.yml</span> <span class="comment"># Generate an app key and paste it into docker-compose.yml</span>
docker run --rm ghcr.io/surtic86/sealshare:latest php artisan key:generate --show docker run --rm gitea.nonameweb.ch/nonameweb/sealshare:latest php artisan key:generate --show
<span class="comment"># Edit docker-compose.yml — set APP_KEY, APP_URL, and SERVER_NAME</span> <span class="comment"># Edit docker-compose.yml — set APP_KEY, APP_URL, and SERVER_NAME</span>
<span class="comment"># Then start:</span> <span class="comment"># Then start:</span>