49 Commits

Author SHA1 Message Date
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
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
37 changed files with 989 additions and 46 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:
build:
runs-on: ubuntu-latest
runs-on: ubuntu-latest-full
steps:
- uses: actions/checkout@v3
@@ -28,4 +28,4 @@ jobs:
make collectstatic
- name: Run tests
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):
super(PGPKeyField, self).__init__(*args, **kwargs)
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):
if value == '' or value is None:

45
docker-compose.yml Normal file
View File

@@ -0,0 +1,45 @@
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 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
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

@@ -31,7 +31,7 @@ def scm_link(package, operation: str):
if operation == 'tree':
return f'{settings.GITLAB_PACKAGES_REPO}/{pkgbase}'
elif operation == 'commits':
return f'{settings.GITLAB_PACKAGES_REPO}/{pkgbase}/-/commits/main'
return f'{settings.GITLAB_PACKAGES_REPO}/{pkgbase}/graph'
@register.simple_tag
@@ -67,6 +67,25 @@ def sec_link(package):
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
def rebuilderd_diffoscope_link(rbstatus):
url = "https://reproducible.archlinux.org/api/v0/builds/{}/diffoscope"

View File

@@ -179,6 +179,7 @@ def get_mirror_errors(cutoff=DEFAULT_CUTOFF, mirror_id=None, show_all=False):
@cache_function(295)
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
status data available, it is used to determine a good choice by looking at
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) {
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

@@ -255,7 +255,7 @@ def download(request, name, repo, arch, sig=False):
arch = pkg.arch.name
if pkg.arch.agnostic:
# 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}'
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
from datetime import datetime, timezone
from datetime import datetime
from operator import attrgetter
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
if user.userprofile.pgp_key)
not_expired = Q(expires__gt=datetime.now(timezone.utc)) | Q(expires__isnull=True)
not_expired = Q(expires__gt=datetime.utcnow()) | Q(expires__isnull=True)
master_keys = MasterKey.objects.select_related('owner', 'revoker',
'owner__userprofile', 'revoker__userprofile').filter(
revoked__isnull=True)
@@ -155,7 +155,7 @@ def keys_json(request):
'group': 'master'
} for key in master_keys)
not_expired = Q(expires__gt=datetime.now(timezone.utc)) | Q(expires__isnull=True)
not_expired = Q(expires__gt=datetime.utcnow()) | Q(expires__isnull=True)
signatures = PGPSignature.objects.filter(not_expired, revoked__isnull=True)
edge_list = [{ 'signee': sig.signee, 'signer': sig.signer }
for sig in signatures]

View File

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

View File

@@ -1,5 +1,5 @@
-e git+https://github.com/fredj/cssmin.git@master#egg=cssmin
Django==5.1.10
Django==5.1.9
IPy==1.1
Markdown==3.3.7
bencode.py==4.0.0
@@ -16,4 +16,5 @@ bleach==6.0.0
requests==2.32.4
xtarfile==0.2.1
zstandard==0.23.0
whitenoise==6.8.2
django-prometheus==2.3.1

View File

@@ -56,6 +56,7 @@ MIDDLEWARE = (
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.middleware.http.ConditionalGetMiddleware',
'csp.middleware.CSPMiddleware',
)

190
sitestatic/artixweb.css Normal file
View File

@@ -0,0 +1,190 @@
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==);
}
.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 {
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;
}
}

View File

@@ -4,8 +4,10 @@
<head>
<meta charset="utf-8" />
<meta name="theme-color" content="#08C" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<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 "artixweb.css" %}" media="screen" />
<link rel="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" %}" />
@@ -20,14 +22,16 @@
<div id="archnavbarlogo"><h1><a href="/" title="Return to the main page">Arch Linux</a></h1></div>
<div id="archnavbarmenu">
<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-forums"><a href="https://bbs.archlinux.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-gitlab"><a href="https://gitlab.archlinux.org/archlinux" title="GitLab">GitLab</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.artixlinux.org/" title="Community documentation">Wiki</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-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>
</div>
</div>
@@ -81,17 +85,12 @@
</div>
{% endblock %}
<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 Aaron Griffin">Aaron Griffin</a> and
<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>
<script type="application/ld+json">

View File

