forked from treehouse/mastodon
Compare commits
10 Commits
main
...
treehouse-
Author | SHA1 | Date |
---|---|---|
fox | 5e89609016 | |
kouhai dev | f25edd6dcf | |
Rin | f196b4b9d6 | |
kouhai dev | 36cc31f924 | |
kouhai dev | 0604b7a3f8 | |
kouhai dev | e6544ce4b0 | |
kouhai dev | 4ea85c685e | |
kouhai dev | 99158a0af2 | |
kouhai dev | f8f1966e79 | |
kouhai dev | 19cd42360d |
|
@ -1,6 +1,5 @@
|
|||
[production]
|
||||
defaults
|
||||
not IE 11
|
||||
not dead
|
||||
|
||||
[development]
|
||||
|
|
|
@ -19,3 +19,4 @@ postgres14
|
|||
redis
|
||||
elasticsearch
|
||||
chart
|
||||
data
|
||||
|
|
3
Gemfile
3
Gemfile
|
@ -3,6 +3,9 @@
|
|||
source 'https://rubygems.org'
|
||||
ruby '>= 2.6.0', '< 3.1.0'
|
||||
|
||||
|
||||
gem 'psych', '< 4'
|
||||
|
||||
gem 'pkg-config', '~> 1.4'
|
||||
gem 'rexml', '~> 3.2'
|
||||
|
||||
|
|
|
@ -478,6 +478,7 @@ GEM
|
|||
pry (>= 0.13, < 0.15)
|
||||
pry-rails (0.3.9)
|
||||
pry (>= 0.10.4)
|
||||
psych (3.3.4)
|
||||
public_suffix (5.0.0)
|
||||
puma (5.6.5)
|
||||
nio4r (~> 2.0)
|
||||
|
@ -813,6 +814,7 @@ DEPENDENCIES
|
|||
private_address_check (~> 0.5)
|
||||
pry-byebug (~> 3.10)
|
||||
pry-rails (~> 0.3)
|
||||
psych (< 4)
|
||||
puma (~> 5.6)
|
||||
pundit (~> 2.2)
|
||||
rack (~> 2.2.4)
|
||||
|
@ -858,3 +860,9 @@ DEPENDENCIES
|
|||
webpacker (~> 5.4)
|
||||
webpush!
|
||||
xorcist (~> 1.1)
|
||||
|
||||
RUBY VERSION
|
||||
ruby 3.0.4p208
|
||||
|
||||
BUNDLED WITH
|
||||
2.3.26
|
||||
|
|
|
@ -1,137 +1,100 @@
|
|||
# -*- mode: ruby -*-
|
||||
# vi: set ft=ruby :
|
||||
|
||||
ENV["PORT"] ||= "3000"
|
||||
REQUIRED_PLUGINS = %w(vagrant-libvirt)
|
||||
exit unless REQUIRED_PLUGINS.all? do |plugin|
|
||||
Vagrant.has_plugin?(plugin) || (
|
||||
puts "The #{plugin} plugin is required. Please install it with:"
|
||||
puts "$ vagrant plugin install #{plugin}"
|
||||
false
|
||||
)
|
||||
end
|
||||
|
||||
$provision = <<SCRIPT
|
||||
# see SETUP.md for details
|
||||
|
||||
cd /vagrant # This is where the host folder/repo is mounted
|
||||
export RAILS_ENV=development
|
||||
export NODE_ENV=development
|
||||
export NODE_OPTIONS=--openssl-legacy-provider
|
||||
|
||||
# Add the yarn repo + yarn repo keys
|
||||
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
|
||||
sudo apt-add-repository 'deb https://dl.yarnpkg.com/debian/ stable main'
|
||||
echo '[treehouse-vagrant] install packages'
|
||||
sudo pacman -Syu --noconfirm base-devel git libidn
|
||||
sudo pacman -Syu --noconfirm ruby ruby-bundler ruby-irb redis postgresql yarn
|
||||
git clone https://aur.archlinux.org/ruby-foreman.git
|
||||
cd ruby-foreman
|
||||
yes | sudo -u vagrant makepkg -si
|
||||
|
||||
# Add repo for NodeJS
|
||||
curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -
|
||||
# treehouse mastodon files are synced here
|
||||
cd /vagrant
|
||||
|
||||
# Add firewall rule to redirect 80 to PORT and save
|
||||
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port #{ENV["PORT"]}
|
||||
echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections
|
||||
echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections
|
||||
sudo apt-get install iptables-persistent -y
|
||||
echo '[treehouse-vagrant] init database'
|
||||
if [ -d "data/" ]; then rm -rf data/; fi
|
||||
mkdir -p data/
|
||||
pg_ctl -D data/postgres initdb -o '-U mastodon --auth-host=trust'
|
||||
echo 'unix_socket_directories = .' >> data/postgres/postgresql.conf
|
||||
pg_ctl -D data/postgres start --silent
|
||||
|
||||
# Add packages to build and run Mastodon
|
||||
sudo apt-get install \
|
||||
git-core \
|
||||
g++ \
|
||||
libpq-dev \
|
||||
libxml2-dev \
|
||||
libxslt1-dev \
|
||||
imagemagick \
|
||||
nodejs \
|
||||
redis-server \
|
||||
redis-tools \
|
||||
postgresql \
|
||||
postgresql-contrib \
|
||||
yarn \
|
||||
libicu-dev \
|
||||
libidn11-dev \
|
||||
libreadline-dev \
|
||||
libpam0g-dev \
|
||||
-y
|
||||
echo '[treehouse-vagrant] start redis'
|
||||
mkdir -p data/redis
|
||||
redis-server ./redis-dev.conf
|
||||
|
||||
# Install rvm
|
||||
read RUBY_VERSION < .ruby-version
|
||||
|
||||
curl -sSL https://rvm.io/mpapis.asc | gpg --import
|
||||
curl -sSL https://rvm.io/pkuczynski.asc | gpg --import
|
||||
|
||||
curl -sSL https://raw.githubusercontent.com/rvm/rvm/stable/binscripts/rvm-installer | bash -s stable --ruby=$RUBY_VERSION
|
||||
source /home/vagrant/.rvm/scripts/rvm
|
||||
|
||||
# Install Ruby
|
||||
rvm reinstall ruby-$RUBY_VERSION --disable-binary
|
||||
|
||||
# Configure database
|
||||
sudo -u postgres createuser -U postgres vagrant -s
|
||||
sudo -u postgres createdb -U postgres mastodon_development
|
||||
|
||||
# Install gems and node modules
|
||||
gem install bundler foreman
|
||||
echo '[treehouse-vagrant] bundle install'
|
||||
if [ -d "vendor/bundle/" ]; then rm -rf vendor/bundle/; fi
|
||||
bundle config set --local path 'vendor/bundle/'
|
||||
bundle install
|
||||
|
||||
echo '[treehouse-vagrant] yarn install'
|
||||
yarn add webpack
|
||||
git restore package.json yarn.lock
|
||||
yarn install
|
||||
|
||||
# Build Mastodon
|
||||
export RAILS_ENV=development
|
||||
export $(cat ".env.vagrant" | xargs)
|
||||
bundle exec rails db:setup
|
||||
echo '[treehouse-vagrant] bundle db'
|
||||
bundle exec rake db:setup || exit
|
||||
|
||||
# Configure automatic loading of environment variable
|
||||
echo 'export RAILS_ENV=development' >> ~/.bash_profile
|
||||
echo 'export $(cat "/vagrant/.env.vagrant" | xargs)' >> ~/.bash_profile
|
||||
echo '[treehouse-vagrant] bundle assets'
|
||||
bundle exec rake assets:precompile || exit
|
||||
|
||||
echo '[treehouse-vagrant] foreman start'
|
||||
foreman start
|
||||
|
||||
SCRIPT
|
||||
|
||||
$start = <<SCRIPT
|
||||
# TODO: allow `vagrant up`
|
||||
# this requires persistent storage
|
||||
# i.e., not saving data, assets, etc to /vagrant
|
||||
#$start = <<SCRIPT
|
||||
#
|
||||
#export NODE_ENV=development
|
||||
#export RAILS_ENV=development
|
||||
#cd /vagrant
|
||||
#pg_ctl -D data/postgres start --silent
|
||||
#redis-server ./redis-dev.conf
|
||||
#foreman start
|
||||
#
|
||||
#SCRIPT
|
||||
|
||||
echo 'To start server'
|
||||
echo ' $ vagrant ssh -c "cd /vagrant && foreman start"'
|
||||
Vagrant.configure("2") do |config|
|
||||
|
||||
SCRIPT
|
||||
config.vagrant.plugins = "vagrant-libvirt"
|
||||
|
||||
VAGRANTFILE_API_VERSION = "2"
|
||||
|
||||
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
||||
|
||||
config.vm.box = "ubuntu/bionic64"
|
||||
|
||||
config.vm.provider :virtualbox do |vb|
|
||||
vb.name = "mastodon"
|
||||
vb.customize ["modifyvm", :id, "--memory", "4096"]
|
||||
# Increase the number of CPUs. Uncomment and adjust to
|
||||
# increase performance
|
||||
# vb.customize ["modifyvm", :id, "--cpus", "3"]
|
||||
|
||||
# Disable VirtualBox DNS proxy to skip long-delay IPv6 resolutions.
|
||||
# https://github.com/mitchellh/vagrant/issues/1172
|
||||
vb.customize ["modifyvm", :id, "--natdnsproxy1", "off"]
|
||||
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "off"]
|
||||
|
||||
# Use "virtio" network interfaces for better performance.
|
||||
vb.customize ["modifyvm", :id, "--nictype1", "virtio"]
|
||||
vb.customize ["modifyvm", :id, "--nictype2", "virtio"]
|
||||
|
||||
end
|
||||
|
||||
# This uses the vagrant-hostsupdater plugin, and lets you
|
||||
# access the development site at http://mastodon.local.
|
||||
# If you change it, also change it in .env.vagrant before provisioning
|
||||
# the vagrant server to update the development build.
|
||||
#
|
||||
# To install:
|
||||
# $ vagrant plugin install vagrant-hostsupdater
|
||||
config.vm.box = "archlinux/archlinux"
|
||||
config.vm.hostname = "mastodon.local"
|
||||
|
||||
if defined?(VagrantPlugins::HostsUpdater)
|
||||
config.vm.network :private_network, ip: "192.168.42.42", nictype: "virtio"
|
||||
config.hostsupdater.remove_on_suspend = false
|
||||
end
|
||||
# vagrant ssh -- -L 3000:localhost:3000 (:
|
||||
#config.vm.network :forwarded_port, guest: 3000, host: 3000
|
||||
|
||||
if config.vm.networks.any? { |type, options| type == :private_network }
|
||||
config.vm.synced_folder ".", "/vagrant", type: "nfs", mount_options: ['rw', 'vers=3', 'tcp', 'actimeo=1']
|
||||
else
|
||||
config.vm.synced_folder ".", "/vagrant"
|
||||
end
|
||||
config.vm.synced_folder ".", "/vagrant",
|
||||
type: "rsync",
|
||||
rsync__args: ["--verbose", "--archive", "--delete", "-z"],
|
||||
rsync__exclide: ".git/"
|
||||
|
||||
# Otherwise, you can access the site at http://localhost:3000 and http://localhost:4000 , http://localhost:8080
|
||||
config.vm.network :forwarded_port, guest: 3000, host: 3000
|
||||
config.vm.network :forwarded_port, guest: 4000, host: 4000
|
||||
config.vm.network :forwarded_port, guest: 8080, host: 8080
|
||||
|
||||
# Full provisioning script, only runs on first 'vagrant up' or with 'vagrant provision'
|
||||
config.vm.provision :shell, inline: $provision, privileged: false
|
||||
#config.vm.provision :shell, inline: $start, run: 'always', privileged: false
|
||||
|
||||
# Start up script, runs on every 'vagrant up'
|
||||
config.vm.provision :shell, inline: $start, run: 'always', privileged: false
|
||||
config.vm.provider :libvirt do |libvirt|
|
||||
libvirt.driver = "kvm"
|
||||
libvirt.memory = 4096
|
||||
libvirt.cpus = 4
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -285,23 +285,28 @@
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
@mixin focusable {
|
||||
outline: 0;
|
||||
background: lighten($ui-base-color, 4%);
|
||||
|
||||
&.status.status-direct {
|
||||
background: lighten($ui-base-color, 12%);
|
||||
|
||||
&.muted {
|
||||
background: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
.detailed-status,
|
||||
.detailed-status__action-bar {
|
||||
background: lighten($ui-base-color, 8%);
|
||||
}
|
||||
}
|
||||
.focusable {
|
||||
&:focus {
|
||||
outline: 0;
|
||||
background: lighten($ui-base-color, 4%);
|
||||
|
||||
&.status.status-direct {
|
||||
background: lighten($ui-base-color, 12%);
|
||||
|
||||
&.muted {
|
||||
background: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
.detailed-status,
|
||||
.detailed-status__action-bar {
|
||||
background: lighten($ui-base-color, 8%);
|
||||
}
|
||||
&:focus,
|
||||
&:hover {
|
||||
@include focusable;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -79,8 +79,6 @@ class LinkFooter extends React.PureComponent {
|
|||
{' '}
|
||||
<a href='https://joinmastodon.org' target='_blank'><FormattedMessage id='footer.about' defaultMessage='About' /></a>
|
||||
{' · '}
|
||||
<a href='https://joinmastodon.org/apps' target='_blank'><FormattedMessage id='footer.get_app' defaultMessage='Get the app' /></a>
|
||||
{' · '}
|
||||
<Link to='/keyboard-shortcuts'><FormattedMessage id='footer.keyboard_shortcuts' defaultMessage='Keyboard shortcuts' /></Link>
|
||||
{' · '}
|
||||
<a href={source_url} rel='noopener noreferrer' target='_blank'><FormattedMessage id='footer.source_code' defaultMessage='View source code' /></a>
|
||||
|
|
|
@ -33,11 +33,11 @@ module Mastodon
|
|||
end
|
||||
|
||||
def repository
|
||||
ENV.fetch('GITHUB_REPOSITORY', 'glitch-soc/mastodon')
|
||||
ENV.fetch('GIT_REPOSITORY', false) || ENV.fetch('GITHUB_REPOSITORY', false) || 'treehouse/mastodon'
|
||||
end
|
||||
|
||||
def source_base_url
|
||||
ENV.fetch('SOURCE_BASE_URL', "https://github.com/#{repository}")
|
||||
ENV.fetch('SOURCE_BASE_URL', "https://gitea.treehouse.systems/#{repository}")
|
||||
end
|
||||
|
||||
# specify git tag or commit hash here
|
||||
|
@ -46,8 +46,13 @@ module Mastodon
|
|||
end
|
||||
|
||||
def source_url
|
||||
if source_tag
|
||||
"#{source_base_url}/tree/#{source_tag}"
|
||||
if source_tag && source_base_url =~ /gitea/
|
||||
suffix = if !str[/\H/]
|
||||
"commit/#{source_tag}"
|
||||
else
|
||||
"branch/#{source_tag}"
|
||||
end
|
||||
"#{source_base_url}/#{suffix}"
|
||||
else
|
||||
source_base_url
|
||||
end
|
||||
|
|
|
@ -0,0 +1,109 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'pathname'
|
||||
|
||||
DATA_DIR = Pathname.new('data')
|
||||
POSTGRES_DIR = DATA_DIR / 'postgres'
|
||||
POSTGRES_CONF_FILE = POSTGRES_DIR / 'postgresql.conf'
|
||||
POSTGRES_SOCKET_FILE = POSTGRES_DIR / '.s.PGSQL.5432'
|
||||
POSTGRES_PID_FILE = POSTGRES_DIR / 'postmaster.pid'
|
||||
REDIS_DIR = DATA_DIR / 'redis'
|
||||
REDIS_PID_FILE = REDIS_DIR / 'redis-dev.pid'
|
||||
|
||||
def divider
|
||||
puts '=========='
|
||||
end
|
||||
|
||||
def get_pid(pid_file)
|
||||
return false unless File.file?(pid_file)
|
||||
pid = File.read(pid_file).to_i
|
||||
|
||||
Process.kill(0, pid)
|
||||
pid
|
||||
rescue Errno::ESRCH
|
||||
nil
|
||||
end
|
||||
|
||||
def postgres_running?
|
||||
get_pid POSTGRES_PID_FILE
|
||||
end
|
||||
|
||||
directory REDIS_DIR.to_s
|
||||
|
||||
namespace :deps do
|
||||
task start: ['postgres:start', 'redis:start']
|
||||
task stop: ['postgres:stop', 'redis:stop']
|
||||
|
||||
namespace :postgres do
|
||||
namespace :setup do
|
||||
task all: [POSTGRES_DIR.to_s]
|
||||
|
||||
file POSTGRES_DIR.to_s do
|
||||
if POSTGRES_CONF_FILE.exist?
|
||||
puts 'Postgres conf exists, skipping initdb'
|
||||
next
|
||||
end
|
||||
sh %(printf '%s\\n' pg_ctl -D data/postgres initdb -o '-U mastodon --auth-host=trust')
|
||||
end
|
||||
|
||||
task configure: [POSTGRES_DIR.to_s] do
|
||||
next if File.foreach(POSTGRES_CONF_FILE).detect? { |line| line == /^unix_socket_directories = \.\s*$/ }
|
||||
|
||||
POSTGRES_CONF_FILE.open('at') do |f|
|
||||
f.write("\n", PG_SOCKET_DIRECTORIES_LINE, "\n")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
task start: ['setup:all'] do
|
||||
if (pid = get_pid POSTGRES_PID_FILE)
|
||||
puts "Postgres is running (pid #{pid})!"
|
||||
next
|
||||
end
|
||||
|
||||
puts 'Starting postgres...'
|
||||
divider
|
||||
sh %(pg_ctl -D ./data/postgres start)
|
||||
divider
|
||||
end
|
||||
|
||||
task :stop do
|
||||
unless (pid = get_pid POSTGRES_PID_FILE)
|
||||
puts "Postgres isn't running!"
|
||||
next
|
||||
end
|
||||
|
||||
puts "Stopping Postgres (pid #{pid})..."
|
||||
sh %(pg_ctl -D ./data/postgres stop)
|
||||
divider
|
||||
end
|
||||
end
|
||||
|
||||
namespace :redis do
|
||||
task init: [REDIS_DIR.to_s] do
|
||||
end
|
||||
|
||||
task start: [:init] do
|
||||
if (pid = get_pid REDIS_PID_FILE)
|
||||
puts "Redis is running (pid #{pid})!"
|
||||
next
|
||||
end
|
||||
|
||||
puts 'Starting redis...'
|
||||
divider
|
||||
sh %(redis-server redis-dev.conf)
|
||||
divider
|
||||
end
|
||||
|
||||
task :stop do
|
||||
unless (pid = get_pid REDIS_PID_FILE)
|
||||
puts "Redis isn't running!"
|
||||
next
|
||||
end
|
||||
|
||||
puts "Stopping Redis (pid #{pid})..."
|
||||
divider
|
||||
Process.kill(:TERM, pid)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -36,12 +36,13 @@
|
|||
"@rails/ujs": "^6.1.7",
|
||||
"abortcontroller-polyfill": "^1.7.5",
|
||||
"array-includes": "^3.1.5",
|
||||
"atrament": "0.2.4",
|
||||
"arrow-key-navigation": "^1.2.0",
|
||||
"atrament": "0.2.4",
|
||||
"autoprefixer": "^9.8.8",
|
||||
"axios": "^1.1.3",
|
||||
"babel-loader": "^8.2.5",
|
||||
"babel-plugin-lodash": "^3.3.4",
|
||||
"babel-plugin-macros": "^3.1.0",
|
||||
"babel-plugin-preval": "^5.1.0",
|
||||
"babel-plugin-react-intl": "^6.2.0",
|
||||
"babel-plugin-transform-react-remove-prop-types": "^0.4.24",
|
||||
|
@ -173,5 +174,6 @@
|
|||
"optionalDependencies": {
|
||||
"bufferutil": "^4.0.7",
|
||||
"utf-8-validate": "^5.0.10"
|
||||
}
|
||||
},
|
||||
"packageManager": "yarn@3.3.0"
|
||||
}
|
||||
|
|
|
@ -87,8 +87,8 @@ describe InstancePresenter do
|
|||
end
|
||||
|
||||
describe '#source_url' do
|
||||
it 'returns "https://github.com/glitch-soc/mastodon"' do
|
||||
expect(instance_presenter.source_url).to eq('https://github.com/glitch-soc/mastodon')
|
||||
it 'returns the default URL' do
|
||||
expect(instance_presenter.source_url).to eq('https://gitea.treehouse.systems/treehouse/mastodon')
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue