5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-05-19 12:20:48 +00:00

Merge branch 'rails' into issue-12919

This commit is contained in:
f 2023-09-21 12:26:31 -03:00
commit 62eb5ddaa2
No known key found for this signature in database
125 changed files with 441 additions and 94 deletions

View file

@ -20,6 +20,7 @@ pipeline:
branch:
- "rails"
- "panel.sutty.nl"
- "17.3.alpine.panel.sutty.nl"
event: "push"
path:
include:
@ -27,7 +28,7 @@ pipeline:
- ".dockerignore"
- ".woodpecker.yml"
assets:
image: "gitea.nulo.in/sutty/panel:${ALPINE_VERSION}-${RUBY_VERSION}.${RUBY_PATCH}"
image: "gitea.nulo.in/sutty/panel:3.14.10-2.7.8"
commands:
- "apk add python2 dotenv openssh-client brotli"
- "install -d -m 700 ~/.ssh/"
@ -51,6 +52,9 @@ pipeline:
- "git add public && git commit -m \"ci: assets [skip ci]\""
- "git pull upstream ${CI_COMMIT_BRANCH}"
- "git push upstream ${CI_COMMIT_BRANCH}"
environment:
- "RUBY_VERSION=${RUBY_VERSION}"
- "GEMS_SOURCE=https://14.3.alpine.gems.sutty.nl"
secrets:
- "SSH_KEY"
- "KNOWN_HOSTS"
@ -65,8 +69,15 @@ pipeline:
- "app/javascript/**/*"
- "package.json"
- "yarn.lock"
matrix:
ALPINE_VERSION: "3.14.10"
RUBY_VERSION: "2.7"
RUBY_PATCH: "8"
matrix:
include:
- ALPINE_VERSION: "3.17.3"
RUBY_VERSION: "3.1"
RUBY_PATCH: "4"
- ALPINE_VERSION: "3.14.10"
RUBY_VERSION: "2.7"
RUBY_PATCH: "8"

13
Gemfile
View file

@ -1,9 +1,8 @@
# frozen_string_literal: true
puts 'Usa haini.sh para generar un entorno de trabajo reproducible'
source 'https://gems.sutty.nl'
source ENV.fetch('GEMS_SOURCE', 'https://17.3.alpine.gems.sutty.nl')
ruby '~> 2.7'
ruby "~> #{ENV.fetch('RUBY_VERSION', '3.1')}"
gem 'dotenv-rails', require: 'dotenv/rails-now'
@ -55,7 +54,7 @@ gem 'httparty'
gem 'safe_yaml', require: false
gem 'jekyll', '~> 4.2.0'
gem 'jekyll-data'
gem 'jekyll-commonmark'
gem 'jekyll-commonmark', '~> 1.4.0'
gem 'jekyll-images'
gem 'jekyll-include-cache'
gem 'sutty-liquid', '>= 0.7.3'
@ -120,11 +119,11 @@ group :development do
gem 'brakeman'
gem 'haml-lint', require: false
gem 'letter_opener'
gem 'listen', '>= 3.0.5', '< 3.2'
gem 'listen'
gem 'rubocop-rails'
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
gem 'web-console', '>= 3.3.0'
gem 'spring-watcher-listen'
gem 'web-console'
end
group :test do

View file

