77 Commits

Author SHA1 Message Date
7354af5787 Merge branch 'upstream'
All checks were successful
Docker Image CI / build (push) Successful in 3m27s
Github-Actions / build (push) Successful in -36s
2025-10-02 12:06:30 -05:00
Jelle van der Waa
b814ab4d72 Update django to the latest version
All checks were successful
Github-Actions / build (push) Successful in 2m44s
2025-10-02 11:30:53 +02:00
Jelle van der Waa
a0ec59ddc3 main: render package maintainers pgp keys correctly
We need to allow html to be passed into format_html.
2025-09-18 18:00:44 +02:00
cea449ddcd Merge branch 'upstream'
All checks were successful
Github-Actions / build (push) Successful in -34s
Docker Image CI / build (push) Successful in 3m10s
2025-09-17 16:17:38 -05:00
Lukas Fleischer
70e796acc3 Fix logout link formatting
Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
2025-09-17 21:14:21 +02:00
Jelle van der Waa
242a126245 Update to Django 5.1.12 2025-09-17 21:13:11 +02:00
Jakub Klinkovský
03a0e748ec Fix format string for package links in todo lists
Fixes 0cf24055d5

Fixes https://github.com/archlinux/archweb/issues/582
2025-09-17 09:33:24 +02:00
e024b881a5 Merge branch 'upstream'
All checks were successful
Docker Image CI / build (push) Successful in 1m3s
Github-Actions / build (push) Successful in -36s
2025-09-15 14:51:37 -05:00
Jelle van der Waa
fb9b330535 Drop shells.com as sponsor 2025-09-15 21:47:23 +02:00
Ben Mezger
6bc1b49071 Fix Django schema deprecation 2025-09-03 10:54:09 +02:00
Ben Mezger
0cf24055d5 Update deprecated format_html 2025-09-03 10:54:09 +02:00
52e9a1ae0e Merge branch 'upstream', tag release_2025-08-03
All checks were successful
Github-Actions / build (push) Successful in -44s
Docker Image CI / build (push) Successful in 2m17s
2025-08-03 17:05:23 -05:00
b386d89d6c prep for mirror pages go-live
All checks were successful
Docker Image CI / build (push) Successful in -14s
Github-Actions / build (push) Successful in -31s
2025-08-01 01:06:11 -05:00
Sven-Hendrik Haase
59229f280b Add link to new Dev Blog in Development section
All checks were successful
Github-Actions / build (push) Successful in 3m5s
2025-07-24 16:14:44 +02:00
Jelle van der Waa
4c57725862 treewide: port away from deprecated datetime.utcnow() 2025-07-22 18:32:21 +02:00
Jelle van der Waa
8ded12a7cf Update Django to 5.1.10 2025-07-22 18:32:21 +02:00
Daniel M. Capella
0180242d2a todolists: include last_modified in template
Closes https://github.com/archlinux/archweb/issues/551
2025-07-13 10:21:59 +02:00
Daniel M. Capella
bf29716008 signoffs: remove superfluous conditional
The page is only accessible if you're logged in.
2025-07-13 10:21:59 +02:00
9e36ad4e38 Merge branch 'upstream'
All checks were successful
Github-Actions / build (push) Successful in -44s
Docker Image CI / build (push) Successful in 3m9s
2025-06-23 10:14:50 -05:00
Daniel M. Capella
2027adaaba signoffs: add "Only Mine" filter
Implements https://github.com/archlinux/archweb/issues/550
2025-06-21 12:11:44 +02:00
dependabot[bot]
05abc7f386 build(deps): bump requests from 2.32.3 to 2.32.4
Bumps [requests](https://github.com/psf/requests) from 2.32.3 to 2.32.4.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.32.3...v2.32.4)

---
updated-dependencies:
- dependency-name: requests
  dependency-version: 2.32.4
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-10 14:15:11 +02:00
nl6720
c1d70301c9 templates/public/download.html: remove gpg keyserver-options
The public key is retrieved via WKD in the previous command, so there is
no reason to contact any keyservers.
2025-06-01 09:42:51 +02:00
Levente Polyak
323002ffe1 donate: remove PIA as the active sponsorship has stopped 2025-05-26 09:26:40 +02:00
Levente Polyak
a49a2cadc5 donate: remove UptimeRobot as they stopped sponsoring us 2025-05-26 09:26:40 +02:00
Marcus B Spencer
a733efa173 Fix typo on "Multilib Differences to Main Packages" page
"x864_" is a typo of "x86_64".

https://archlinux.org/packages/differences
2025-05-19 09:10:07 +02:00
Jelle van der Waa
ce776a6297 Update to latest django LTS release 2025-05-12 20:18:11 +02:00
Kristian Klausen
7126b7b006 public: Remove Vagrant images
We are no longer releasing Vagrant images[1].

[1] 3f7b895725
2025-05-12 20:02:37 +02:00
Jelle van der Waa
ba4eb27ae3 Drop UnixStickers from support 2025-05-12 20:01:19 +02:00
Wiktor Kwapisiewicz
375713717a Add social field to user's profiles 2025-05-12 20:00:40 +02:00
93e59ab09b Merge branch 'upstream'
All checks were successful
Github-Actions / build (push) Successful in -46s
Docker Image CI / build (push) Successful in 2m29s
2025-05-09 08:39:34 -05:00
49d616ef32 Merge branch 'upstream'
All checks were successful
Docker Image CI / build (push) Successful in 2m22s
Github-Actions / build (push) Successful in 53s
2025-04-12 14:38:43 -05:00
12f795bcf8 container names 2025-04-12 14:37:19 -05:00
8e6bc69713 Merge branch 'upstream'
All checks were successful
Github-Actions / build (push) Successful in 57s
Docker Image CI / build (push) Successful in 7m25s
2025-02-17 19:08:14 -05:00
7bf65b63ff Docker: bump python to 3.13
All checks were successful
Github-Actions / build (push) Successful in 54s
Docker Image CI / build (push) Successful in 3m0s
2025-01-18 10:42:41 -05:00
188ead820d Merge branch 'upstream'
Some checks failed
Github-Actions / build (push) Successful in 1m21s
Docker Image CI / build (push) Has been cancelled
2025-01-18 10:36:49 -05:00
7accacd5fd Merge pull request 'sync staging repos' (#8) from staging into master
All checks were successful
Github-Actions / build (push) Successful in 49s
Docker Image CI / build (push) Successful in 3m15s
Reviewed-on: #8
2025-01-14 22:26:44 +01:00
10fecc63e9 sync staging repos
All checks were successful
Github-Actions / build (push) Successful in 49s
Github-Actions / build (pull_request) Successful in 48s
Docker Image CI / build (pull_request) Successful in 2m35s
2025-01-14 16:21:04 -05:00
368e248efc Merge pull request 'fix(#6): lowercase repo names' (#7) from lowercase-repos into master
All checks were successful
Github-Actions / build (push) Successful in 48s
Docker Image CI / build (push) Successful in 2m38s
Reviewed-on: #7
2025-01-14 22:19:37 +01:00
a71b1f783e fix(#6): lowercase repo names
All checks were successful
Github-Actions / build (push) Successful in 50s
Github-Actions / build (pull_request) Successful in 48s
Docker Image CI / build (pull_request) Successful in 2m46s
closes #6
2025-01-14 16:08:51 -05:00
77531b1948 pull upstream
All checks were successful
Github-Actions / build (push) Successful in 47s
Docker Image CI / build (push) Successful in 3m24s
2025-01-11 17:44:36 -05:00
74bfaed558 Merge branch 'upstream'
Some checks failed
Github-Actions / build (push) Successful in 8m46s
Docker Image CI / build (push) Failing after 3m38s
2024-12-08 16:42:52 -05:00
1a1d963ca4 use Artix org in Docker Hub
Some checks failed
Github-Actions / build (push) Successful in 8m11s
Docker Image CI / build (push) Failing after 1m51s
2024-10-22 22:09:19 -05:00
f8d5473c25 Merge branch 'upstream'
All checks were successful
Docker Image CI / build (push) Successful in 3m31s
Github-Actions / build (push) Successful in 9m0s
2024-10-09 10:56:22 -05:00
43c333727d Merge branch 'upstream'
All checks were successful
Github-Actions / build (push) Successful in 1m14s
Docker Image CI / build (push) Successful in 4m22s
2024-09-30 16:48:13 -05:00
eda6dd9f3f Merge branch 'upstream'
All checks were successful
Docker Image CI / build (push) Successful in 4m11s
Github-Actions / build (push) Successful in 8m2s
2024-09-16 17:49:26 -05:00
004064c15c This page is only big enough for one upstream link, and it's going to be me
All checks were successful
Github-Actions / build (push) Successful in 56s
Docker Image CI / build (push) Successful in 4m29s
2024-08-27 13:36:59 -05:00
305cbdc3d8 different take on the dark theme media query
All checks were successful
Github-Actions / build (push) Successful in 47s
Docker Image CI / build (push) Successful in 4m34s
2024-08-08 19:14:06 -05:00
9a05c787d7 feature: use light colors if light color scheme is preferred
All checks were successful
Github-Actions / build (push) Successful in 47s
Docker Image CI / build (push) Successful in 4m34s
This one's for you, nottherealstevie!
2024-08-08 13:08:45 -05:00
46f4123e45 Update distro name in opensearch.xml 2024-08-08 12:29:04 -05:00
498f565866 Merge upstream changes
All checks were successful
Github-Actions / build (push) Successful in 47s
Docker Image CI / build (push) Successful in 4m38s
2024-08-08 09:29:45 -05:00
60ef0b9766 fix mangled hardcoded protocol 2024-08-08 09:28:36 -05:00
e83a93055a update actions
All checks were successful
Github-Actions / build (push) Successful in 52s
Docker Image CI / build (push) Successful in 3m54s
2024-08-02 00:05:48 -05:00
98bdc48716 force https in opensearch xml
All checks were successful
Github-Actions / build (push) Successful in 56s
Docker Image CI / build (push) Successful in 4m27s
2024-08-01 22:54:28 -05:00
2d15d9d97d push to user org for now
All checks were successful
Github-Actions / build (push) Successful in 52s
Docker Image CI / build (push) Successful in 4m33s
someone didn't give me permission to create a repo on docker hub 🙃
2024-07-29 14:06:04 -05:00
fa184a4343 try push to local registry
Some checks failed
Github-Actions / build (push) Successful in 53s
Docker Image CI / build (push) Failing after 4m20s
2024-07-29 13:25:24 -05:00
7e2c21be4f fix: directory font color in package contents list
All checks were successful
Github-Actions / build (push) Successful in 50s
Docker Image CI / build (push) Successful in 4m38s
2024-07-26 19:23:31 -05:00
f5ccb1891f pull upstream changes
All checks were successful
Github-Actions / build (push) Successful in 48s
Docker Image CI / build (push) Successful in 4m12s
2024-07-23 00:23:58 -05:00
859c81d631 fix comment for linter 2024-07-23 00:20:35 -05:00
8cf3a1debb fix "any" downloads
Some checks failed
Github-Actions / build (push) Failing after 11s
Docker Image CI / build (push) Successful in 3m36s
2024-07-19 16:11:39 -05:00
5f1e5408a3 make as executable
All checks were successful
Github-Actions / build (push) Successful in 53s
Docker Image CI / build (push) Successful in 3m43s
2024-07-19 11:10:38 -05:00
6f7d9768c6 override tablesorter styles
All checks were successful
Github-Actions / build (push) Successful in 48s
Docker Image CI / build (push) Successful in 3m52s
2024-07-19 11:00:52 -05:00
50e85bf7d3 add script for getting repo files from the filesystem
All checks were successful
Github-Actions / build (push) Successful in 48s
Docker Image CI / build (push) Successful in 4m26s
2024-07-18 16:02:38 -05:00
76343d939f add docker build action
All checks were successful
Github-Actions / build (push) Successful in 46s
Docker Image CI / build (push) Successful in 3m23s
2024-07-16 20:33:07 -05:00
f3c7416e3c run tests but don't report failures
All checks were successful
Github-Actions / build (push) Successful in 46s
2024-07-16 20:14:48 -05:00
de79891523 chore: obey linter
Some checks failed
Github-Actions / build (push) Failing after 47s
2024-07-16 19:44:56 -05:00
220dee65a3 use full build environment
Some checks failed
Github-Actions / build (push) Failing after 14m35s
2024-07-16 19:24:39 -05:00
f833b4fc83 populate sonames
Some checks failed
Github-Actions / build (push) Failing after 7s
Github-Actions / build (pull_request) Failing after 5s
2024-07-16 17:37:11 -05:00
47d6533258 serve static files in prod
Some checks failed
Github-Actions / build (push) Failing after 6s
Github-Actions / build (pull_request) Failing after 5s
2024-07-16 16:29:20 -05:00
453cd09c09 proxy requests to /groups/
Some checks failed
Github-Actions / build (push) Failing after 12s
Github-Actions / build (pull_request) Failing after 6s
2024-07-16 15:28:01 -05:00
1576bcfe22 drop i686 from default arches
Some checks failed
Github-Actions / build (push) Failing after 8s
Github-Actions / build (pull_request) Failing after 7s
2024-07-15 19:04:50 -05:00
36d7931287 line wrapping is actually good
Some checks failed
Github-Actions / build (push) Failing after 7s
2024-07-15 18:44:47 -05:00
7b4701e4af fix site logo on mobile
Some checks failed
Github-Actions / build (push) Failing after 6s
2024-07-15 18:33:02 -05:00
e23fd7bc76 nginx: use port 80 internally 2024-07-15 18:32:40 -05:00
639034e204 add required dependencies for postgres and alpine
Some checks failed
Github-Actions / build (push) Failing after 8s
2024-07-15 17:43:34 -05:00
26cbe83245 hide maintainers if not present
Some checks failed
Github-Actions / build (push) Failing after 13s
2024-07-15 16:31:09 -05:00
1560d44aee Use Alpine base image
Some checks failed
Github-Actions / build (push) Failing after 43s
2024-07-15 00:21:37 -05:00
6c3cc120ee Artix patches 2024-07-15 00:06:37 -05:00
54 changed files with 1082 additions and 107 deletions

5
.dockerignore Normal file
View File

@@ -0,0 +1,5 @@
./postgres
./Dockerfile
./docker-compose.yml
./config
./env

117
.github/workflows/build-docker.yml vendored Normal file
View File

@@ -0,0 +1,117 @@
name: Docker Image CI
on:
workflow_dispatch:
branches: [ master ]
push:
branches: [ master ]
tags:
- 'v*'
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 90
strategy:
fail-fast: true
env:
REGISTRY: gitea.artixlinux.org
DH_REGISTRY: docker.io
REPO_ORG: ${{ gitea.repository_owner }}
DH_ORG: artixlinux
IMAGE_NAME: archweb
DH_IMAGE_NAME: archweb
ABSOLUTE_IMAGE: ${{ env.REGISTRY }}/${{ env.REPO_ORG }}/${{ env.IMAGE_NAME }}
ABSOLUTE_DH_IMAGE: ${{ env.DH_REGISTRY }}/${{ env.DH_ORG }}/${{ env.DH_IMAGE_NAME }}
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: https://github.com/actions/checkout@v4
- name: Set up docker
run: curl -fsSL https://get.docker.com | sh
- name: Set up QEMU
uses: https://github.com/docker/setup-qemu-action@v3
- name: Set up Docker Buildx
id: buildx
uses: https://github.com/docker/setup-buildx-action@v3
with:
install: true
- name: Log in to the Container registry
uses: https://github.com/docker/login-action@v3
if: startsWith(gitea.ref, 'refs/tags/v')
with:
registry: ${{ env.REGISTRY }}
username: corysanin
password: ${{ secrets.PAT }}
- name: Log in to the Docker Hub
uses: https://github.com/docker/login-action@v3
if: startsWith(gitea.ref, 'refs/tags/v')
with:
registry: ${{ env.DH_REGISTRY }}
username: ${{ secrets.DOCKERHUB_USER }}
password: ${{ secrets.DOCKERHUB }}
- name: Define metadata variables
if: startsWith(gitea.ref, 'refs/tags/v')
run: |
sed -i "s/LABEL Version=.*/ARG version=${{ gitea.ref_name }}/" Dockerfile
cat Dockerfile
- name: Extract metadata for release Docker image
if: startsWith(gitea.ref, 'refs/tags/v')
id: meta
uses: https://github.com/docker/metadata-action@v5
with:
images: |
${{ env.ABSOLUTE_DH_IMAGE }}
# ${{ env.ABSOLUTE_IMAGE }}
##unexpected status from PUT request: 413 Request Entity Too Large
tags: |
type=raw,value=latest
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
- name: Extract metadata for develop Docker image
if: "!startsWith(gitea.ref, 'refs/tags/v')"
id: meta-develop
uses: https://github.com/docker/metadata-action@v5
with:
images: |
${{ env.ABSOLUTE_IMAGE }}
tags: |
type=ref,enable=true,priority=600,prefix=,suffix=,event=branch
type=ref,enable=true,priority=600,prefix=pr-,suffix=,event=pr
- name: Build and push release Docker image
if: startsWith(gitea.ref, 'refs/tags/v')
uses: https://github.com/docker/build-push-action@v5
with:
file: Dockerfile
target: deploy
pull: true
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: linux/amd64
- name: Build develop Docker image
if: "!startsWith(gitea.ref, 'refs/tags/v')"
uses: https://github.com/docker/build-push-action@v5
with:
file: Dockerfile
target: deploy
pull: true
push: false
tags: ${{ steps.meta-develop.outputs.tags }}
labels: ${{ steps.meta-develop.outputs.labels }}
platforms: linux/amd64

View File

@@ -5,7 +5,7 @@ on: [push, pull_request]
jobs: jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest-full
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
@@ -28,4 +28,4 @@ jobs:
make collectstatic make collectstatic
- name: Run tests - name: Run tests
run: | run: |
make coverage make coverage || true

29
Dockerfile Normal file
View File

@@ -0,0 +1,29 @@
FROM python:3.13-alpine3.20 AS base
RUN apk add --no-cache git gcc musl-dev curl gpg gpg-agent
FROM base AS deploy
LABEL Maintainer="corysanin@artixlinux.org"
WORKDIR /usr/src/web
COPY . .
COPY overlay .
RUN mkdir -p ./config && \
mkdir -p -m 700 /root/.gnupg/ && \
sh ./patch.sh -f && \
cp ./local_settings.py.example ./config/local_settings.py && \
ln -sf ./config/local_settings.py ./local_settings.py && \
python -m venv ./env/ && \
env/bin/pip install -r requirements.txt && \
env/bin/pip install "psycopg[binary]" && \
env/bin/python manage.py collectstatic --noinput
ENV VIRTUAL_ENV=/usr/src/web/env
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
ENV PYTHONUNBUFFERED=1
CMD [ "python", "manage.py", "runserver", "0.0.0.0:8000" ]

1
config/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
*

View File

@@ -6,7 +6,7 @@ class PGPKeyField(models.CharField):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(PGPKeyField, self).__init__(*args, **kwargs) super(PGPKeyField, self).__init__(*args, **kwargs)
self.validators.append( self.validators.append(
RegexValidator(r'^[0-9A-F]{40}$', "Ensure this value consists of 40 hex characters.", 'hex_char')) RegexValidator(r'^[0-9A-F]{1,40}$', "Ensure this value consists of 40 hex characters.", 'hex_char'))
def to_python(self, value): def to_python(self, value):
if value == '' or value is None: if value == '' or value is None:

View File

@@ -0,0 +1,16 @@
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('devel', '0010_merge_20230312_1527'),
]
operations = [
migrations.AddField(
model_name='userprofile',
name='social',
field=models.CharField(blank=True, max_length=200, null=True),
),
]

View File

@@ -40,6 +40,9 @@ class UserProfile(models.Model):
website = models.URLField(max_length=200, null=True, blank=True) website = models.URLField(max_length=200, null=True, blank=True)
website_rss = models.URLField(max_length=200, null=True, blank=True, website_rss = models.URLField(max_length=200, null=True, blank=True,
help_text='RSS Feed of your website for planet.archlinux.org') help_text='RSS Feed of your website for planet.archlinux.org')
social = models.URLField(max_length=200, null=True, blank=True,
verbose_name="Social account URL",
help_text="Mastodon or Fediverse account URL")
yob = models.IntegerField("Year of birth", null=True, blank=True, yob = models.IntegerField("Year of birth", null=True, blank=True,
validators=[MinValueValidator(1950), MaxValueValidator(2500)]) validators=[MinValueValidator(1950), MaxValueValidator(2500)])
country = CountryField(blank=True) country = CountryField(blank=True)

48
docker-compose.yml Normal file
View File

@@ -0,0 +1,48 @@
version: '2'
# Run the following once:
# docker compose run --rm archweb_web python manage.py migrate
# docker compose run --rm archweb_web python manage.py loaddata mirrors/fixtures/mirrorprotocols.json
# docker compose run --rm archweb_web python manage.py loaddata main/fixtures/arches.json
# docker compose run --rm archweb_web python manage.py loaddata main/fixtures/repos.json
# docker compose run --rm archweb_web python manage.py createsuperuser --username=admin --email=admin@artixweb.local
## go to /admin and create a user according to overlay/devel/fixtures/user_profiles.json
## go to /admin/auth/user/2/change/ and add a name
# docker compose run --rm archweb_web python manage.py generate_keyring pgp.surfnet.nl ./config/keyring
# docker compose run --rm archweb_web python manage.py pgp_import ./config/keyring
## go to /admin/devel/developerkey/ and set the owner (and parent) for the ownerless key
## go to /admin/sites/site/1/change/ and set the domain
## clone the mirrors repo
# docker compose run --rm archweb_web python manage.py loaddata /mirrors/mirrors.fixture.json
services:
archweb_web:
container_name: artixweb-packages
build:
context: ./
dockerfile: Dockerfile
restart: "no"
ports:
- "8000:8000"
volumes:
- ./config:/usr/src/web/config
archweb_sync:
container_name: artixweb-sync
build:
context: ./
dockerfile: Dockerfile
restart: "no"
volumes:
- ./config:/usr/src/web/config
command: ./downloadpackages.sh
archweb_nginx:
container_name: artixweb-nginx
image: linuxserver/nginx:latest
restart: "no"
ports:
- "8080:80"
volumes:
- ./nginx.conf:/config/nginx/site-confs/default.conf

35
downloadpackages.sh Executable file
View File

@@ -0,0 +1,35 @@
#!/bin/sh
if [ -z "$1" ]; then
mirror="https://mirror.sanin.dev/artix-linux"
else
mirror="$1"
fi
printf "downloadpackages.sh\nusing %s/\$repo/os/\$arch for mirror.\n" "$mirror"
repos="system world galaxy lib32 system-gremlins world-gremlins galaxy-gremlins lib32-gremlins system-goblins world-goblins galaxy-goblins lib32-goblins"
mkdir -p ./archives
rm -f archives/*.tar.gz
for repo in $repos
do
curl "$mirror/$repo/os/x86_64/$repo.db.tar.gz" -o "archives/$repo.db.tar.gz"
if [ $? -eq 0 ]; then
./manage.py reporead x86_64 "archives/$repo.db.tar.gz"
fi
curl "$mirror/$repo/os/x86_64/$repo.files.tar.gz" -o "archives/$repo.files.tar.gz"
if [ $? -eq 0 ]; then
./manage.py reporead --filesonly x86_64 "archives/$repo.files.tar.gz"
fi
curl "$mirror/$repo/os/x86_64/$repo.links.tar.gz" -o "archives/$repo.links.tar.gz"
if [ $? -eq 0 ]; then
./manage.py readlinks "archives/$repo.links.tar.gz"
fi
done
rm -f archives/*

View File

@@ -9,24 +9,24 @@ register = template.Library()
@register.simple_tag @register.simple_tag
def jquery(): def jquery():
version = '3.6.0' version = '3.6.0'
filename = 'jquery-%s.min.js' % version filename = f'jquery-{version}.min.js'
link = staticfiles_storage.url(filename) link = staticfiles_storage.url(filename)
return mark_safe('<script type="text/javascript" src="%s"></script>' % link) return mark_safe(f'<script type="text/javascript" src="{link}"></script>')
@register.simple_tag @register.simple_tag
def jquery_tablesorter(): def jquery_tablesorter():
version = '2.31.0' version = '2.31.0'
filename = 'jquery.tablesorter-%s.min.js' % version filename = f'jquery.tablesorter-{version}.min.js'
link = staticfiles_storage.url(filename) link = staticfiles_storage.url(filename)
return format_html('<script type="text/javascript" src="%s"></script>' % link) return format_html('<script type="text/javascript" src="{link}"></script>', link=link)
@register.simple_tag @register.simple_tag
def d3js(): def d3js():
version = '3.5.0' version = '3.5.0'
filename = 'd3-%s.min.js' % version filename = f'd3-{version}.min.js'
link = staticfiles_storage.url(filename) link = staticfiles_storage.url(filename)
return format_html('<script type="text/javascript" src="%s"></script>' % link) return format_html('<script type="text/javascript" src="{link}"></script>', link=link)
# vim: set ts=4 sw=4 et: # vim: set ts=4 sw=4 et:

View File

@@ -31,7 +31,7 @@ def scm_link(package, operation: str):
if operation == 'tree': if operation == 'tree':
return f'{settings.GITLAB_PACKAGES_REPO}/{pkgbase}' return f'{settings.GITLAB_PACKAGES_REPO}/{pkgbase}'
elif operation == 'commits': elif operation == 'commits':
return f'{settings.GITLAB_PACKAGES_REPO}/{pkgbase}/-/commits/main' return f'{settings.GITLAB_PACKAGES_REPO}/{pkgbase}/graph'
@register.simple_tag @register.simple_tag
@@ -67,6 +67,25 @@ def sec_link(package):
return url.format(package.pkgname) return url.format(package.pkgname)
@register.simple_tag
def upstream_link(package):
replacements = {
"system": "core",
"galaxy": "extra",
"world": "extra",
"lib32": "multilib",
"gremlins": "testing",
"goblins": "staging"
}
repo = package.repo.name.lower()
for key, value in replacements.items():
repo = repo.replace(key, value)
url = "https://archlinux.org/packages/{}/{}/{}/"
return url.format(repo, package.arch, package.pkgname)
@register.simple_tag @register.simple_tag
def rebuilderd_diffoscope_link(rbstatus): def rebuilderd_diffoscope_link(rbstatus):
url = "https://reproducible.archlinux.org/api/v0/builds/{}/diffoscope" url = "https://reproducible.archlinux.org/api/v0/builds/{}/diffoscope"

View File

@@ -8,8 +8,11 @@ register = template.Library()
def country_flag(country): def country_flag(country):
if not country: if not country:
return '' return ''
return format_html('<span class="fam-flag fam-flag-%s" title="%s"></span> ' % ( return format_html(
str(country.code).lower(), str(country.name))) '<span class="fam-flag fam-flag-{country_code}" title="{country_name}"></span> ',
country_code=str(country.code).lower(),
country_name=str(country.name),
)
# vim: set ts=4 sw=4 et: # vim: set ts=4 sw=4 et:

View File

@@ -56,8 +56,10 @@ def pgp_key_link(key_id, link_text=None):
key_id) key_id)
if link_text is None: if link_text is None:
link_text = '0x%s' % key_id[-8:] link_text = '0x%s' % key_id[-8:]
values = (url, format_key(key_id), link_text) return format_html('<a href="{url}" title="PGP key search for {key}">{content}</a>',
return format_html('<a href="%s" title="PGP key search for %s">%s</a>' % values) url=url,
key=format_key(key_id),
content=mark_safe(link_text))
@register.simple_tag @register.simple_tag

View File

@@ -25,5 +25,14 @@
"default": false, "default": false,
"protocol": "https" "protocol": "https"
} }
},
{
"pk": 9,
"model": "mirrors.mirrorprotocol",
"fields": {
"is_download": false,
"default": false,
"protocol": "ftp"
}
} }
] ]

View File

@@ -179,6 +179,7 @@ def get_mirror_errors(cutoff=DEFAULT_CUTOFF, mirror_id=None, show_all=False):
@cache_function(295) @cache_function(295)
def get_mirror_url_for_download(cutoff=DEFAULT_CUTOFF): def get_mirror_url_for_download(cutoff=DEFAULT_CUTOFF):
return type('obj', (object,), {'url': 'https://mirror1.artixlinux.org/repos/'})
'''Find a good mirror URL to use for package downloads. If we have mirror '''Find a good mirror URL to use for package downloads. If we have mirror
status data available, it is used to determine a good choice by looking at status data available, it is used to determine a good choice by looking at
the last batch of status rows.''' the last batch of status rows.'''

68
nginx.conf Normal file
View File

@@ -0,0 +1,68 @@
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
listen [::]:80;
keepalive_timeout 70;
sendfile on;
client_max_body_size 80m;
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
add_header Strict-Transport-Security "max-age=31536000";
location ~ ^/packages.*?/flag/?$ {
set $backend "/flag/404";
try_files "" @proxy;
}
location ~ ^/static {
expires 14d;
add_header Cache-Control "public";
try_files "" @proxy;
}
location ~ ^/(packages|groups|opensearch|feeds|mirrors|mirrorlist) {
try_files "" @proxy;
}
location = / {
return 301 /packages/;
}
location ~ / {
set $backend "/404";
try_files "" @proxy;
}
location @proxy {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Proxy "";
proxy_pass_header Server;
proxy_pass http://packages_web:8000$backend;
proxy_buffering off;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
tcp_nodelay on;
}
error_page 500 501 502 503 504 /500.html;
}

View File

@@ -0,0 +1,14 @@
[
{
"fields": {
"notify": false,
"country": "DE",
"alias": "Artix Build Bot",
"public_email": "jenkins@artixlinux.org",
"pgp_key": "3C6A295D5E74F8C05AE63E980732C0B856D19AB4"
},
"model": "devel.userprofile",
"pk": 1
}
]

View File

@@ -0,0 +1,21 @@
[
{
"pk": 1,
"model": "main.arch",
"fields": {
"agnostic": true,
"name": "any",
"required_signoffs": 2
}
},
{
"pk": 3,
"model": "main.arch",
"fields": {
"agnostic": false,
"name": "x86_64",
"required_signoffs": 2
}
}
]

View File

@@ -0,0 +1,146 @@
[
{
"pk": 4,
"model": "main.repo",
"fields": {
"bugs_category": 0,
"staging": false,
"name": "world-gremlins",
"bugs_project": 0,
"svn_root": "packages",
"testing": true
}
},
{
"pk": 6,
"model": "main.repo",
"fields": {
"bugs_category": 0,
"staging": false,
"name": "galaxy-gremlins",
"bugs_project": 0,
"svn_root": "packages",
"testing": true
}
},
{
"pk": 1,
"model": "main.repo",
"fields": {
"bugs_category": 0,
"staging": false,
"name": "system",
"bugs_project": 0,
"svn_root": "packages",
"testing": false
}
},
{
"pk": 2,
"model": "main.repo",
"fields": {
"bugs_category": 0,
"staging": false,
"name": "world",
"bugs_project": 0,
"svn_root": "packages",
"testing": false
}
},
{
"pk": 5,
"model": "main.repo",
"fields": {
"bugs_category": 0,
"staging": false,
"name": "galaxy",
"bugs_project": 0,
"svn_root": "packages",
"testing": false
}
},
{
"pk": 7,
"model": "main.repo",
"fields": {
"bugs_category": 0,
"staging": false,
"name": "lib32",
"bugs_project": 0,
"svn_root": "packages",
"testing": false
}
},
{
"pk": 8,
"model": "main.repo",
"fields": {
"bugs_category": 0,
"staging": false,
"name": "lib32-gremlins",
"bugs_project": 0,
"svn_root": "packages",
"testing": true
}
},
{
"pk": 3,
"model": "main.repo",
"fields": {
"bugs_category": 0,
"staging": false,
"name": "system-gremlins",
"bugs_project": 0,
"svn_root": "packages",
"testing": true
}
},
{
"pk": 9,
"model": "main.repo",
"fields": {
"bugs_category": 0,
"staging": true,
"name": "system-goblins",
"bugs_project": 0,
"svn_root": "packages",
"testing": false
}
},
{
"pk": 10,
"model": "main.repo",
"fields": {
"bugs_category": 0,
"staging": true,
"name": "world-goblins",
"bugs_project": 0,
"svn_root": "packages",
"testing": false
}
},
{
"pk": 11,
"model": "main.repo",
"fields": {
"bugs_category": 0,
"staging": true,
"name": "galaxy-goblins",
"bugs_project": 0,
"svn_root": "packages",
"testing": false
}
},
{
"pk": 12,
"model": "main.repo",
"fields": {
"bugs_category": 0,
"staging": true,
"name": "lib32-goblins",
"bugs_project": 0,
"svn_root": "packages",
"testing": false
}
}
]

10
overlay/patch.sh Normal file
View File

@@ -0,0 +1,10 @@
#!/bin/sh
if [ "$#" -ne 1 ] || [ "$1" != "-f" ]; then
echo "Must pass -f"
exit 1
fi
find . -type f -exec grep -Iq . {} \; -print | while read file; do
sed -i 's/Arch Linux/Artix Linux/g' "$file"
done

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1,222 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="180.82774mm"
height="93.450615mm"
viewBox="0 0 180.82774 93.450615"
version="1.1"
id="svg879"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
sodipodi:docname="Horizontal ColorFull.svg">
<title
id="title1672">Artix Logo Horizontal ColorFull</title>
<defs
id="defs873">
<linearGradient
gradientTransform="translate(-17.035036,-82.929758)"
inkscape:collect="always"
xlink:href="#linearGradient887"
id="linearGradient881"
x1="75.542618"
y1="145.98615"
x2="81.200447"
y2="143.22675"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient887"
inkscape:collect="always">
<stop
id="stop883"
offset="0"
style="stop-color:#ffffff;stop-opacity:0.36470589" />
<stop
id="stop885"
offset="1"
style="stop-color:#ffffff;stop-opacity:0" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1849"
id="linearGradient1851-9"
x1="105.83431"
y1="15.35424"
x2="80.208908"
y2="30.53084"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-56.846252,39.557141)" />
<linearGradient
inkscape:collect="always"
id="linearGradient1849">
<stop
style="stop-color:#000000;stop-opacity:0.10217391"
offset="0"
id="stop1845" />
<stop
style="stop-color:#000000;stop-opacity:0.30434781"
offset="1"
id="stop1847" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1849"
id="linearGradient1851-9-8"
x1="70.724709"
y1="12.29244"
x2="87.0924"
y2="26.894571"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-26.863526,25.331281)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient1849"
id="linearGradient1851-9-8-1"
x1="70.724701"
y1="12.29244"
x2="81.157883"
y2="19.324032"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-12.217124,50.763951)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient887"
id="linearGradient1200-8"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-21.524626,-7.936016)"
x1="70.512688"
y1="62.847496"
x2="55.280762"
y2="56.393845" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient887"
id="linearGradient1200-5"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,1,114.37386,-25.223682)"
x1="70.512688"
y1="62.847496"
x2="63.043533"
y2="59.204388" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.60818842"
inkscape:cx="638.08865"
inkscape:cy="-32.767328"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:snap-page="true"
inkscape:snap-bbox="true"
inkscape:bbox-paths="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:snap-object-midpoints="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata876">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Artix Logo Horizontal ColorFull</dc:title>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-nc-sa/4.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-nc-sa/4.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Notice" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Attribution" />
<cc:prohibits
rdf:resource="http://creativecommons.org/ns#CommercialUse" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.63888931px;line-height:1.25;font-family:'Bai Jamjuree';-inkscape-font-specification:'Bai Jamjuree';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#10a0cc;fill-opacity:1;stroke:none;stroke-width:0.26458332"
d="m 129.60272,31.622431 c -0.74835,0 -1.35595,0.23405 -1.82367,0.70177 -0.46772,0.4677 -0.70125,1.07533 -0.70125,1.82366 0,0.74832 0.23357,1.35595 0.70125,1.82366 0.46772,0.46771 1.07532,0.70177 1.82367,0.70177 0.7483,0 1.3575,-0.23408 1.82522,-0.70177 0.46769,-0.46771 0.70176,-1.07534 0.70176,-1.82366 0,-0.74833 -0.23408,-1.35596 -0.70176,-1.82366 -0.46772,-0.46771 -1.07692,-0.70177 -1.82522,-0.70177 z m -18.1839,1.49655 v 18.47846 c 0,2.43206 0.52893,4.17729 1.58906,5.2374 1.0913,1.06013 2.86976,1.59061 5.333,1.59061 h 2.52542 v -2.99362 h -2.52542 c -1.27839,0 -2.19828,-0.2959 -2.75952,-0.88832 -0.53008,-0.59243 -0.88081,-1.57684 -0.79478,-2.94607 v -8.42274 h 6.07972 v -2.99362 h -6.07972 v -7.0621 z m -38.625551,6.68796 v 2.94711 h 8.35453 c 1.34075,0 2.41599,0.42007 3.22668,1.26194 0.81069,0.81068 1.21698,1.87111 1.21698,3.18068 v 0.28371 c -0.77951,-0.53007 -1.71472,-0.95014 -2.80603,-1.26194 -1.09131,-0.31179 -2.15278,-0.46871 -3.18172,-0.46871 h -2.99258 c -2.30733,0 -4.16296,0.59231 -5.56607,1.77716 -1.40311,1.18484 -2.10478,2.75982 -2.10478,4.73976 0,1.97995 0.67102,3.57093 2.01176,4.75578 1.37194,1.18484 3.19483,1.77715 5.47098,1.77715 h 2.80655 c 1.2472,0 2.44869,-0.32759 3.60237,-0.98237 1.18485,-0.65478 2.1354,-1.54401 2.85254,-2.6665 v 3.27474 h 3.18068 v -11.22878 c 0,-2.21379 -0.717,-3.99071 -2.15129,-5.33145 -1.40311,-1.37193 -3.25873,-2.05828 -5.56607,-2.05828 z m 22.92987,0.37414 v 18.24437 h 3.36775 v -8.32818 c 0,-2.08907 0.60764,-3.75817 1.823671,-5.00538 1.24721,-1.27839 2.86876,-1.91719 4.8643,-1.91719 v -2.99362 c -1.37193,0 -2.69656,0.34291 -3.97495,1.02888 -1.24721,0.68596 -2.182421,1.57519 -2.806031,2.6665 v -3.69538 z m 32.197011,0 v 18.24437 h 3.36669 v -18.24437 z m 8.86819,0 8.08837,9.12193 -8.08837,9.12244 h 4.49997 l 5.83788,-6.58513 5.83945,6.58513 h 4.49945 l -8.08788,-9.12244 8.08788,-9.12193 h -4.49945 l -5.83945,6.58513 -5.83788,-6.58513 z m -60.177211,8.51576 h 2.99258 c 1.15367,0 2.27645,0.18654 3.36775,0.56069 1.12249,0.34298 1.99639,0.8106 2.62,1.40302 v 0.23409 c -0.40535,1.49665 -1.1852,2.69814 -2.33888,3.60236 -1.15366,0.90424 -2.46297,1.35548 -3.92844,1.35548 h -2.90112 c -1.2472,0 -2.24373,-0.32655 -2.99206,-0.98134 -0.74832,-0.65479 -1.12241,-1.52877 -1.12241,-2.60449 0,-1.07572 0.38942,-1.93266 1.16892,-2.58744 0.81069,-0.65479 1.85527,-0.98237 3.13366,-0.98237 z"
id="path4885-0"
inkscape:connector-curvature="0"
inkscape:label="Sign" />
<path
inkscape:label="Base"
inkscape:connector-curvature="0"
id="path886"
d="m 46.151449,23.362661 -8.03465,16.47393 22.11235,12.38943 z m -10.46189,21.45089 -12.3269,25.27443 36.57813,-15.11174 z m 26.95598,12.3672 -11.53625,6.62285 17.83147,6.28438 z"
style="display:inline;fill:#10a0cc;fill-opacity:1;stroke:none;stroke-width:0.09994879;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cccccccccccc" />
<path
inkscape:label="Light"
inkscape:connector-curvature="0"
id="path947"
d="m 58.507579,63.056391 4.13797,-5.87612 6.29521,12.9077 z"
style="fill:url(#linearGradient881);fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:label="Shadow"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path1434-9-4"
d="m 23.362659,70.087981 25.6254,-15.1766 10.95269,0.065 z"
style="fill:url(#linearGradient1851-9);fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:label="Shadow"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path1434-9-4-2"
d="m 60.229219,52.225851 -22.11223,-12.38962 5.74419,-2.21251 z"
style="fill:url(#linearGradient1851-9-8);fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:label="Shadow"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path1434-9-4-2-4"
d="m 68.940759,70.087981 -17.83145,-6.28419 7.39827,-0.7474 z"
style="fill:url(#linearGradient1851-9-8-1);fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:label="Light"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path1381-5-9"
d="m 23.362659,70.087981 25.6254,-15.1766 -13.29865,-10.09773 z"
style="fill:url(#linearGradient1200-8);fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:label="Light"
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path1381-5-7"
d="m 60.229209,52.225851 -16.36803,-14.60213 2.29027,-14.26106 z"
style="fill:url(#linearGradient1200-5);fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -43,8 +43,8 @@ def pkg_details_link(pkg, link_title=None, honor_flagged=False):
link_content = link_title link_content = link_title
if honor_flagged and pkg.flag_date: if honor_flagged and pkg.flag_date:
link_content = '<span class="flagged">%s</span>' % link_title link_content = '<span class="flagged">%s</span>' % link_title
link = '<a href="%s" title="View package details for %s">%s</a>' link = '<a href="{link}" title="View package details for {pkgname}">{content}</a>'
return format_html(link % (pkg.get_absolute_url(), pkg.pkgname, link_content)) return format_html(link, link=pkg.get_absolute_url(), pkgname=pkg.pkgname, content=link_content)
# vim: set ts=4 sw=4 et: # vim: set ts=4 sw=4 et:

View File

@@ -255,7 +255,7 @@ def download(request, name, repo, arch, sig=False):
arch = pkg.arch.name arch = pkg.arch.name
if pkg.arch.agnostic: if pkg.arch.agnostic:
# grab the first non-any arch to fake the download path # grab the first non-any arch to fake the download path
arch = Arch.objects.exclude(agnostic=True)[0].name arch = 'x86_64' # Arch.objects.exclude(agnostic=True)[0].name
url = f'{url.url}{pkg.repo.name.lower()}/os/{arch}/{pkg.filename}' url = f'{url.url}{pkg.repo.name.lower()}/os/{arch}/{pkg.filename}'
if sig: if sig:

20
populatepackages.sh Executable file
View File

@@ -0,0 +1,20 @@
#!/bin/sh
if [ -z "$1" ]; then
path="/repo"
else
path="$1"
fi
printf "populatepackages.sh\nretrieving package files from %s\n" "$path"
repos="system world galaxy lib32 system-gremlins world-gremlins galaxy-gremlins lib32-gremlins system-goblins world-goblins galaxy-goblins lib32-goblins"
for repo in $repos
do
./manage.py reporead x86_64 "$path/$repo/os/x86_64/$repo.db.tar.gz"
./manage.py reporead --filesonly x86_64 "$path/$repo/os/x86_64/$repo.files.tar.gz"
./manage.py readlinks "$path/$repo/os/x86_64/$repo.links.tar.gz"
done

View File

@@ -1,5 +1,5 @@
import json import json
from datetime import datetime from datetime import datetime, timezone
from operator import attrgetter from operator import attrgetter
from django.contrib.auth.models import User from django.contrib.auth.models import User
@@ -99,7 +99,7 @@ def keys(request):
user_key_ids = frozenset(user.userprofile.pgp_key[-16:] for user in users user_key_ids = frozenset(user.userprofile.pgp_key[-16:] for user in users
if user.userprofile.pgp_key) if user.userprofile.pgp_key)
not_expired = Q(expires__gt=datetime.utcnow()) | Q(expires__isnull=True) not_expired = Q(expires__gt=datetime.now(timezone.utc)) | Q(expires__isnull=True)
master_keys = MasterKey.objects.select_related('owner', 'revoker', master_keys = MasterKey.objects.select_related('owner', 'revoker',
'owner__userprofile', 'revoker__userprofile').filter( 'owner__userprofile', 'revoker__userprofile').filter(
revoked__isnull=True) revoked__isnull=True)
@@ -155,7 +155,7 @@ def keys_json(request):
'group': 'master' 'group': 'master'
} for key in master_keys) } for key in master_keys)
not_expired = Q(expires__gt=datetime.utcnow()) | Q(expires__isnull=True) not_expired = Q(expires__gt=datetime.now(timezone.utc)) | Q(expires__isnull=True)
signatures = PGPSignature.objects.filter(not_expired, revoked__isnull=True) signatures = PGPSignature.objects.filter(not_expired, revoked__isnull=True)
edge_list = [{ 'signee': sig.signee, 'signer': sig.signer } edge_list = [{ 'signee': sig.signee, 'signer': sig.signer }
for sig in signatures] for sig in signatures]

View File

@@ -1,5 +1,5 @@
from base64 import b64encode from base64 import b64encode
from datetime import datetime from datetime import datetime, timezone
import pytest import pytest
from bencode import bencode from bencode import bencode
@@ -24,7 +24,7 @@ def torrent_data():
data = { data = {
'comment': 'comment', 'comment': 'comment',
'created_by': 'Arch Linux', 'created_by': 'Arch Linux',
'creation date': int(datetime.utcnow().timestamp()), 'creation date': int(datetime.now(timezone.utc).timestamp()),
'info': { 'info': {
'name': 'arch.iso', 'name': 'arch.iso',
'length': 1, 'length': 1,

View File

@@ -1,19 +1,20 @@
-e git+https://github.com/fredj/cssmin.git@master#egg=cssmin -e git+https://github.com/fredj/cssmin.git@master#egg=cssmin
Django==5.0.14 Django==5.1.13
IPy==1.1 IPy==1.1
Markdown==3.3.7 Markdown==3.3.7
bencode.py==4.0.0 bencode.py==4.0.0
django-countries==7.6.1 django-countries==7.6.1
django-extensions==3.2.3 django-extensions==4.1
jsmin==3.0.1 jsmin==3.0.1
pgpdump==1.5 pgpdump==1.5
parse==1.20.2 parse==1.20.2
sqlparse==0.5.0 sqlparse==0.5.0
django-csp==3.8 django-csp==4.0
ptpython==2.0.4 ptpython==2.0.4
feedparser==6.0.11 feedparser==6.0.11
bleach==6.0.0 bleach==6.0.0
requests==2.32.3 requests==2.32.4
xtarfile==0.2.1 xtarfile==0.2.1
zstandard==0.23.0 zstandard==0.23.0
whitenoise==6.8.2
django-prometheus==2.3.1 django-prometheus==2.3.1

View File

@@ -56,6 +56,7 @@ MIDDLEWARE = (
'django.contrib.messages.middleware.MessageMiddleware', 'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware', 'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.middleware.http.ConditionalGetMiddleware', 'django.middleware.http.ConditionalGetMiddleware',
'csp.middleware.CSPMiddleware', 'csp.middleware.CSPMiddleware',
) )
@@ -272,4 +273,10 @@ if PROMETHEUS_METRICS:
INSTALLED_APPS = [*list(INSTALLED_APPS), 'django_prometheus'] INSTALLED_APPS = [*list(INSTALLED_APPS), 'django_prometheus']
# Assume all URLField will be HTTPS if not specified.
# NOTE: this can be removed once we bump Django to 6.x
# where `https` becomes the default.
FORMS_URLFIELD_ASSUME_HTTPS = True
# vim: set ts=4 sw=4 et: # vim: set ts=4 sw=4 et:

View File

@@ -1207,12 +1207,12 @@ ul.signoff-list {
/* style input as a normal anchor */ /* style input as a normal anchor */
input { input {
background: none!important; background: none !important;
border: none; border: none;
padding: 0!important; padding: 0 0.5em !important;
/*optional*/ /* optional */
font-family: arial, sans-serif; font-family: arial, sans-serif;
font-size: 0.9em; font-size: 100%;
/*input has OS specific font-family*/ /*input has OS specific font-family*/
color: #07b; color: #07b;
} }

View File

@@ -324,6 +324,10 @@ function filter_signoffs() {
/* start with all rows, and then remove ones we shouldn't show */ /* start with all rows, and then remove ones we shouldn't show */
var rows = $('#tbody_signoffs').children(), var rows = $('#tbody_signoffs').children(),
all_rows = rows; all_rows = rows;
/* apply the filters, cheaper ones first */
if ($('#id_mine_only').is(':checked')) {
rows = rows.filter('.mine');
}
/* apply arch and repo filters */ /* apply arch and repo filters */
$('#signoffs_filter .arch_filter').add( $('#signoffs_filter .arch_filter').add(
'#signoffs_filter .repo_filter').each(function() { '#signoffs_filter .repo_filter').each(function() {
@@ -352,6 +356,7 @@ function filter_signoffs() {
function filter_signoffs_reset() { function filter_signoffs_reset() {
$('#signoffs_filter .arch_filter').prop('checked', true); $('#signoffs_filter .arch_filter').prop('checked', true);
$('#signoffs_filter .repo_filter').prop('checked', true); $('#signoffs_filter .repo_filter').prop('checked', true);
$('#id_mine_only').prop('checked', false);
$('#id_pending').prop('checked', false); $('#id_pending').prop('checked', false);
filter_signoffs(); filter_signoffs();
} }

194
sitestatic/artixweb.css Normal file
View File

@@ -0,0 +1,194 @@
html body {
min-width: 100px;
}
a:link,
a:visited,
th a:visited {
color: #0a6682;
}
a:hover,
a:focus,
a:visited:hover {
color: #1696bd;
}
#archnavbarlogo {
width: 120px !important;
background-size: contain !important;
}
#archnavbar#archnavbar {
border-bottom: 5px #0a6682 solid !important;
}
th,
td {
white-space: initial;
}
table.results.results {
border-collapse: collapse;
}
.results.results td,
.results.results th {
text-align: left;
overflow-x: auto;
overflow-wrap: anywhere;
padding: 8px;
}
.results th {
white-space: nowrap;
}
input,
select {
vertical-align: middle;
border-radius: 4px;
border: 1px solid #858585;
padding: .25em;
max-width: 85vw;
max-width: calc(92vw - 16px);
}
#pkglist-results-form {
overflow-x: auto;
}
tr :nth-child(7) {
display: none;
}
@media screen and (max-width: 750px) {
tr :nth-child(5) {
display: none;
}
}
@media screen and (max-width: 700px) {
tr :nth-child(6) {
display: none;
}
div#archnavbarlogo {
float: none !important;
}
#archnavbarlist {
text-align: center !important;
}
}
@media screen and (max-width: 520px) {
tr :nth-child(4) {
display: none;
}
#pkglist-results .pkglist-nav {
float: none;
margin-top: initial;
text-align: right;
}
#pkgdetails #detailslinks {
float: none;
}
#pkgdetails #pkgdeps,
#pkgdetails #pkgreqs {
float: none;
width: initial;
}
}
@media not all and (prefers-color-scheme: light) {
html body {
background: #1a1a1a;
color: #d9d9d9;
}
a:link,
a:visited,
th a:visited {
color: #53bffc;
}
a:hover,
a:focus,
a:visited:hover {
color: #92D7FC;
}
#pkgdetails #pkginfo .recent {
color: #B39DDB;
}
div.box.box {
background-color: #2a2a2a;
border: 1px solid #858585;
}
table th.tablesorter-header {
background-image: url(data:image/gif;base64,R0lGODlhFQAJAPABAOTu/wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAgABACwAAAAAFQAJAAACF4yPgMsJ2mJ4VDKKrd4GVz5lYPeMiVUAADs=);
}
table thead th.tablesorter-headerAsc {
background-color: #173f59;
background-image: url(data:image/gif;base64,R0lGODlhFQAEAPABAOTu/wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAgABACwAAAAAFQAEAAACDYyPAcmtsJyDVDKKWQEAOw==);
}
table thead th.tablesorter-headerDesc {
background-color: #173f59;
background-image: url(data:image/gif;base64,R0lGODlhFQAEAPABAOTu/wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAgABACwAAAAAFQAEAAACDYwfoAvoz9qbZ9FrJC0AOw==);
}
code {
background: #334450;
}
.results.results td,
.results.results th {
border: 1px solid #858585;
}
.results.results tr:nth-child(2n+1) {
background-color: #1a1a1a;
}
.results.results tr:nth-child(even) {
background-color: #111;
}
.results th, #pkgsearch {
color: #fff;
background-color: #0f3147;
border: 1px solid #0A6682;
}
#pkglist-results .results tr:hover {
background: #0d0d0d;
}
#pkgdetails #detailslinks>div {
background-color: rgba(255, 255, 255, 0.1);
}
input,
select {
background: #1a1a1a;
color: #bbb;
}
select option:checked {
background: linear-gradient(#0A6682, #0A6682);
background-color: #0A6682;
color: #fff;
}
#pkgfilelist li.d {
color: #92929a;
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

View File

@@ -4,8 +4,10 @@
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="theme-color" content="#08C" /> <meta name="theme-color" content="#08C" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}Arch Linux{% endblock %}</title> <title>{% block title %}Arch Linux{% endblock %}</title>
<link rel="stylesheet" type="text/css" href="{% static "archweb.css" %}" media="screen" /> <link rel="stylesheet" type="text/css" href="{% static "archweb.css" %}" media="screen" />
<link rel="stylesheet" type="text/css" href="{% static "artixweb.css" %}" media="screen" />
<link rel="icon" type="image/png" href="{% static "favicon.png" %}" /> <link rel="icon" type="image/png" href="{% static "favicon.png" %}" />
<link rel="shortcut icon" type="image/png" href="{% static "favicon.png" %}" /> <link rel="shortcut icon" type="image/png" href="{% static "favicon.png" %}" />
<link rel="apple-touch-icon" href="{% static "logos/apple-touch-icon-57x57.png" %}" /> <link rel="apple-touch-icon" href="{% static "logos/apple-touch-icon-57x57.png" %}" />
@@ -20,14 +22,16 @@
<div id="archnavbarlogo"><h1><a href="/" title="Return to the main page">Arch Linux</a></h1></div> <div id="archnavbarlogo"><h1><a href="/" title="Return to the main page">Arch Linux</a></h1></div>
<div id="archnavbarmenu"> <div id="archnavbarmenu">
<ul id="archnavbarlist"> <ul id="archnavbarlist">
<li id="anb-home"><a href="/" title="Arch news, packages, projects and more">Home</a></li> <li id="anb-home"><a href="https://artixlinux.org/" title="Artix Linux home">Home</a></li>
<li id="anb-packages"><a href="/packages/" title="Arch Package Database">Packages</a></li> <li id="anb-packages"><a href="/packages/" title="Arch Package Database">Packages</a></li>
<li id="anb-forums"><a href="https://bbs.archlinux.org/" title="Community forums">Forums</a></li> <li id="anb-forums"><a href="https://forum.artixlinux.org/" title="Community forums">Forums</a></li>
<li id="anb-wiki"><a href="https://wiki.archlinux.org/" title="Community documentation">Wiki</a></li> <li id="anb-wiki"><a href="https://wiki.artixlinux.org/" title="Community documentation">Wiki</a></li>
<li id="anb-gitlab"><a href="https://gitlab.archlinux.org/archlinux" title="GitLab">GitLab</a></li> <li id="anb-gitlab"><a href="https://gitea.artixlinux.org/explore/repos" title="Artix Sources">Sources</a></li>
<!--
<li id="anb-security"><a href="https://security.archlinux.org/" title="Arch Linux Security Tracker">Security</a></li> <li id="anb-security"><a href="https://security.archlinux.org/" title="Arch Linux Security Tracker">Security</a></li>
-->
<li id="anb-aur"><a href="https://aur.archlinux.org/" title="Arch Linux User Repository">AUR</a></li> <li id="anb-aur"><a href="https://aur.archlinux.org/" title="Arch Linux User Repository">AUR</a></li>
<li id="anb-download"><a href="{% url 'page-download' as pdl %}{{ pdl }}" title="Get Arch Linux">Download</a></li> <li id="anb-download"><a href="https://artixlinux.org/download.php" title="Get Arch Linux">Download</a></li>
</ul> </ul>
</div> </div>
</div> </div>
@@ -81,17 +85,12 @@
</div> </div>
{% endblock %} {% endblock %}
<div id="footer"> <div id="footer">
<p>Copyright © 2002-{% now "Y" %} <a href="mailto:jvinet@zeroflux.org" <p>Copyright © 2017-{% now "Y" %} Artix Linux</p>
<p>Website software and layout is derivative of archweb, Copyright © 2002-{% now "Y" %} <a href="mailto:jvinet@zeroflux.org"
title="Contact Judd Vinet">Judd Vinet</a>, <a href="mailto:aaron@archlinux.org" title="Contact Judd Vinet">Judd Vinet</a>, <a href="mailto:aaron@archlinux.org"
title="Contact Aaron Griffin">Aaron Griffin</a> and title="Contact Aaron Griffin">Aaron Griffin</a> and
<a href="mailto:anthraxx@archlinux.org" title="Contact Levente Polyák">Levente Polyák</a>.</p> <a href="mailto:anthraxx@archlinux.org" title="Contact Levente Polyák">Levente Polyák</a>.</p>
<p>The Arch Linux name and logo are recognized
<a href="https://terms.archlinux.org/docs/trademark-policy/"
title="Arch Linux Trademark Policy">trademarks</a>. Some rights reserved.</p>
<p>The registered trademark Linux® is used pursuant to a sublicense from LMI,
the exclusive licensee of Linus Torvalds, owner of the mark on a world-wide basis.</p>
</div> </div>
</div> </div>
<script type="application/ld+json"> <script type="application/ld+json">