@@ -1,9 +1,9 @@
{% load static %}<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
<ShortName>Arch Packages</ShortName>
<LongName>Arch Linux Package Repository Search</LongName>
<Description>Search the Arch Linux package repositories by keyword in package names and descriptions.</Description>
<Tags>linux archlinux package software</Tags>
<ShortName>Artix Packages</ShortName>
<LongName>Artix Linux Package Repository Search</LongName>
<Description>Search the Artix Linux package repositories by keyword in package names and descriptions.</Description>
<Tags>linux artixlinux package software</Tags>
<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>
<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 'commits' %}" title="View changes for {{ pkg.pkgname }}">View Changes</a>
</li>
{% comment %}
<li>
<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>
@@ -20,6 +21,8 @@
<a href="{% man_link pkg %}" title="List manpages in {{ pkg.pkgname }}">Manual Pages</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>
<li>
<a href="{% rebuilderd_buildlog_link rbstatus %}" title="View build log for {{ pkg.pkgname }}">Build log</a> /
@@ -41,11 +44,13 @@
{% endif %}
{% endif %}
{% else %}
{% comment %}
<li><a href="flag/" title="Flag {{ pkg.pkgname }} as out-of-date">Flag Package Out-of-Date</a>
<a href="/packages/flaghelp/"
title="Get help on package flagging"
target="_blank"
>(?)</a></li>
{% endcomment %}
{% endif %}
<li><a href="download/" rel="nofollow" title="Download {{ pkg.pkgname }} from mirror">Download From Mirror</a></li>
</ul>
@@ -93,8 +98,8 @@
title="Browse packages for {{ pkg.arch.name }} architecture">{{ pkg.arch.name }}</a></td>
</tr><tr>
<th>Repository:</th>
<td><a href="/packages/?repo={{ pkg.repo.name|capfirst }}"
title="Browse the {{ pkg.repo.name|capfirst }} repository">{{ pkg.repo.name|capfirst }}</a></td>
<td><a href="/packages/?repo={{ pkg.repo.name }}"
title="Browse the {{ pkg.repo.name }} repository">{{ pkg.repo.name }}</a></td>
</tr>
{% if pkg.pkgname == pkg.pkgbase %}
{% with splits=pkg.split_packages %}{% if splits %}
@@ -118,7 +123,7 @@
<th>Description:</th>
<td class="wrap" itemprop="description">{{ pkg.pkgdesc|default:"" }}</td>
</tr><tr>
<th>Upstream URL:</th>
<th>Homepage:</th>
<td>{% if pkg.url %}<a itemprop="url" href="{{ pkg.url }}"
title="Visit the website for {{ pkg.pkgname }}">{{ pkg.url|url_unquote }}</a>{% endif %}</td>
</tr><tr>
@@ -159,6 +164,7 @@
<span class="related">{% details_link conflict %}{% if not forloop.last %}, {% endif %}</span>{% endfor %}</td>
</tr>
{% endif %}{% endwith %}
{% if pkg.maintainers %}
<tr>
<th>Maintainers:</th>
{% with maints=pkg.maintainers %}
@@ -168,7 +174,7 @@
{% endfor %}{% else %}Orphan{% endif %}
</td>
{% endwith %}
</tr><tr>
</tr>{% endif %}<tr>
<th>Package Size:</th>
<td>{{ pkg.compressed_size|filesizeformat }}</td>
</tr><tr>

View File

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

View File

@@ -26,8 +26,10 @@
<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>
{% endfor %}
{% if user.is_authenticated %}
<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>
{% endif %}
<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>
<div><label>&nbsp;</label><input title="Reset search criteria" type="button" id="criteria_reset" value="Reset"/></div>

View File

@@ -153,7 +153,6 @@
<ul>
<li><a href="https://wiki.archlinux.org/title/Getting_involved"
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/"
title="Official Arch projects (git)">Projects in Git</a></li>
<li><a href="https://wiki.archlinux.org/title/DeveloperWiki"

View File

@@ -2,8 +2,6 @@
{% load static %}
{% load package_extras %}
{% load todolists %}
{% load tz %}
{% load humanize %}
{% block title %}Arch Linux - Todo: {{ list.name }}{% endblock %}
@@ -105,15 +103,7 @@
<span class="{{ pkg.status_css_class }}">{{ pkg.get_status_display }}</span>
{% endif %}
</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>
<td>{{ pkg.user|default:"" }}</td>
</tr>
{% endfor %}
</tbody>