@ -25,7 +25,7 @@ GIT
groupdate (>= 5.2)
GEM
remote: https://gems.sutty.nl/
remote: https://17.3.alpine.gems.sutty.nl/
specs:
actioncable (6.1.7.3)
actionpack (= 6.1.7.3)
@ -91,11 +91,9 @@ GEM
ast (2.4.2)
autoprefixer-rails (10.4.13.0)
execjs (~> 2)
bcrypt (3.1.18-x86_64-linux-musl)
bcrypt_pbkdf (1.1.0)
bcrypt (3.1.19-x86_64-linux-musl)
bcrypt_pbkdf (1.1.0-x86_64-linux-musl)
benchmark-ips (2.12.0)
bindex (0.8.1)
bindex (0.8.1-x86_64-linux-musl)
blazer (2.6.5)
activerecord (>= 5)
@ -119,8 +117,7 @@ GEM
climate_control (1.2.0)
coderay (1.1.3)
colorator (1.1.0)
commonmarker (0.23.9)
commonmarker (0.23.9-x86_64-linux-musl)
commonmarker (0.23.10-x86_64-linux-musl)
concurrent-ruby (1.2.2)
concurrent-ruby-ext (1.2.2-x86_64-linux-musl)
concurrent-ruby (= 1.2.2)
@ -131,7 +128,6 @@ GEM
activerecord (>= 5.a)
database_cleaner-core (~> 2.0.0)
database_cleaner-core (2.0.1)
date (3.3.3)
date (3.3.3-x86_64-linux-musl)
dead_end (4.0.0)
derailed_benchmarks (2.1.2)
@ -154,7 +150,7 @@ GEM
warden (~> 1.2.3)
devise-i18n (1.11.0)
devise (>= 4.9.0)
devise_invitable (2.0.7)
devise_invitable (2.0.8)
actionmailer (>= 5.0)
devise (>= 4.6)
distributed-press-api-client (0.2.4)
@ -196,14 +192,12 @@ GEM
dry-inflector (~> 1.0)
dry-logic (~> 1.4)
zeitwerk (~> 2.6)
ed25519 (1.3.0)
ed25519 (1.3.0-x86_64-linux-musl)
em-websocket (0.5.3)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0)
errbase (0.2.2)
erubi (1.12.0)
eventmachine (1.2.7)
eventmachine (1.2.7-x86_64-linux-musl)
exception_notification (4.5.0)
actionmailer (>= 5.2, < 8)
@ -214,11 +208,8 @@ GEM
factory_bot_rails (6.2.0)
factory_bot (~> 6.2.0)
railties (>= 5.0.0)
fast_blank (1.0.1)
fast_blank (1.0.1-x86_64-linux-musl)
fast_jsonparser (0.5.0)
fast_jsonparser (0.5.0-x86_64-linux-musl)
ffi (1.15.5)
ffi (1.15.5-x86_64-linux-musl)
flamegraph (0.9.5)
forwardable-extended (2.6.0)
@ -234,7 +225,7 @@ GEM
activerecord (>= 6.0, < 8)
ruby2ruby (~> 2.4)
ruby_parser (~> 3.10)
haml (6.1.1-x86_64-linux-musl)
haml (6.1.2-x86_64-linux-musl)
temple (>= 0.8.2)
thor
tilt
@ -246,10 +237,6 @@ GEM
rainbow
rubocop (>= 0.50.0)
sysexits (~> 1.1)
hamlit (3.0.3)
temple (>= 0.8.2)
thor
tilt
hamlit (3.0.3-x86_64-linux-musl)
temple (>= 0.8.2)
thor
@ -261,14 +248,12 @@ GEM
railties (>= 4.0.1)
heapy (0.2.0)
thor
hiredis (0.6.3)
hiredis (0.6.3-x86_64-linux-musl)
http_parser.rb (0.8.0)
http_parser.rb (0.8.0-x86_64-linux-musl)
httparty (0.21.0)
mini_mime (>= 1.0.0)
multi_xml (>= 0.5.2)
i18n (1.13.0)
i18n (1.14.1)
concurrent-ruby (~> 1.0)
icalendar (2.8.0)
ice_cube (~> 0.16)
@ -334,10 +319,9 @@ GEM
letter_opener (1.8.1)
launchy (>= 2.2, < 3)
liquid (4.0.4)
listen (3.1.5)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
ruby_dep (~> 1.2)
listen (3.8.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
loaf (0.10.0)
railties (>= 3.2)
lockbox (1.2.0)
@ -361,6 +345,7 @@ GEM
mini_histogram (0.3.1)
mini_magick (4.12.0)
mini_mime (1.1.2)
mini_portile2 (2.8.2)
minitest (5.18.0)
mobility (1.2.9)
i18n (>= 0.6.10, < 2)
@ -381,7 +366,8 @@ GEM
njalla-api-client (0.2.0)
dry-schema
httparty (~> 0.18)
nokogiri (1.15.1-x86_64-linux)
nokogiri (1.15.4-x86_64-linux-musl)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
orm_adapter (0.5.0)
pairing_heap (3.0.1)
@ -400,14 +386,13 @@ GEM
pry (0.14.2)
coderay (~> 1.1)
method_source (~> 1.0)
public_suffix (5.0.1)
puma (6.2.2-x86_64-linux-musl)
public_suffix (5.0.3)
puma (6.3.1-x86_64-linux-musl)
nio4r (~> 2.0)
pundit (2.3.0)
activesupport (>= 3.0.0)
que (2.2.1)
racc (1.6.2)
racc (1.6.2-x86_64-linux-musl)
racc (1.7.1-x86_64-linux-musl)
rack (2.2.7)
rack-cors (2.0.1)
rack (>= 2.0.0)
@ -498,7 +483,6 @@ GEM
activesupport (>= 4.2.0)
rack (>= 1.1)
rubocop (>= 1.33.0, < 2.0)
ruby-filemagic (0.7.3)
ruby-filemagic (0.7.3-x86_64-linux-musl)
ruby-progressbar (1.13.0)
ruby-statistics (3.0.2)
@ -507,17 +491,13 @@ GEM
ruby2ruby (2.5.0)
ruby_parser (~> 3.1)
sexp_processor (~> 4.6)
ruby_dep (1.5.0)
ruby_parser (3.20.1)
sexp_processor (~> 4.16)
rubyzip (2.3.2)
rugged (1.6.3)
rugged (1.6.3-x86_64-linux-musl)
safe_yaml (1.0.6)
safely_block (0.3.0)
errbase (>= 0.1.1)
sassc (2.4.0)
ffi (~> 1.9)
sassc (2.4.0-x86_64-linux-musl)
ffi (~> 1.9)
sassc-rails (2.1.2)
@ -535,10 +515,10 @@ GEM
simpleidn (0.2.1)
unf (~> 0.1.4)
sourcemap (0.1.1)
spring (2.1.1)
spring-watcher-listen (2.0.1)
spring (4.1.1)
spring-watcher-listen (2.1.0)
listen (>= 2.7, < 4.0)
spring (>= 1.2, < 3.0)
spring (>= 4)
sprockets (4.2.0)
concurrent-ruby (~> 1.0)
rack (>= 2.2.4, < 4)
@ -546,10 +526,11 @@ GEM
actionpack (>= 5.2)
activesupport (>= 5.2)
sprockets (>= 3.0.0)
sqlite3 (1.6.3-x86_64-linux)
sqlite3 (1.6.3-x86_64-linux-musl)
mini_portile2 (~> 2.8.0)
stackprof (0.2.25-x86_64-linux-musl)
stream (0.5.5)
sutty-liquid (0.11.10)
sutty-liquid (0.11.11)
fast_blank (~> 1.0)
jekyll (~> 4)
symbol-fstring (1.0.2-x86_64-linux-musl)
@ -589,7 +570,7 @@ GEM
semantic_range (>= 2.3.0)
webrick (1.8.1)
websocket (1.2.9)
websocket-driver (0.7.5-x86_64-linux-musl)
websocket-driver (0.7.6-x86_64-linux-musl)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
xpath (3.2.0)
@ -597,7 +578,6 @@ GEM
zeitwerk (2.6.8)
PLATFORMS
ruby
x86_64-linux-musl
DEPENDENCIES
@ -636,13 +616,13 @@ DEPENDENCIES
inline_svg
jbuilder (~> 2.5)
jekyll (~> 4.2.0)
jekyll-commonmark
jekyll-commonmark (~> 1.4.0)
jekyll-data
jekyll-images
jekyll-include-cache
kaminari
letter_opener
listen (>= 3.0.5, < 3.2)
listen
loaf
lockbox
lograge
@ -677,7 +657,7 @@ DEPENDENCIES
selenium-webdriver (~> 4.8.0)
sourcemap
spring
spring-watcher-listen (~> 2.0.0)
spring-watcher-listen
sqlite3
stackprof
sutty-liquid (>= 0.7.3)
@ -687,12 +667,12 @@ DEPENDENCIES
turbolinks (~> 5)
uglifier (>= 1.3.0)
validates_hostname
web-console (>= 3.3.0)
web-console
webpacker
yaml_db!
RUBY VERSION
ruby 2.7.1p83
ruby 3.1.4p223
BUNDLED WITH
2.2.20
2.4.17

View file

@ -525,5 +525,3 @@ $bezier: cubic-bezier(0.75, 0, 0.25, 1);
}
}
}
// force ci