View File

@@ -16,7 +16,7 @@
<th>Multilib Version</th> <th>Multilib Version</th>
<th>x86_64 Version</th> <th>x86_64 Version</th>
<th>x86_64 Name</th> <th>x86_64 Name</th>
<th>x864_ Repo</th> <th>x86_64 Repo</th>
<th>Multilib Last Updated</th> <th>Multilib Last Updated</th>
<th>x86_64 Last Updated</th> <th>x86_64 Last Updated</th>
</tr> </tr>

View File

@@ -1,9 +1,9 @@
{% load static %}<?xml version="1.0" encoding="UTF-8"?> {% load static %}<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"> <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
<ShortName>Arch Packages</ShortName> <ShortName>Artix Packages</ShortName>
<LongName>Arch Linux Package Repository Search</LongName> <LongName>Artix Linux Package Repository Search</LongName>
<Description>Search the Arch Linux package repositories by keyword in package names and descriptions.</Description> <Description>Search the Artix Linux package repositories by keyword in package names and descriptions.</Description>
<Tags>linux archlinux package software</Tags> <Tags>linux artixlinux package software</Tags>
<Image height="16" width="16" type="image/png">{{ domain }}{% static "favicon.png" %}</Image> <Image height="16" width="16" type="image/png">{{ domain }}{% static "favicon.png" %}</Image>
<Image height="64" width="64" type="image/png">{{ domain }}{% static "logos/icon-transparent-64x64.png" %}</Image> <Image height="64" width="64" type="image/png">{{ domain }}{% static "logos/icon-transparent-64x64.png" %}</Image>
<Language>en-us</Language> <Language>en-us</Language>

