README.org
103 lines · 3881 bytes
1#+title: skunkyart
2
3* fork
4fork of SkunkyArt (https://git.macaw.me/skunky/SkunkyArt). upstream hasn't
5updated in over a year, has open bugs, and its listed instances are dead links.
6this fork keeps it maintained.
7
8* what
9skunkyart. alternative frontend for deviantart. works with no javascript.
10one instance, one config file, no database.
11
12instances: [[file:INSTANCES.md][INSTANCES.md]]
13
14pages:
15
16- ~/~ search box, links to daily deviations and about
17- ~/dd~ daily deviations; ~?atom=true~ for the feed
18- ~/search?q=<q>&type=all|tag|r~ search art, tags, or groups
19- ~/post/<author>/<name-id>~ one deviation, with a link to its comments
20- ~/group_user?q=<name>&type=about|gallery|favourites~ a user or group;
21 ~&atom=true~ on a gallery for its feed
22- ~/api/...~ json, documented in [[file:API.md][API.md]]
23
24[[file:REDIRECTS.md][REDIRECTS.md]] maps deviantart.com urls onto these, for browser redirector
25extensions such as libredirect.
26
27deviantart blocks egress ips that ask too often, so the instance keeps its
28upstream traffic down: api responses are cached in memory and coalesced, media
29and avatars are cached on disk, comments load on request, pages carry
30cache-control headers, crawlers get a robots.txt, and each client has a
31request budget. all of it is on by default and tunable in [[file:SETUP.md][SETUP.md]].
32
33* build
34build with the embed tag to embed presets in the binary. skip the tag if you'll
35modify templates. add ~-ldflags "-w -s"~ (~gccgo: gccgoflags~) to shrink the output:
36
37#+begin_src sh
38go build -tags embed -ldflags "-w -s"
39#+end_src
40
41that build reports its version as dev. stamp one in with ~-X
42main.version=<version>~, as the release workflow does from the git tag. or let
43the makefile do both:
44
45#+begin_src sh
46make build # embed tag, version from git describe
47make test
48make lint
49make dist # tarballs for linux, darwin and freebsd under dist/
50#+end_src
51
52release tags also get those tarballs attached on the github mirror's release
53page.
54
55* run
56without docker: put the binary (and ~static/~, unless built with the embed
57tag) in a directory with a ~config.json~, then
58
59#+begin_src sh
60./skunkyart -c config.json
61#+end_src
62
63~config.json~ is optional; without it the built-in defaults listen on
64127.0.0.1:3003 with the caches on. service files for systemd and openrc are in
65[[file:services/][services/]]. put a reverse proxy with tls in front; SETUP.md has the nginx
66stanza.
67
68* where things live
69the repository, issues and merge requests are on gitbay
70(https://gitbay.org/krz/skunky-art). github.com/krazywarez/skunky-art is a
71push mirror that exists to build the container image.
72
73issues opened on github may not be noticed immediately - create your issues on gitbay or reach
74out if your issue hasn't been acknowledged on github.
75
76* docker
77multi-arch images (~linux/amd64~, ~linux/arm64~) publish to ghcr on every release
78tag, built by the github mirror's workflow:
79
80#+begin_src sh
81docker pull ghcr.io/krazywarez/skunky-art:latest
82#+end_src
83
84each release is tagged 1.3.3, 1.3, 1, and latest. pin an exact version for
85reproducible upgrades. [[file:compose.example.yaml][compose.example.yaml]] uses the image;
86[[file:compose.vpn_example.yml][compose.vpn_example.yml]] adds an optional vpn egress sidecar.
87
88* config
89sample config in [[file:config.example.json][config.example.json]]. custom config with ~--config~. directive
90details in [[file:SETUP.md][SETUP.md]].
91
92* develop
93#+begin_src sh
94go test ./... -race
95go run github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.13.2 run ./...
96#+end_src
97
98ci runs both on every push. the roadmap is [[file:ROADMAP.md][ROADMAP.md]].
99
100* instances
101instances are checked daily by ci (~scripts/check-instances.py~); a dead one
102turns the build red. add yours by merge request to [[file:instances.json][instances.json]] and [[file:INSTANCES.md][INSTANCES.md]] (or use
103~--add-instance~ to write both), or open an issue.