Move SealShare from GitHub to Gitea only
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:
co-authored by
Claude Opus 5
parent
606cc766f2
commit
d860a16551
+1
-1
@@ -21,7 +21,7 @@ docker-compose*.yml
|
||||
Dockerfile
|
||||
|
||||
# CI/CD
|
||||
.github
|
||||
.gitea
|
||||
|
||||
# Testing
|
||||
tests
|
||||
|
||||
+1
-1
@@ -8,4 +8,4 @@
|
||||
|
||||
CHANGELOG.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
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Log in to GitHub Container Registry
|
||||
if: github.event_name != 'pull_request'
|
||||
# Gitea's job token cannot publish packages yet: REGISTRY_TOKEN is an access token with
|
||||
# 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
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
registry: gitea.nonameweb.ch
|
||||
username: ${{ gitea.actor }}
|
||||
password: ${{ secrets.REGISTRY_TOKEN }}
|
||||
|
||||
- name: Extract Docker metadata
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: ghcr.io/${{ github.repository }}
|
||||
images: gitea.nonameweb.ch/nonameweb/sealshare
|
||||
tags: |
|
||||
type=semver,pattern={{version}}
|
||||
type=semver,pattern={{major}}.{{minor}}
|
||||
@@ -98,21 +100,27 @@ jobs:
|
||||
with:
|
||||
context: .
|
||||
platforms: linux/amd64,linux/arm64
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
push: ${{ gitea.event_name != 'pull_request' }}
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
cache-from: type=registry,ref=gitea.nonameweb.ch/nonameweb/sealshare:buildcache
|
||||
cache-to: ${{ gitea.event_name != 'pull_request' && 'type=registry,ref=gitea.nonameweb.ch/nonameweb/sealshare:buildcache,mode=max' || '' }}
|
||||
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
needs: build-and-push
|
||||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
if: startsWith(gitea.ref, 'refs/tags/v')
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Create GitHub Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
- name: Take the release notes from the changelog
|
||||
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:
|
||||
generate_release_notes: true
|
||||
body_path: release-notes.md
|
||||
@@ -44,4 +44,4 @@ jobs:
|
||||
# commit_options: '--no-verify'
|
||||
# file_pattern: |
|
||||
# **/*
|
||||
# !.github/workflows/*
|
||||
# !.gitea/workflows/*
|
||||
+3
-6
@@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
### 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 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.
|
||||
@@ -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.
|
||||
- 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
|
||||
[2.0.0]: https://github.com/surtic86/SealShare/compare/v1.2.0...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
|
||||
[Unreleased]: https://gitea.nonameweb.ch/noNameWEB/SealShare/compare/v2.0.0...main
|
||||
[2.0.0]: https://gitea.nonameweb.ch/noNameWEB/SealShare/releases/tag/v2.0.0
|
||||
|
||||
+2
-2
@@ -41,7 +41,7 @@ RUN npm run build
|
||||
FROM dunglas/frankenphp:php8.5-alpine AS production
|
||||
|
||||
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"
|
||||
|
||||
# Install required PHP extensions
|
||||
@@ -84,7 +84,7 @@ COPY --from=vendor /app/vendor ./vendor
|
||||
COPY --from=assets /app/public/build ./public/build
|
||||
|
||||
# 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 \
|
||||
&& mkdir -p storage/app/shares storage/app/public storage/framework/cache \
|
||||
storage/framework/sessions storage/framework/testing storage/framework/views \
|
||||
|
||||
@@ -68,11 +68,11 @@ The app is available at `http://localhost:8000` with Vite HMR on port `5173`.
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
# 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
|
||||
# Then start:
|
||||
@@ -114,7 +114,7 @@ Behind a reverse proxy, raise its request body limit and read timeout as well (n
|
||||
### Manual (without Docker)
|
||||
|
||||
```bash
|
||||
git clone https://github.com/surtic86/SealShare.git
|
||||
git clone https://gitea.nonameweb.ch/noNameWEB/SealShare.git
|
||||
cd SealShare
|
||||
|
||||
composer install --no-dev --optimize-autoloader
|
||||
|
||||
@@ -18,7 +18,7 @@ services:
|
||||
# SealShare Application (FrankenPHP/Octane)
|
||||
# ------------------------------------------
|
||||
app:
|
||||
image: ghcr.io/surtic86/sealshare:latest
|
||||
image: gitea.nonameweb.ch/nonameweb/sealshare:latest
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "80:80" # HTTP
|
||||
@@ -71,7 +71,7 @@ services:
|
||||
# Scheduler - Runs cleanup for expired shares
|
||||
# ------------------------------------------
|
||||
scheduler:
|
||||
image: ghcr.io/surtic86/sealshare:latest
|
||||
image: gitea.nonameweb.ch/nonameweb/sealshare:latest
|
||||
restart: unless-stopped
|
||||
entrypoint: ["php", "artisan", "schedule:work"]
|
||||
volumes:
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
services:
|
||||
app:
|
||||
image: ghcr.io/surtic86/sealshare:latest
|
||||
image: gitea.nonameweb.ch/nonameweb/sealshare:latest
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
@@ -47,7 +47,7 @@ services:
|
||||
retries: 3
|
||||
|
||||
scheduler:
|
||||
image: ghcr.io/surtic86/sealshare:latest
|
||||
image: gitea.nonameweb.ch/nonameweb/sealshare:latest
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
|
||||
@@ -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
@@ -547,11 +547,11 @@
|
||||
<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>
|
||||
<pre><code>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
|
||||
|
||||
<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"># Then start:</span>
|
||||
|
||||
Reference in New Issue
Block a user