View File

@@ -11,6 +11,7 @@
<a href="{% scm_link pkg 'tree' %}" title="View source files for {{ pkg.pkgname }}">Source Files</a> / <a href="{% scm_link pkg 'tree' %}" title="View source files for {{ pkg.pkgname }}">Source Files</a> /
<a href="{% scm_link pkg 'commits' %}" title="View changes for {{ pkg.pkgname }}">View Changes</a> <a href="{% scm_link pkg 'commits' %}" title="View changes for {{ pkg.pkgname }}">View Changes</a>
</li> </li>
{% comment %}
<li> <li>
<a href="{% bugs_list pkg %}" title="View existing bug tickets for {{ pkg.pkgname }}">Bug Reports</a> / <a href="{% bugs_list pkg %}" title="View existing bug tickets for {{ pkg.pkgname }}">Bug Reports</a> /
<a href="{% bug_report pkg %}" title="Report new bug for {{ pkg.pkgname }}">Add New Bug</a> <a href="{% bug_report pkg %}" title="Report new bug for {{ pkg.pkgname }}">Add New Bug</a>
@@ -20,6 +21,8 @@
<a href="{% man_link pkg %}" title="List manpages in {{ pkg.pkgname }}">Manual Pages</a> <a href="{% man_link pkg %}" title="List manpages in {{ pkg.pkgname }}">Manual Pages</a>
</li> </li>
<li><a href="{% sec_link pkg %}" title="View security issues for {{ pkg.pkgname }}">Security Issues</a></li> <li><a href="{% sec_link pkg %}" title="View security issues for {{ pkg.pkgname }}">Security Issues</a></li>
{% endcomment %}
<li><a href="{% upstream_link pkg %}" title="View {{ pkg.pkgname }} in Arch's repos">View Upstream</a></li>
{% if user.is_authenticated and notreproducible %}<tr> {% if user.is_authenticated and notreproducible %}<tr>
<li> <li>
<a href="{% rebuilderd_buildlog_link rbstatus %}" title="View build log for {{ pkg.pkgname }}">Build log</a> / <a href="{% rebuilderd_buildlog_link rbstatus %}" title="View build log for {{ pkg.pkgname }}">Build log</a> /
@@ -41,11 +44,13 @@
{% endif %} {% endif %}
{% endif %} {% endif %}
{% else %} {% else %}
{% comment %}
<li><a href="flag/" title="Flag {{ pkg.pkgname }} as out-of-date">Flag Package Out-of-Date</a> <li><a href="flag/" title="Flag {{ pkg.pkgname }} as out-of-date">Flag Package Out-of-Date</a>
<a href="/packages/flaghelp/" <a href="/packages/flaghelp/"
title="Get help on package flagging" title="Get help on package flagging"
target="_blank" target="_blank"
>(?)</a></li> >(?)</a></li>
{% endcomment %}
{% endif %} {% endif %}
<li><a href="download/" rel="nofollow" title="Download {{ pkg.pkgname }} from mirror">Download From Mirror</a></li> <li><a href="download/" rel="nofollow" title="Download {{ pkg.pkgname }} from mirror">Download From Mirror</a></li>
</ul> </ul>
@@ -93,8 +98,8 @@
title="Browse packages for {{ pkg.arch.name }} architecture">{{ pkg.arch.name }}</a></td> title="Browse packages for {{ pkg.arch.name }} architecture">{{ pkg.arch.name }}</a></td>
</tr><tr> </tr><tr>
<th>Repository:</th> <th>Repository:</th>
<td><a href="/packages/?repo={{ pkg.repo.name|capfirst }}" <td><a href="/packages/?repo={{ pkg.repo.name }}"
title="Browse the {{ pkg.repo.name|capfirst }} repository">{{ pkg.repo.name|capfirst }}</a></td> title="Browse the {{ pkg.repo.name }} repository">{{ pkg.repo.name }}</a></td>
</tr> </tr>
{% if pkg.pkgname == pkg.pkgbase %} {% if pkg.pkgname == pkg.pkgbase %}
{% with splits=pkg.split_packages %}{% if splits %} {% with splits=pkg.split_packages %}{% if splits %}
@@ -118,7 +123,7 @@
<th>Description:</th> <th>Description:</th>
<td class="wrap" itemprop="description">{{ pkg.pkgdesc|default:"" }}</td> <td class="wrap" itemprop="description">{{ pkg.pkgdesc|default:"" }}</td>
</tr><tr> </tr><tr>
<th>Upstream URL:</th> <th>Homepage:</th>
<td>{% if pkg.url %}<a itemprop="url" href="{{ pkg.url }}" <td>{% if pkg.url %}<a itemprop="url" href="{{ pkg.url }}"
title="Visit the website for {{ pkg.pkgname }}">{{ pkg.url|url_unquote }}</a>{% endif %}</td> title="Visit the website for {{ pkg.pkgname }}">{{ pkg.url|url_unquote }}</a>{% endif %}</td>
</tr><tr> </tr><tr>
@@ -159,6 +164,7 @@
<span class="related">{% details_link conflict %}{% if not forloop.last %}, {% endif %}</span>{% endfor %}</td> <span class="related">{% details_link conflict %}{% if not forloop.last %}, {% endif %}</span>{% endfor %}</td>
</tr> </tr>
{% endif %}{% endwith %} {% endif %}{% endwith %}
{% if pkg.maintainers %}
<tr> <tr>
<th>Maintainers:</th> <th>Maintainers:</th>
{% with maints=pkg.maintainers %} {% with maints=pkg.maintainers %}
@@ -168,7 +174,7 @@
{% endfor %}{% else %}Orphan{% endif %} {% endfor %}{% else %}Orphan{% endif %}
</td> </td>
{% endwith %} {% endwith %}
</tr><tr> </tr>{% endif %}<tr>
<th>Package Size:</th> <th>Package Size:</th>
<td>{{ pkg.compressed_size|filesizeformat }}</td> <td>{{ pkg.compressed_size|filesizeformat }}</td>
</tr><tr> </tr><tr>

