mirror of
https://github.com/simonmichael/hledger.git
synced 2024-10-06 10:57:30 +03:00
Initial commit.
This commit is contained in:
commit
978987de62
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
.vagrant
|
83
.sandstorm/Vagrantfile
vendored
Normal file
83
.sandstorm/Vagrantfile
vendored
Normal file
@ -0,0 +1,83 @@
|
||||
# -*- mode: ruby -*-
|
||||
# vi: set ft=ruby :
|
||||
|
||||
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
|
||||
VAGRANTFILE_API_VERSION = "2"
|
||||
|
||||
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
||||
# We base ourselves off Debian Jessie
|
||||
config.vm.box = "debian/jessie64"
|
||||
|
||||
if Vagrant.has_plugin?("vagrant-vbguest") then
|
||||
# vagrant-vbguest is a Vagrant plugin that upgrades
|
||||
# the version of VirtualBox Guest Additions within each
|
||||
# guest. If you have the vagrant-vbguest plugin, then it
|
||||
# needs to know how to compile kernel modules, etc., and so
|
||||
# we give it this hint about operating system type.
|
||||
config.vm.guest = "debian"
|
||||
end
|
||||
|
||||
# We forward port 6080, the Sandstorm web port, so that developers can
|
||||
# visit their sandstorm app from their browser as local.sandstorm.io:6080
|
||||
# (aka 127.0.0.1:6080).
|
||||
config.vm.network :forwarded_port, guest: 6080, host: 6080
|
||||
|
||||
# Use a shell script to "provision" the box. This installs Sandstorm using
|
||||
# the bundled installer.
|
||||
config.vm.provision "shell", inline: "sudo bash /opt/app/.sandstorm/global-setup.sh"
|
||||
# Then, do stack-specific and app-specific setup.
|
||||
config.vm.provision "shell", inline: "sudo bash /opt/app/.sandstorm/setup.sh"
|
||||
|
||||
# Shared folders are configured per-provider since vboxsf can't handle >4096 open files,
|
||||
# NFS requires privilege escalation every time you bring a VM up,
|
||||
# and 9p is only available on libvirt.
|
||||
|
||||
# Calculate the number of CPUs and the amount of RAM the system has,
|
||||
# in a platform-dependent way; further logic below.
|
||||
cpus = nil
|
||||
total_kB_ram = nil
|
||||
|
||||
host = RbConfig::CONFIG['host_os']
|
||||
if host =~ /darwin/
|
||||
cpus = `sysctl -n hw.ncpu`.to_i
|
||||
total_kB_ram = `sysctl -n hw.memsize`.to_i / 1024
|
||||
elsif host =~ /linux/
|
||||
cpus = `nproc`.to_i
|
||||
total_kB_ram = `grep MemTotal /proc/meminfo | awk '{print $2}'`.to_i
|
||||
end
|
||||
# Use the same number of CPUs within Vagrant as the system, with 1
|
||||
# as a default.
|
||||
#
|
||||
# Use at least 512MB of RAM, and if the system has more than 2GB of
|
||||
# RAM, use 1/4 of the system RAM. This seems a reasonable compromise
|
||||
# between having the Vagrant guest operating system not run out of
|
||||
# RAM entirely (which it basically would if we went much lower than
|
||||
# 512MB) and also allowing it to use up a healthily large amount of
|
||||
# RAM so it can run faster on systems that can afford it.
|
||||
if cpus.nil?
|
||||
cpus = 1
|
||||
end
|
||||
if total_kB_ram.nil? or total_kB_ram < 2048000
|
||||
assign_ram_mb = 1024
|
||||
else
|
||||
assign_ram_mb = (total_kB_ram / 1024 / 4)
|
||||
end
|
||||
# Actually apply these CPU/memory values to the providers.
|
||||
config.vm.provider :virtualbox do |vb, override|
|
||||
vb.cpus = cpus
|
||||
vb.memory = assign_ram_mb
|
||||
|
||||
override.vm.synced_folder "..", "/opt/app"
|
||||
override.vm.synced_folder ENV["HOME"] + "/.sandstorm", "/host-dot-sandstorm"
|
||||
override.vm.synced_folder "..", "/vagrant"
|
||||
end
|
||||
config.vm.provider :libvirt do |libvirt, override|
|
||||
libvirt.cpus = cpus
|
||||
libvirt.memory = assign_ram_mb
|
||||
libvirt.random_hostname = true
|
||||
|
||||
override.vm.synced_folder "..", "/opt/app", type: "9p", accessmode: "passthrough"
|
||||
override.vm.synced_folder ENV["HOME"] + "/.sandstorm", "/host-dot-sandstorm", type: "9p", accessmode: "passthrough"
|
||||
override.vm.synced_folder "..", "/vagrant", type: "9p", accessmode: "passthrough"
|
||||
end
|
||||
end
|
23
.sandstorm/build.sh
Normal file
23
.sandstorm/build.sh
Normal file
@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
# This script is run in the VM each time you run `vagrant-spk dev`. This is
|
||||
# the ideal place to invoke anything which is normally part of your app's build
|
||||
# process - transforming the code in your repository into the collection of files
|
||||
# which can actually run the service in production
|
||||
#
|
||||
# Some examples:
|
||||
#
|
||||
# * For a C/C++ application, calling
|
||||
# ./configure && make && make install
|
||||
# * For a Python application, creating a virtualenv and installing
|
||||
# app-specific package dependencies:
|
||||
# virtualenv /opt/app/env
|
||||
# /opt/app/env/bin/pip install -r /opt/app/requirements.txt
|
||||
# * Building static assets from .less or .sass, or bundle and minify JS
|
||||
# * Collecting various build artifacts or assets into a deployment-ready
|
||||
# directory structure
|
||||
|
||||
# By default, this script does nothing. You'll have to modify it as
|
||||
# appropriate for your application.
|
||||
cabal update
|
||||
cabal install hledger-web-0.26
|
30
.sandstorm/global-setup.sh
Normal file
30
.sandstorm/global-setup.sh
Normal file
@ -0,0 +1,30 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
echo localhost > /etc/hostname
|
||||
hostname localhost
|
||||
curl https://install.sandstorm.io/ > /host-dot-sandstorm/caches/install.sh
|
||||
SANDSTORM_CURRENT_VERSION=$(curl -fs "https://install.sandstorm.io/dev?from=0&type=install")
|
||||
SANDSTORM_PACKAGE="sandstorm-$SANDSTORM_CURRENT_VERSION.tar.xz"
|
||||
if [[ ! -f /host-dot-sandstorm/caches/$SANDSTORM_PACKAGE ]] ; then
|
||||
curl --output "/host-dot-sandstorm/caches/$SANDSTORM_PACKAGE" "https://dl.sandstorm.io/$SANDSTORM_PACKAGE"
|
||||
fi
|
||||
bash /host-dot-sandstorm/caches/install.sh -d -e "/host-dot-sandstorm/caches/$SANDSTORM_PACKAGE"
|
||||
modprobe ip_tables
|
||||
# Make the vagrant user part of the sandstorm group so that commands like
|
||||
# `spk dev` work.
|
||||
usermod -a -G 'sandstorm' 'vagrant'
|
||||
# Bind to all addresses, so the vagrant port-forward works.
|
||||
sudo sed --in-place='' \
|
||||
--expression='s/^BIND_IP=.*/BIND_IP=0.0.0.0/' \
|
||||
/opt/sandstorm/sandstorm.conf
|
||||
# TODO: update sandstorm installer script to ask about dev accounts, and
|
||||
# specify a value for this option in the default config?
|
||||
if ! grep --quiet --no-messages ALLOW_DEV_ACCOUNTS=true /opt/sandstorm/sandstorm.conf ; then
|
||||
echo "ALLOW_DEV_ACCOUNTS=true" | sudo tee -a /opt/sandstorm/sandstorm.conf
|
||||
sudo service sandstorm restart
|
||||
fi
|
||||
# Enable apt-cacher-ng proxy to make things faster if one appears to be running on the gateway IP
|
||||
GATEWAY_IP=$(ip route | grep ^default | cut -d ' ' -f 3)
|
||||
if nc -z "$GATEWAY_IP" 3142 ; then
|
||||
echo "Acquire::http::Proxy \"http://$GATEWAY_IP:3142\";" > /etc/apt/apt.conf.d/80httpproxy
|
||||
fi
|
33
.sandstorm/launcher.sh
Normal file
33
.sandstorm/launcher.sh
Normal file
@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
# This script is run every time an instance of our app - aka grain - starts up.
|
||||
# This is the entry point for your application both when a grain is first launched
|
||||
# and when a grain resumes after being previously shut down.
|
||||
#
|
||||
# This script is responsible for launching everything your app needs to run. The
|
||||
# thing it should do *last* is:
|
||||
#
|
||||
# * Start a process in the foreground listening on port 8000 for HTTP requests.
|
||||
#
|
||||
# This is how you indicate to the platform that your application is up and
|
||||
# ready to receive requests. Often, this will be something like nginx serving
|
||||
# static files and reverse proxying for some other dynamic backend service.
|
||||
#
|
||||
# Other things you probably want to do in this script include:
|
||||
#
|
||||
# * Building folder structures in /var. /var is the only non-tmpfs folder
|
||||
# mounted read-write in the sandbox, and when a grain is first launched, it
|
||||
# will start out empty. It will persist between runs of the same grain, but
|
||||
# be unique per app instance. That is, two instances of the same app have
|
||||
# separate instances of /var.
|
||||
# * Preparing a database and running migrations. As your package changes
|
||||
# over time and you release updates, you will need to deal with migrating
|
||||
# data from previous schema versions to new ones, since users should not have
|
||||
# to think about such things.
|
||||
# * Launching other daemons your app needs (e.g. mysqld, redis-server, etc.)
|
||||
|
||||
# By default, this script does nothing. You'll have to modify it as
|
||||
# appropriate for your application.
|
||||
mkdir -p /var/lib/hledger
|
||||
touch /var/lib/hledger/ledger.dat
|
||||
/home/vagrant/.cabal/bin/hledger-web --server -f /var/lib/hledger/ledger.dat --port 8000
|
81
.sandstorm/sandstorm-pkgdef.capnp
Normal file
81
.sandstorm/sandstorm-pkgdef.capnp
Normal file
@ -0,0 +1,81 @@
|
||||
@0xb83da55f33c7fde7;
|
||||
|
||||
using Spk = import "/sandstorm/package.capnp";
|
||||
# This imports:
|
||||
# $SANDSTORM_HOME/latest/usr/include/sandstorm/package.capnp
|
||||
# Check out that file to see the full, documented package definition format.
|
||||
|
||||
const pkgdef :Spk.PackageDefinition = (
|
||||
# The package definition. Note that the spk tool looks specifically for the
|
||||
# "pkgdef" constant.
|
||||
|
||||
id = "wy71w9g29zevsc8dfcf8c322wgxm97z5fu29y8v9p02p95s6eqj0",
|
||||
# Your app ID is actually its public key. The private key was placed in
|
||||
# your keyring. All updates must be signed with the same key.
|
||||
|
||||
manifest = (
|
||||
# This manifest is included in your app package to tell Sandstorm
|
||||
# about your app.
|
||||
|
||||
appTitle = (defaultText = "HLedger"),
|
||||
|
||||
appVersion = 0, # Increment this for every release.
|
||||
|
||||
appMarketingVersion = (defaultText = "0.26"),
|
||||
# Human-readable representation of appVersion. Should match the way you
|
||||
# identify versions of your app in documentation and marketing.
|
||||
|
||||
actions = [
|
||||
# Define your "new document" handlers here.
|
||||
( title = (defaultText = "New Ledger"),
|
||||
command = .myCommand
|
||||
# The command to run when starting for the first time. (".myCommand"
|
||||
# is just a constant defined at the bottom of the file.)
|
||||
)
|
||||
],
|
||||
|
||||
continueCommand = .myCommand
|
||||
# This is the command called to start your app back up after it has been
|
||||
# shut down for inactivity. Here we're using the same command as for
|
||||
# starting a new instance, but you could use different commands for each
|
||||
# case.
|
||||
),
|
||||
|
||||
sourceMap = (
|
||||
# Here we defined where to look for files to copy into your package. The
|
||||
# `spk dev` command actually figures out what files your app needs
|
||||
# automatically by running it on a FUSE filesystem. So, the mappings
|
||||
# here are only to tell it where to find files that the app wants.
|
||||
searchPath = [
|
||||
( sourcePath = "." ), # Search this directory first.
|
||||
( sourcePath = "/", # Then search the system root directory.
|
||||
hidePaths = [ "home", "proc", "sys",
|
||||
"etc/passwd", "etc/hosts", "etc/host.conf",
|
||||
"etc/nsswitch.conf", "etc/resolv.conf" ]
|
||||
# You probably don't want the app pulling files from these places,
|
||||
# so we hide them. Note that /dev, /var, and /tmp are implicitly
|
||||
# hidden because Sandstorm itself provides them.
|
||||
)
|
||||
]
|
||||
),
|
||||
|
||||
fileList = "sandstorm-files.list",
|
||||
# `spk dev` will write a list of all the files your app uses to this file.
|
||||
# You should review it later, before shipping your app.
|
||||
|
||||
alwaysInclude = []
|
||||
# Fill this list with more names of files or directories that should be
|
||||
# included in your package, even if not listed in sandstorm-files.list.
|
||||
# Use this to force-include stuff that you know you need but which may
|
||||
# not have been detected as a dependency during `spk dev`. If you list
|
||||
# a directory here, its entire contents will be included recursively.
|
||||
);
|
||||
|
||||
const myCommand :Spk.Manifest.Command = (
|
||||
# Here we define the command used to start up your server.
|
||||
argv = ["/sandstorm-http-bridge", "8000", "--", "/opt/app/.sandstorm/launcher.sh"],
|
||||
environ = [
|
||||
# Note that this defines the *entire* environment seen by your app.
|
||||
(key = "PATH", value = "/usr/local/bin:/usr/bin:/bin:/home/vagrant/.cabal/bin")
|
||||
]
|
||||
);
|
28
.sandstorm/setup.sh
Normal file
28
.sandstorm/setup.sh
Normal file
@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
# This script is run in the VM once when you first run `vagrant-spk up`. It is
|
||||
# useful for installing system-global dependencies. It is run exactly once
|
||||
# over the lifetime of the VM.
|
||||
#
|
||||
# This is the ideal place to do things like:
|
||||
#
|
||||
# export DEBIAN_FRONTEND=noninteractive
|
||||
# apt-get install -y nginx nodejs nodejs-legacy python2.7 mysql-server
|
||||
#
|
||||
# If the packages you're installing here need some configuration adjustments,
|
||||
# this is also a good place to do that:
|
||||
#
|
||||
# sed --in-place='' \
|
||||
# --expression 's/^user www-data/#user www-data/' \
|
||||
# --expression 's#^pid /run/nginx.pid#pid /var/run/nginx.pid#' \
|
||||
# --expression 's/^\s*error_log.*/error_log stderr;/' \
|
||||
# --expression 's/^\s*access_log.*/access_log off;/' \
|
||||
# /etc/nginx/nginx.conf
|
||||
|
||||
# By default, this script does nothing. You'll have to modify it as
|
||||
# appropriate for your application.
|
||||
apt-get update
|
||||
apt-get install -y haskell-platform libncurses-dev
|
||||
mkdir /var/lib/hledger
|
||||
touch /var/lib/hledger/ledger.dat
|
||||
chown -R vagrant.vagrant /var/lib/hledger
|
1
.sandstorm/stack
Normal file
1
.sandstorm/stack
Normal file
@ -0,0 +1 @@
|
||||
diy
|
Loading…
Reference in New Issue
Block a user