summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-12-09 11:47:28 +0100
committerMatthias Beyer <mail@beyermatthias.de>2020-12-09 17:46:35 +0100
commit09b9a8669348f9ab9743aaab0b010c9c0da63ba8 (patch)
tree5b794209f5e9897c3851310edfa8a593ae4e42f3 /examples
parente0ab343878d20cc071b669865ca45f9ccbae1438 (diff)
Add example package repository
This patch adds an example package repository including a "source repository" where sources for packages are located. The Makefile can be used to setup an testing environment, controlled via environment settings (which are created via shell.nix for example) and spin up a webserver for the sources. Butido can then be used to download and build the sources into packages. Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
Diffstat (limited to 'examples')
-rw-r--r--examples/packages/1/Makefile62
-rw-r--r--examples/packages/1/README.md27
-rw-r--r--examples/packages/1/repo/a/pkg.toml15
-rw-r--r--examples/packages/1/repo/b/pkg.toml41
-rw-r--r--examples/packages/1/repo/c/pkg.toml17
-rw-r--r--examples/packages/1/repo/config.toml40
-rw-r--r--examples/packages/1/repo/d/pkg.toml14
-rw-r--r--examples/packages/1/repo/e/pkg.toml11
-rw-r--r--examples/packages/1/repo/f/pkg.toml11
-rw-r--r--examples/packages/1/repo/g/pkg.toml11
-rw-r--r--examples/packages/1/repo/h/pkg.toml14
-rw-r--r--examples/packages/1/repo/i/pkg.toml11
-rw-r--r--examples/packages/1/repo/j/pkg.toml11
-rw-r--r--examples/packages/1/repo/pkg.toml70
-rw-r--r--examples/packages/1/sources/a-1.source1
-rw-r--r--examples/packages/1/sources/b-2.source1
-rw-r--r--examples/packages/1/sources/c-3.source1
-rw-r--r--examples/packages/1/sources/d-4.source1
-rw-r--r--examples/packages/1/sources/e-5.source1
-rw-r--r--examples/packages/1/sources/f-6.source1
-rw-r--r--examples/packages/1/sources/g-7.source1
-rw-r--r--examples/packages/1/sources/h-8.source1
-rw-r--r--examples/packages/1/sources/i-9.source1
-rw-r--r--examples/packages/1/sources/j-10.source1
24 files changed, 278 insertions, 87 deletions
diff --git a/examples/packages/1/Makefile b/examples/packages/1/Makefile
new file mode 100644
index 0000000..9de0fb9
--- /dev/null
+++ b/examples/packages/1/Makefile
@@ -0,0 +1,62 @@
+.PHONY: all
+all: directories copyrepo
+
+directories: ${BUTIDO_RELEASES} ${BUTIDO_STAGING} ${BUTIDO_SOURCE_CACHE} ${BUTIDO_LOG_DIR} ${BUTIDO_REPO}
+
+
+# to start a webserver for serving the source files.
+webserver: ./sources ${BUTIDO_SOURCE_CACHE}
+ devd -A 127.0.0.1 -p 8180 -T ./sources
+
+
+copyrepo: ${BUTIDO_REPO} check-env
+ cp -rv ./repo/* ${BUTIDO_REPO}/
+ cd ${BUTIDO_REPO}/ && git init && git add . && git commit -m init
+
+${BUTIDO_RELEASES}: check-env
+ mkdir -p "${BUTIDO_RELEASES}"
+
+${BUTIDO_STAGING}: check-env
+ mkdir -p "${BUTIDO_STAGING}"
+
+${BUTIDO_SOURCE_CACHE}: check-env
+ mkdir -p "${BUTIDO_SOURCE_CACHE}"
+
+${BUTIDO_LOG_DIR}: check-env
+ mkdir -p "${BUTIDO_LOG_DIR}"
+
+${BUTIDO_REPO}: check-env
+ mkdir -p "${BUTIDO_REPO}"
+
+
+check-env:
+ifndef BUTIDO_RELEASES
+ $(error BUTIDO_RELEASES is undefined)
+endif
+ifndef BUTIDO_STAGING
+ $(error BUTIDO_STAGING is undefined)
+endif
+ifndef BUTIDO_SOURCE_CACHE
+ $(error BUTIDO_SOURCE_CACHE is undefined)
+endif
+ifndef BUTIDO_LOG_DIR
+ $(error BUTIDO_LOG_DIR is undefined)
+endif
+ifndef BUTIDO_REPO
+ $(error BUTIDO_REPO is undefined)
+endif
+ifndef BUTIDO_DATABASE_HOST
+ $(error BUTIDO_DATABASE_HOST is undefined)
+endif
+ifndef BUTIDO_DATABASE_PORT
+ $(error BUTIDO_DATABASE_PORT is undefined)
+endif
+ifndef BUTIDO_DATABASE_USER
+ $(error BUTIDO_DATABASE_USER is undefined)
+endif
+ifndef BUTIDO_DATABASE_PASSWORD
+ $(error BUTIDO_DATABASE_PASSWORD is undefined)
+endif
+ifndef BUTIDO_DATABASE_NAME
+ $(error BUTIDO_DATABASE_NAME is undefined)
+endif
diff --git a/examples/packages/1/README.md b/examples/packages/1/README.md
index 2531f20..4c680d2 100644
--- a/examples/packages/1/README.md
+++ b/examples/packages/1/README.md
@@ -7,6 +7,16 @@ to resemble a real packaging process cleanly, including downloads and even
failing builds (configurable via ENV variables).
+## Setup
+
+The top-level `shell.nix` file contains a list of environment variables that are
+required for butido and the Makefile to automagically find the right locations.
+
+The `shell.nix` file can be called with
+`nix-shell ./shell.nix --argstr example 1` to explicitely select the environment
+for example 1.
+
+
## Downloads
The downloads are done from localhost, where a (python) web server has to serve
@@ -21,16 +31,25 @@ The packages are dependend on eachother like this:
```
a
`- b
- | `- c
- | | `- h
| `- d
+ | | `- i
| `- e
+ | `- f
`- c
- `- f
`- g
- `- i
+ `- h
+ `- j
```
+## Database
+
+The database host is to be expected to run with the settings specified in the
+`shell.nix` file (see `example_1_env`).
+
+See `/scripts/dev-pg-container.sh` for how to start the container.
+Use `diesel db reset` to setup the database.
+
+
## Build
The actual build is done in /tmp, where directories are created for the sources,
diff --git a/examples/packages/1/repo/a/pkg.toml b/examples/packages/1/repo/a/pkg.toml
index 64364a2..6261999 100644
--- a/examples/packages/1/repo/a/pkg.toml
+++ b/examples/packages/1/repo/a/pkg.toml
@@ -1,17 +1,14 @@
name = "a"
version = "1"
+[sources.src]
+url = "http://localhost:8180/a-1.source"
+hash.hash = "eb68d0823f7047958133e66ebedc923825e8a8fe"
+
[dependencies]
runtime = ["b =2", "c =3"]
[phases]
-package.script = '''
- mkdir /outputs
- echo "#BUTIDO:PHASE:package"
- echo "#BUTIDO:PROGRESS:90"
-
- touch /outputs/a-1.pkg
-
- echo "#BUTIDO:PROGRESS:100"
- echo "#BUTIDO:STATE:OK:finished"
+build.script = '''
+ echo "Building {{name}} in version {{version}}"
'''
diff --git a/examples/packages/1/repo/b/pkg.toml b/examples/packages/1/repo/b/pkg.toml
index 2ca66e2..df8cd3f 100644
--- a/examples/packages/1/repo/b/pkg.toml
+++ b/examples/packages/1/repo/b/pkg.toml
@@ -1,18 +1,41 @@
name = "b"
version = "2"
+[sources.src]
+url = "http://localhost:8180/b-2.source"
+hash.hash = "89cad6f574693c02c8ecf94983ec20ffad43af0b"
+
+[dependencies]
+build = ["f =6"]
+runtime = ["d =4", "e =5"]
+
[environment]
-FOO = "bar"
-BAZ = "bla"
+FOO = "123"
+BAR = "bla"
[phases]
-package.script = '''
- mkdir /outputs
- echo "#BUTIDO:PHASE:package"
- echo "#BUTIDO:PROGRESS:90"
+build.script = '''
+ echo "Look my pretty variables: $FOO"
+ if [[ -z "$FOO" ]]; then
+ {{state "ERR" "Failed to find variable FOO"}}
+ exit 1
+ fi
+
+ if [[ "$FOO" != "123" ]]; then
+ {{state "ERR" "FOO is not equal to '123'"}}
+ exit 1
+ fi
+
+ echo "Look my pretty variables: $BAR"
+ if [[ -z "$BAR" ]]; then
+ {{state "ERR" "Failed to find variable BAR"}}
+ exit 1
+ fi
- touch /outputs/b-2.pkg
+ if [[ "$BAR" != "bla" ]]; then
+ {{state "ERR" "BAR is not equal to 'bla'"}}
+ exit 1
+ fi
- echo "#BUTIDO:PROGRESS:100"
- echo "#BUTIDO:STATE:OK:finished"
+ echo "Building {{name}} in version {{version}}"
'''
diff --git a/examples/packages/1/repo/c/pkg.toml b/examples/packages/1/repo/c/pkg.toml
index 538c576..67533fb 100644
--- a/examples/packages/1/repo/c/pkg.toml
+++ b/examples/packages/1/repo/c/pkg.toml
@@ -1,14 +1,15 @@
name = "c"
version = "3"
-[phases]
-package.script = '''
- mkdir /outputs
- echo "#BUTIDO:PHASE:package"
- echo "#BUTIDO:PROGRESS:90"
+[sources.src]
+url = "http://localhost:8180/c-3.source"
+hash.hash = "ee4110c6e42791861e5720646c965580a0ddae8d"
+
+[dependencies]
+runtime = ["g =7", "h =8"]
- touch /outputs/c-3.pkg
- echo "#BUTIDO:PROGRESS:100"
- echo "#BUTIDO:STATE:OK:finished"
+[phases]
+build.script = '''
+ echo "Building {{name}} in version {{version}}"
'''
diff --git a/examples/packages/1/repo/config.toml b/examples/packages/1/repo/config.toml
index fc0244b..1b63f06 100644
--- a/examples/packages/1/repo/config.toml
+++ b/examples/packages/1/repo/config.toml
@@ -1,31 +1,21 @@
# Configuration file for BUTIDO for this repository
-# repository of package definitions
-releases = "/tmp/example-3-releases"
-staging = "/tmp/example-3-staging"
-source_cache = "/tmp/example-3-sources"
-log_dir = "/tmp/example-3-logs"
+# In the example, these are configured via the environment.
+# See README.md
+#releases = "/tmp/example-1-releases"
+#staging = "/tmp/example-1-staging"
+#source_cache = "/tmp/example-1-sources"
+#log_dir = "/tmp/example-1-logs"
+#database_host = "localhost"
+#database_port = 5432
+#database_user = "pgdev"
+#database_password = "password"
+#database_name = "butido"
script_highlight_theme = "Solarized (dark)"
-# ####
-#
-# Log database configuration
-#
-# ####
-
-# The database to use
-#
-# Can be overridden via environment vairbale BUTIDO_DATABASE_URI or set via CLI.
-database_host = "localhost"
-database_port = 5432
-database_user = "pgdev"
-database_password = "password"
-database_name = "butido"
-
-
# Phases which can be configured in the packages
-available_phases = [ "unpack", "depinst", "configure", "build", "install", "package" ]
+available_phases = [ "checksource", "unpack", "build", "package" ]
[docker]
# Images which can be used to build
@@ -35,15 +25,15 @@ verify_images_present = true
# List of docker endpoints
[[docker.endpoints]]
-name = "example host name"
+name = "localhost"
uri = "http://0.0.0.0:8095"
endpoint_type = "http"
speed = 1
maxjobs = 10
-
[containers]
# environment variables which are allowed during container start
# This way, errors (typos) when passing environment to a build can be prevented
-allowed_env = [ "PATH" ]
+check_env_names = true
+allowed_env = [ "FOO", "BAR" ]
diff --git a/examples/packages/1/repo/d/pkg.toml b/examples/packages/1/repo/d/pkg.toml
new file mode 100644
index 0000000..ff4430d
--- /dev/null
+++ b/examples/packages/1/repo/d/pkg.toml
@@ -0,0 +1,14 @@
+name = "d"
+version = "4"
+
+[sources.src]
+url = "http://localhost:8180/d-4.source"
+hash.hash = "e8332116d7a7104f4affc10b6c65a93027441437"
+
+[dependencies]
+build = ["i =9"]
+
+[phases]
+build.script = '''
+ echo "Building {{name}} in version {{version}}"
+'''
diff --git a/examples/packages/1/repo/e/pkg.toml b/examples/packages/1/repo/e/pkg.toml
new file mode 100644
index 0000000..9bf14f6
--- /dev/null
+++ b/examples/packages/1/repo/e/pkg.toml
@@ -0,0 +1,11 @@
+name = "e"
+version = "5"
+
+[sources.src]
+url = "http://localhost:8180/e-5.source"
+hash.hash = "f2c844feb6ccb9e4977f256a5126aac77334ec5a"
+
+[phases]
+build.script = '''
+ echo "Building {{name}} in version {{version}}"
+'''
diff --git a/examples/packages/1/repo/f/pkg.toml b/examples/packages/1/repo/f/pkg.toml
new file mode 100644
index 0000000..c78e6fe
--- /dev/null
+++ b/examples/packages/1/repo/f/pkg.toml
@@ -0,0 +1,11 @@
+name = "f"
+version = "6"
+
+[sources.src]
+url = "http://localhost:8180/f-6.source"
+hash.hash = "1ad43418fb476e812c7c27c225a823eda89efc50"
+
+[phases]
+build.script = '''
+ echo "Building {{name}} in version {{version}}"
+'''
diff --git a/examples/packages/1/repo/g/pkg.toml b/examples/packages/1/repo/g/pkg.toml
new file mode 100644
index 0000000..caaea2f
--- /dev/null
+++ b/examples/packages/1/repo/g/pkg.toml
@@ -0,0 +1,11 @@
+name = "g"
+version = "7"
+
+[sources.src]
+url = "http://localhost:8180/g-7.source"
+hash.hash = "c7af27a237cb21368eb2b25a068e72283b528684"
+
+[phases]
+build.script = '''
+ echo "Building {{name}} in version {{version}}"
+'''
diff --git a/examples/packages/1/repo/h/pkg.toml b/examples/packages/1/repo/h/pkg.toml
new file mode 100644
index 0000000..eff3fdf
--- /dev/null
+++ b/examples/packages/1/repo/h/pkg.toml
@@ -0,0 +1,14 @@
+name = "h"
+version = "8"
+
+[sources.src]
+url = "http://localhost:8180/h-8.source"
+hash.hash = "387d6873dfbdbaf116e1091c8b11eaf406b98f8f"
+
+[dependencies]
+build = ["j =10"]
+
+[phases]
+build.script = '''
+ echo "Building {{name}} in version {{version}}"
+'''
diff --git a/examples/packages/1/repo/i/pkg.toml b/examples/packages/1/repo/i/pkg.toml
new file mode 100644
index 0000000..7545e0b
--- /dev/null
+++ b/examples/packages/1/repo/i/pkg.toml
@@ -0,0 +1,11 @@
+name = "i"
+version = "9"
+
+[sources.src]
+url = "http://localhost:8180/i-9.source"
+hash.hash = "11578a82ef30e5c9787f6a2342dec4b856c257d2"
+
+[phases]
+build.script = '''
+ echo "Building {{name}} in version {{version}}"
+'''
diff --git a/examples/packages/1/repo/j/pkg.toml b/examples/packages/1/repo/j/pkg.toml
new file mode 100644
index 0000000..a1b87c6
--- /dev/null
+++ b/examples/packages/1/repo/j/pkg.toml
@@ -0,0 +1,11 @@
+name = "j"
+version = "10"
+
+[sources.src]
+url = "http://localhost:8180/j-10.source"
+hash.hash = "96ef992ccecfcef89a6a964af8a83b88a1351129"
+
+[phases]
+build.script = '''
+ echo "Building {{name}} in version {{version}}"
+'''
diff --git a/examples/packages/1/repo/pkg.toml b/examples/packages/1/repo/pkg.toml
index f908065..b13f069 100644
--- a/examples/packages/1/repo/pkg.toml
+++ b/examples/packages/1/repo/pkg.toml
@@ -5,9 +5,7 @@ version_is_semver = false
patches = []
[sources.src]
-url = "https://github.com/user/repo/archive/sources.tar.gz"
hash.type = "sha1"
-hash.hash = "5e8bcaa3c758f84f01935a914e2bbf01309462ae"
[dependencies]
build = []
@@ -17,49 +15,57 @@ runtime = []
# can be overridden as well
[phases]
-unpack.script = '''
+checksource.script = '''
+ {{phase "Checking sources"}}
+ {{progress 0}}
+
+ echo "Sources for this Package:"
{{#each sources}}
- echo "{{@key}} {{this.url}}"
- echo " {{this.hash.hash}}"
- ls /inputs/{{@key}}-{{this.hash.hash}}.source
- {{/each}}
+ echo "{{@key}} : {{this.url}}"
+ echo "{{this.hash.type}}: {{this.hash.hash}}"
- mkdir /build
- echo "#BUTIDO:PHASE:unpack"
-'''
+ if [ ! -e /inputs/{{@key}}-{{this.hash.hash}}.source ]; then
+ {{state "ERR" "Failed to find source" }}
+ exit 1
+ fi
+ {{/each}}
+ {{progress 20}}
-# We use a depinst phase here because we don't want to add a Dockerfile to the
-# repo where we prepare a build container.
-# This is, of course, not be the way it would be done in a real-world scenario!
-depinst.script = '''
- {{phase "depinst"}}
- {{progress 0}}
- for n in {1..10}; do sleep 0.1; done
- {{progress 10}}
-'''
+ echo "All sources:"
+ echo "------------"
-configure.script = '''
- {{phase "configure-preparing"}}
- for n in {1..10}; do sleep 0.1; done
+ ls /inputs
- {{progress 20}}
- for n in {1..10}; do sleep 0.1; done
+ echo "------------"
'''
-build.script = '''
- {{phase "build"}}
+unpack.script = '''
+ {{phase "Unpacking sources"}}
- for n in {1..10}; do sleep 0.1; done
+ mkdir /build
+ {{#each sources}}
+ mv /inputs/{{@key}}-{{this.hash.hash}}.source /build/
+ {{/each}}
+ {{progress 40}}
- echo "#BUTIDO:PROGRESS:60"
+ echo "Moving dependencies to /build"
+ mv /inputs/*.pkg /build/
{{progress 60}}
+
+
+ ls /build
'''
-install.script = '''
- {{phase "install"}}
- for n in {1..10}; do sleep 0.1; done
+package.script = '''
+ {{phase "package"}}
+
+ mkdir /outputs
+ for f in /build/*; do
+ cat "$f" | sed 's,^, ,' >> /outputs/{{name}}-{{version}}.pkg
+ done
- {{progress 80}}
+ {{progress 100}}
+ {{state "OK" "Finished"}}
'''
diff --git a/examples/packages/1/sources/a-1.source b/examples/packages/1/sources/a-1.source
new file mode 100644
index 0000000..186e86d
--- /dev/null
+++ b/examples/packages/1/sources/a-1.source
@@ -0,0 +1 @@
+a-1
diff --git a/examples/packages/1/sources/b-2.source b/examples/packages/1/sources/b-2.source
new file mode 100644
index 0000000..99add72
--- /dev/null
+++ b/examples/packages/1/sources/b-2.source
@@ -0,0 +1 @@
+b-2
diff --git a/examples/packages/1/sources/c-3.source b/examples/packages/1/sources/c-3.source
new file mode 100644
index 0000000..fff5324
--- /dev/null
+++ b/examples/packages/1/sources/c-3.source
@@ -0,0 +1 @@
+c-3
diff --git a/examples/packages/1/sources/d-4.source b/examples/packages/1/sources/d-4.source
new file mode 100644
index 0000000..db8f742
--- /dev/null
+++ b/examples/packages/1/sources/d-4.source
@@ -0,0 +1 @@
+d-4
diff --git a/examples/packages/1/sources/e-5.source b/examples/packages/1/sources/e-5.source
new file mode 100644
index 0000000..a55d5b7
--- /dev/null
+++ b/examples/packages/1/sources/e-5.source
@@ -0,0 +1 @@
+e-5
diff --git a/examples/packages/1/sources/f-6.source b/examples/packages/1/sources/f-6.source
new file mode 100644
index 0000000..a959d8f
--- /dev/null
+++ b/examples/packages/1/sources/f-6.source
@@ -0,0 +1 @@
+f-6
diff --git a/examples/packages/1/sources/g-7.source b/examples/packages/1/sources/g-7.source
new file mode 100644
index 0000000..e0ede95
--- /dev/null
+++ b/examples/packages/1/sources/g-7.source
@@ -0,0 +1 @@
+g-7
diff --git a/examples/packages/1/sources/h-8.source b/examples/packages/1/sources/h-8.source
new file mode 100644
index 0000000..7f16a18
--- /dev/null
+++ b/examples/packages/1/sources/h-8.source
@@ -0,0 +1 @@
+h-8
diff --git a/examples/packages/1/sources/i-9.source b/examples/packages/1/sources/i-9.source
new file mode 100644
index 0000000..a1215d1
--- /dev/null
+++ b/examples/packages/1/sources/i-9.source
@@ -0,0 +1 @@
+i-9
diff --git a/examples/packages/1/sources/j-10.source b/examples/packages/1/sources/j-10.source
new file mode 100644
index 0000000..7c049e2
--- /dev/null
+++ b/examples/packages/1/sources/j-10.source
@@ -0,0 +1 @@
+j-10