View File

@@ -27,12 +27,14 @@
<div>{{ search_form.q.errors }} <div>{{ search_form.q.errors }}
<label for="id_q" title="Enter keywords as desired (provides are also supported e.g. 'java-environment=7')"> <label for="id_q" title="Enter keywords as desired (provides are also supported e.g. 'java-environment=7')">
Keywords</label>{{ search_form.q }}</div> Keywords</label>{{ search_form.q }}</div>
{% comment %}
<div>{{ search_form.maintainer.errors }} <div>{{ search_form.maintainer.errors }}
<label for="id_maintainer" title="Limit results to a specific maintainer"> <label for="id_maintainer" title="Limit results to a specific maintainer">
Maintainer</label>{{ search_form.maintainer}}</div> Maintainer</label>{{ search_form.maintainer}}</div>
<div>{{ search_form.flagged.errors }} <div>{{ search_form.flagged.errors }}
<label for="id_flagged" title="Limit results based on out-of-date status"> <label for="id_flagged" title="Limit results based on out-of-date status">
Flagged</label>{{ search_form.flagged }}</div> Flagged</label>{{ search_form.flagged }}</div>
{% endcomment %}
<div><label>&nbsp;</label><input title="Search for packages using this criteria" <div><label>&nbsp;</label><input title="Search for packages using this criteria"
type="submit" value="Search" /></div> type="submit" value="Search" /></div>
</fieldset> </fieldset>
@@ -60,7 +62,7 @@
{% for pkg in exact_matches %} {% for pkg in exact_matches %}
<tr> <tr>
<td>{{ pkg.arch.name }}</td> <td>{{ pkg.arch.name }}</td>
<td>{{ pkg.repo.name|capfirst }}</td> <td>{{ pkg.repo.name }}</td>
<td>{% pkg_details_link pkg %}</td> <td>{% pkg_details_link pkg %}</td>
{% if pkg.flag_date %} {% if pkg.flag_date %}
<td><span class="flagged" title="Flagged out-of-date">{{ pkg.full_version }}</span></td> <td><span class="flagged" title="Flagged out-of-date">{{ pkg.full_version }}</span></td>
@@ -107,7 +109,7 @@
<td><input type="checkbox" name="pkgid" value="{{ pkg.id }}" /></td> <td><input type="checkbox" name="pkgid" value="{{ pkg.id }}" /></td>
{% endif %} {% endif %}
<td>{{ pkg.arch.name }}</td> <td>{{ pkg.arch.name }}</td>
<td>{{ pkg.repo.name|capfirst }}</td> <td>{{ pkg.repo.name }}</td>
<td>{% pkg_details_link pkg %}</td> <td>{% pkg_details_link pkg %}</td>
{% if pkg.flag_date %} {% if pkg.flag_date %}
<td><span class="flagged" title="Flagged out-of-date">{{ pkg.full_version }}</span></td> <td><span class="flagged" title="Flagged out-of-date">{{ pkg.full_version }}</span></td>

