Packages
version_tasks
0.11.1
0.12.0
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.29
0.10.28
0.10.27
0.10.26
0.10.25
0.10.24
0.10.23
0.10.22
0.10.21
0.10.20
0.10.19
0.10.18
0.10.17
0.10.16
0.10.15
0.10.14
0.10.13
0.10.12
0.10.11
0.10.10
0.10.9
0.10.8
0.10.7
0.10.6
0.10.5
0.10.4
0.10.3
0.10.1
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.3
0.8.1
0.7.0
0.6.0
0.5.0
0.4.0
0.3.3
0.3.1
0.2.6
A suite of mix tasks for managing your libs version numbers with git and hex
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/bin/db.ex
defmodule Mix.Tasks.Version.Bin.Db do
use Mix.Task
@shortdoc "Create 'rel/commands' helper scripts for managing database backup / restore"
def run([]), do: run([nil, nil])
def run([backup_root]), do: run([backup_root, nil])
def run([backup_root, dbname]) do
[
"./rel/commands"
]
|> Enum.each(fn dirname ->
:ok = dirname |> Path.expand() |> File.mkdir_p!()
end)
appname = Mix.Project.config()[:app]
default_root = "/src/#{appname}backup"
backup_root = backup_root || default_root
dbname = dbname || appname
"""
#!/bin/bash
NOW=${NOW:=$(date +"%Y%m%d%H%M%S")}
VERSION=${VERSION:=$(mix version.current)}
DBNAME=#{dbname}
BACKUP_ROOT=#{backup_root}
FNAME=${DBNAME}_${VERSION}_${NOW}
(cd ${BACKUP_ROOT} && \\
pg_dump --create --clean ${DBNAME} > ${FNAME}.sql && \\
tar zcf ${FNAME}.tar.gz ${FNAME}.sql && \\
ln -sf ${FNAME}.tar.gz ${DBNAME}_${VERSION}.tar.gz && \\
ln -sf ${FNAME}.tar.gz ${DBNAME}.tar.gz && \\
git add . && \\
git commit -m "Backup ${DBNAME} v${VERSION} (${NOW})" && \\
git push)
"""
|> write!("./rel/commands/backup")
"""
#!/bin/bash
DBNAME=#{dbname}
BACKUP_ROOT=#{backup_root}
(cd ${BACKUP_ROOT} && \\
psql -f $(tar zxfv ${DBNAME}.tar.gz))
"""
|> write!("./rel/commands/restore")
[
"./rel/commands/backup",
"./rel/commands/restore"
]
|> Enum.each(fn filename ->
:ok =
filename
|> Path.expand()
|> File.chmod(0o755)
end)
IO.puts("Installed the following scripts into ./rel/commands")
IO.puts(" + backup \# Backup your database (named #{appname})")
IO.puts(" + restore \# Restore your database (named #{appname})")
IO.puts("")
IO.puts("To enable those to be part of the release,")
IO.puts("then ensure you update your ./rel/config.exs with:")
IO.puts("")
example = """
release :#{appname} do
...
set commands: [
"backup": "rel/commands/backup",
"restore": "rel/commands/restore"
]
end
"""
IO.puts(example)
IO.puts("")
end
defp write!(content, relative_name) do
File.write!(relative_name |> Path.expand(), content)
end
end