View file

@ -2,11 +2,21 @@
import { Notifier } from '@airbrake/browser'
window.airbrake = new Notifier({
projectId: window.env.AIRBRAKE_SITE_ID,
projectKey: window.env.AIRBRAKE_API_KEY,
host: window.env.PANEL_URL
})
try {
window.airbrake = new Notifier({
projectId: window.env.AIRBRAKE_PROJECT_ID,
projectKey: window.env.AIRBRAKE_PROJECT_KEY,
host: window.env.PANEL_URL
});
console.originalError = console.error;
console.error = (...e) => {
window.airbrake.notify(e.join(" "));
return console.originalError(...e);
};
} catch(e) {
console.error(e);
}
import 'core-js/stable'
import 'regenerator-runtime/runtime'

View file

@ -8,9 +8,9 @@ module ExceptionNotifier
# Recibe la excepción y empieza la tarea de notificación en segundo
# plano.
#
# @param [Exception]
# @param [Hash]
def call(exception, **options)
# @param :exception [Exception]
# @param :options [Hash]
def call(exception, options, &block)
case exception
when BacktraceJob::BacktraceException
GitlabNotifierJob.perform_later(exception, **options)

View file

@ -37,7 +37,7 @@ class Site
author = GitAuthor.new email: "sutty@#{Site.domain}", name: 'Sutty'
repository.commit(file: modified,
repository.commit(add: modified,
message: I18n.t('sites.find_and_replace'),
usuarie: author)
end

View file

@ -114,14 +114,21 @@ class Site
end
# Guarda los cambios en git
def commit(file:, usuarie:, message:, remove: false)
file = [file] unless file.respond_to? :each
#
# @param :add [Array] Archivos a agregar
# @param :rm [Array] Archivos a eliminar
# @param :usuarie [Usuarie] Quién hace el commit
# @param :message [String] Mensaje
def commit(add: [], rm: [], usuarie:, message:)
# Cargar el árbol actual
rugged.index.read_tree rugged.head.target.tree
file.each do |f|
remove ? rm(f) : add(f)
add.each do |file|
rugged.index.add(relativize(file))
end
rm.each do |file|
rugged.index.remove(relativize(file))
end
# Escribir los cambios para que el repositorio se vea tal cual
@ -142,14 +149,6 @@ class Site
{ name: 'Sutty', email: "sutty@#{Site.domain}", time: Time.now }
end
def add(file)
rugged.index.add(relativize(file))
end
def rm(file)
rugged.index.remove(relativize(file))
end
# Garbage collection
#
# @return [Boolean]

View file

@ -22,7 +22,7 @@ class LfsObjectService
Site::Writer.new(site: site, file: path, content: pointer).save
# Commitear el pointer
site.repository.commit(file: path, usuarie: author, message: File.basename(path))
site.repository.commit(add: [path], usuarie: author, message: File.basename(path))
# Eliminar el pointer
FileUtils.rm(path)

View file

@ -16,7 +16,7 @@ PostService = Struct.new(:site, :usuarie, :post, :params, keyword_init: true) do
post.slug.value = p[:slug] if p[:slug].present?
end
commit(action: :created, file: update_related_posts) if post.update(post_params)
commit(action: :created, add: update_related_posts) if post.update(post_params)
update_site_license!
@ -34,7 +34,7 @@ PostService = Struct.new(:site, :usuarie, :post, :params, keyword_init: true) do
# Los artículos anónimos siempre son borradores
params[:draft] = true
commit(action: :created) if post.update(anon_post_params)
commit(action: :created, add: [post.path.absolute]) if post.update(anon_post_params)
post
end
@ -42,11 +42,17 @@ PostService = Struct.new(:site, :usuarie, :post, :params, keyword_init: true) do
post.usuaries << usuarie
params[:post][:draft] = true if site.invitade? usuarie
# Es importante que el artículo se guarde primero y luego los
# relacionados.
commit(action: :updated, file: update_related_posts) if post.update(post_params)
# Eliminar ("mover") el archivo si cambió de ubicación.
if post.update(post_params)
rm = []
rm << post.path.value_was if post.path.changed?
update_site_license!
# Es importante que el artículo se guarde primero y luego los
# relacionados.
commit(action: :updated, add: update_related_posts, rm: rm)
update_site_license!
end
# Devolver el post aunque no se haya salvado para poder rescatar los
# errores
@ -56,7 +62,7 @@ PostService = Struct.new(:site, :usuarie, :post, :params, keyword_init: true) do
def destroy
post.destroy!
commit(action: :destroyed) if post.destroyed?
commit(action: :destroyed, rm: [post.path.absolute]) if post.destroyed?
post
end
@ -85,15 +91,15 @@ PostService = Struct.new(:site, :usuarie, :post, :params, keyword_init: true) do
# TODO: Implementar transacciones!
posts.save_all(validate: false) &&
commit(action: :reorder, file: files)
commit(action: :reorder, add: files)
end
private
def commit(action:, file: nil)
site.repository.commit(file: file || post.path.absolute,
def commit(action:, add: [], rm: [])
site.repository.commit(add: add,
rm: rm,
usuarie: usuarie,
remove: action == :destroyed,
message: I18n.t("post_service.#{action}",
title: post&.title&.value))

View file

@ -94,7 +94,7 @@ SiteService = Struct.new(:site, :usuarie, :params, keyword_init: true) do
def commit_config(action:)
site.repository
.commit(usuarie: usuarie,
file: site.config.path,
add: [site.config.path],
message: I18n.t("site_service.#{action}",
name: site.name))

View file

@ -4,5 +4,5 @@ ActiveJob::Serializers.add_serializers ActiveJob::Serializers::ExceptionSerializ
# Notificar los errores
Que.error_notifier = proc do |error, job|
ExceptionNotifier.notify_exception(error, data: (job || {}))
ExceptionNotifier.notify_exception(error, data: (job.dup || {}))
end

View file

@ -75,6 +75,14 @@
credits_en: 'This template was made in collaboration with Librenauta in 15 hours!'
designer_url: 'https://copiona.com/donaunbit/'
priority: '70'
- name_en: 'Magazine'
name_es: 'Revista'
gem: 'compost-jekyll-theme'
url: 'https://two.compost.digital/'
description_en: 'A theme to create multimedia publications, based in COMPOST magazine'
description_es: 'Plantilla para crear publicaciones multimedia, basada en COMPOST magazine'
license: 'https://0xacab.org/sutty/jekyll/compost-jekyll-theme/-/blob/no-masters/LICENSE.txt'
priority: '40'
- name_en: 'Resource toolkit'
name_es: 'Recursero'
gem: 'recursero-jekyll-theme'

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/packs/css/application-7d15ae94.css (Stored with Git LFS) Normal file

Binary file not shown.

BIN
public/packs/css/application-7d15ae94.css.br (Stored with Git LFS) Normal file

Binary file not shown.

BIN
public/packs/css/application-7d15ae94.css.br.br (Stored with Git LFS) Normal file

Binary file not shown.

BIN
public/packs/css/application-7d15ae94.css.gz (Stored with Git LFS) Normal file

Binary file not shown.

BIN
public/packs/js/application-fd20cd4c95f90c1a3ecd.js (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/packs/js/application-fd20cd4c95f90c1a3ecd.js.br (Stored with Git LFS) Normal file

Binary file not shown.

BIN
public/packs/js/application-fd20cd4c95f90c1a3ecd.js.br.br (Stored with Git LFS) Normal file

Binary file not shown.

BIN
public/packs/js/application-fd20cd4c95f90c1a3ecd.js.gz (Stored with Git LFS) Normal file

Binary file not shown.

BIN
public/packs/js/application-fd20cd4c95f90c1a3ecd.js.map (Stored with Git LFS) Normal file

Binary file not shown.

BIN
public/packs/js/application-fd20cd4c95f90c1a3ecd.js.map.br (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

BIN
public/packs/js/application-fd20cd4c95f90c1a3ecd.js.map.gz (Stored with Git LFS) Normal file

Binary file not shown.

BIN
public/packs/manifest.json (Stored with Git LFS) Normal file

Binary file not shown.

BIN
public/packs/manifest.json.br (Stored with Git LFS) Normal file

Binary file not shown.

BIN
public/packs/manifest.json.br.br (Stored with Git LFS) Normal file

Binary file not shown.

BIN
public/packs/manifest.json.gz (Stored with Git LFS) Normal file

Binary file not shown.

BIN
public/packs/media/fonts/forkawesome-webfont-2dfb5f36.woff (Stored with Git LFS) Normal file

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show more