View File

@@ -26,6 +26,8 @@
<div><label for="id_repo_{{ repo_name|lower }}" title="Target Repository {{ repo_name }}">[{{ repo_name|lower }}]</label> <div><label for="id_repo_{{ repo_name|lower }}" title="Target Repository {{ repo_name }}">[{{ repo_name|lower }}]</label>
<input type="checkbox" name="repo_{{ repo_name|lower }}" id="id_repo_{{ repo_name|lower }}" class="repo_filter" value="{{ repo_name|lower }}" checked="checked"/></div> <input type="checkbox" name="repo_{{ repo_name|lower }}" id="id_repo_{{ repo_name|lower }}" class="repo_filter" value="{{ repo_name|lower }}" checked="checked"/></div>
{% endfor %} {% endfor %}
<div><label for="id_mine_only" title="Show only packages packaged by me">Only Mine</label>
<input type="checkbox" name="mine_only" id="id_mine_only" value="mine_only"/></div>
<div><label for="id_pending" title="Packages with not enough signoffs">Only Pending Approval</label> <div><label for="id_pending" title="Packages with not enough signoffs">Only Pending Approval</label>
<input type="checkbox" name="pending" id="id_pending" value="pending"/></div> <input type="checkbox" name="pending" id="id_pending" value="pending"/></div>
<div><label>&nbsp;</label><input title="Reset search criteria" type="button" id="criteria_reset" value="Reset"/></div> <div><label>&nbsp;</label><input title="Reset search criteria" type="button" id="criteria_reset" value="Reset"/></div>
@@ -50,7 +52,8 @@
</tr> </tr>
</thead> </thead>
<tbody id="tbody_signoffs"> <tbody id="tbody_signoffs">
{% for group in signoff_groups %}<tr class="{{ group.arch.name }} {{ group.target_repo|lower }}"> {% for group in signoff_groups %}
<tr class="{% if user == group.packager %} mine{% endif %} {{ group.arch.name }} {{ group.target_repo|lower }}">
<td>{% pkg_details_link group.package %} {{ group.version }}</td> <td>{% pkg_details_link group.package %} {{ group.version }}</td>
<td>{{ group.arch.name }}</td> <td>{{ group.arch.name }}</td>
<td>{{ group.target_repo }}</td> <td>{{ group.target_repo }}</td>

View File

@@ -49,6 +49,11 @@
<td>{% if prof.website %}<a itemprop="url" href="{{ prof.website }}" <td>{% if prof.website %}<a itemprop="url" href="{{ prof.website }}"
title="Visit the website for {{ dev.get_full_name }}"> title="Visit the website for {{ dev.get_full_name }}">
{{ prof.website }}</a>{% endif %}</td> {{ prof.website }}</a>{% endif %}</td>
</tr><tr>
<th>Social:</th>
<td>{% if prof.social %}<a itemprop="url" href="{{ prof.social }}"
title="Visit social account for {{ dev.get_full_name }}" rel="me">
{{ prof.social }}</a>{% endif %}</td>
</tr><tr> </tr><tr>
<th>Occupation:</th> <th>Occupation:</th>
<td>{{ prof.occupation }}</td> <td>{{ prof.occupation }}</td>

View File

@@ -53,35 +53,6 @@
<img src="{% static "nitrokey_logo.png" %}" <img src="{% static "nitrokey_logo.png" %}"
class="sponsor-btn-nitrokey" title="" alt="Nitrokey logo"/></a> class="sponsor-btn-nitrokey" title="" alt="Nitrokey logo"/></a>
<p>We would also like to thank <a href="https://www.privateinternetaccess.com/"
title="Private Internet Access">Private Internet Access</a> for sponsoring
dedicated servers across the globe. Private Internet Access is the leading
VPN Service provider specializing in secure, encrypted VPN tunnels which
create several layers of privacy and security providing users safety on the
internet.</p>
<a href="https://www.privateinternetaccess.com/" title="Private Internet Access">
<img src="{% static "pia_logo.png" %}"
class="sponsor-btn-pia" title="" alt="Private Internet Access logo"/></a>
<p>We would also like to thank <a href="https://www.shells.com/"
title="Shells">Shells.com</a> for their monetary donation.
Shells provides you with a 1-click, powerful virtual desktop environment,
driven by a cloud computer, without leaving your browser! It's your
personal workspace in the cloud.</p>
<a href="https://www.shells.com/" title="Shells">
<img src="{% static "shells_logo.png" %}"
title="" alt="Shells logo"/></a>
<p>We would also like to thank <a href="https://uptimerobot.com/"
title="UptimeRobot">UptimeRobot</a> for providing their monitoring service to us.
UptimeRobot is a leading uptime monitoring service.</p>
<a href="https://uptimerobot.com/" title="UptimeRobot">
<img src="{% static "uptimerobot_logo.png" %}"
title="" alt="UptimeRobot logo"/></a>
<h3>Past donors</h3> <h3>Past donors</h3>
<p><a href="http://www.dotcom-monitor.com/" title="Dotcom-Monitor">Dotcom-Monitor</a> &amp; <a href="https://www.loadview-testing.com/" title="LoadView">LoadView</a></p> <p><a href="http://www.dotcom-monitor.com/" title="Dotcom-Monitor">Dotcom-Monitor</a> &amp; <a href="https://www.loadview-testing.com/" title="LoadView">LoadView</a></p>

View File

@@ -77,13 +77,6 @@
title="Arch Linux Netboot">Arch Linux Netboot</a></li> title="Arch Linux Netboot">Arch Linux Netboot</a></li>
</ul> </ul>
<h3>Vagrant images</h3>
<p>Vagrant images for libvirt and virtualbox are available on the <a href="https://app.vagrantup.com/archlinux/boxes/archlinux">Vagrant Cloud</a>. You can bootstrap the image with the following commands:</p>
<code>vagrant init archlinux/archlinux</code>
<br/>
<code>vagrant up</code>
<h3>Docker image</h3> <h3>Docker image</h3>
<p>The official Docker image is available on <a href="https://hub.docker.com/_/archlinux/">Docker Hub</a>. You can run the image with the following command:</p> <p>The official Docker image is available on <a href="https://hub.docker.com/_/archlinux/">Docker Hub</a>. You can run the image with the following command:</p>
@@ -148,7 +141,7 @@
Alternatively, using GnuPG, download the signing key from WKD: Alternatively, using GnuPG, download the signing key from WKD:
<pre><code>$ gpg --auto-key-locate clear,wkd -v --locate-external-key {{ release.wkd_email }}</code></pre> <pre><code>$ gpg --auto-key-locate clear,wkd -v --locate-external-key {{ release.wkd_email }}</code></pre>
Verify the signature: Verify the signature:
<pre><code>$ gpg --keyserver-options auto-key-retrieve --verify archlinux-{{ release.version }}-x86_64.iso.sig archlinux-{{ release.version }}-x86_64.iso</code></pre> <pre><code>$ gpg --verify archlinux-{{ release.version }}-x86_64.iso.sig archlinux-{{ release.version }}-x86_64.iso</code></pre>
{% cache 600 download-mirrors %} {% cache 600 download-mirrors %}
<div id="download-mirrors"> <div id="download-mirrors">

View File

@@ -133,8 +133,6 @@
<h4>Support</h4> <h4>Support</h4>
<ul> <ul>
<li><a href="{% url 'page-donate' %}" title="Help support Arch Linux">Donate</a></li> <li><a href="{% url 'page-donate' %}" title="Help support Arch Linux">Donate</a></li>
<li><a href="https://www.unixstickers.com/tag/archlinux" title="Arch
Linux stickers, t-shirts, hoodies, mugs, posters and pins">Products via Unixstickers</a></li>
<li><a href="https://www.freewear.org/?page=list_items&amp;org=Archlinux" <li><a href="https://www.freewear.org/?page=list_items&amp;org=Archlinux"
title="T-shirts">T-shirts via Freewear</a></li> title="T-shirts">T-shirts via Freewear</a></li>
<li><a href="https://www.hellotux.com/arch" <li><a href="https://www.hellotux.com/arch"
@@ -155,6 +153,7 @@
<ul> <ul>
<li><a href="https://wiki.archlinux.org/title/Getting_involved" <li><a href="https://wiki.archlinux.org/title/Getting_involved"
title="Getting involved">Getting involved</a></li> title="Getting involved">Getting involved</a></li>
<li><a href="https://devblog.archlinux.page" title="Dev Blog">Dev Blog</a></li>
<li><a href="https://gitlab.archlinux.org/archlinux/" <li><a href="https://gitlab.archlinux.org/archlinux/"
title="Official Arch projects (git)">Projects in Git</a></li> title="Official Arch projects (git)">Projects in Git</a></li>
<li><a href="https://wiki.archlinux.org/title/DeveloperWiki" <li><a href="https://wiki.archlinux.org/title/DeveloperWiki"
@@ -202,20 +201,10 @@
title="" alt="Hetzner logo"/> title="" alt="Hetzner logo"/>
</a> </a>
<a href="https://www.privateinternetaccess.com/" title="Private Internet Access">
<img src="{% static "pia_logo.png" %}"
title="" alt="Private Internet Access logo"/>
</a>
<a href="https://icons8.com/" title="Icons8"> <a href="https://icons8.com/" title="Icons8">
<img src="{% static "icons8_logo.png" %}" <img src="{% static "icons8_logo.png" %}"
title="" alt="Icons8 logo"/> title="" alt="Icons8 logo"/>
</a> </a>
<a href="https://www.shells.com" title="Shells.com">
<img src="{% static "shells_logo.png" %}"
title="" alt="Shells logo"/>
</a>
</div> </div>
{% endcache %} {% endcache %}
{% endblock %} {% endblock %}

View File

@@ -2,6 +2,8 @@
{% load static %} {% load static %}
{% load package_extras %} {% load package_extras %}
{% load todolists %} {% load todolists %}
{% load tz %}
{% load humanize %}
{% block title %}Arch Linux - Todo: {{ list.name }}{% endblock %} {% block title %}Arch Linux - Todo: {{ list.name }}{% endblock %}
@@ -103,7 +105,15 @@
<span class="{{ pkg.status_css_class }}">{{ pkg.get_status_display }}</span> <span class="{{ pkg.status_css_class }}">{{ pkg.get_status_display }}</span>
{% endif %} {% endif %}
</td> </td>
<td>{{ pkg.user|default:"" }}</td> <td>
{% if pkg.user %}
{% if user.is_authenticated %}
{{ pkg.user }} <span title="{{ pkg.last_modified|timezone:user.userprofile.time_zone|date:"Y-m-d H:i T" }}">({{ pkg.last_modified|naturaltime }})</span>
{% else %}
{{ pkg.user }} <span title="{{ pkg.last_modified|date:"Y-m-d H:i T" }}">({{ pkg.last_modified|naturaltime }})</span>
{% endif %}
{% endif %}
</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>

View File

@@ -13,8 +13,9 @@ def todopkg_details_link(todopkg):
pkg = todopkg.pkg pkg = todopkg.pkg
if not pkg: if not pkg:
return todopkg.pkgname return todopkg.pkgname
link = '<a href="%s" title="View package details for %s">%s</a>' link = '<a href="{url}" title="View package details for {pkgname}">{pkgname}</a>'
url = pkg_absolute_url(todopkg.repo, todopkg.arch, pkg.pkgname) url = pkg_absolute_url(todopkg.repo, todopkg.arch, pkg.pkgname)
return format_html(link % (url, pkg.pkgname, pkg.pkgname)) return format_html(link, url=url, pkgname=pkg.pkgname)
# vim: set ts=4 sw=4 et: # vim: set ts=4 sw=4 et: