<feed xmlns='http://www.w3.org/2005/Atom'>
<title>craft, branch main</title>
<subtitle>Build automation tool for Linux</subtitle>
<id>https://cgit.xengineering.eu/craft/atom</id>
<link rel='self' href='https://cgit.xengineering.eu/craft/atom'/>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/'/>
<updated>2025-04-21T09:24:41Z</updated>
<entry>
<title>Fix syslinux installation</title>
<updated>2025-04-21T09:24:41Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2025-04-21T09:24:41Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=8f1e44de648e2c3a0a7bb6aa827dacf5ee563478'/>
<id>urn:sha1:8f1e44de648e2c3a0a7bb6aa827dacf5ee563478</id>
<content type='text'>
The `syslinux.cfg` file needs to be copied explicitly. This likely
changed upstream. Otherwise the `sed` call fails and the system is not
bootable.
</content>
</entry>
<entry>
<title>Remove duplicated network config</title>
<updated>2024-07-30T15:46:29Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-30T15:46:15Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=86c9fcc747374e29a9b3af7f2742e28921bfba52'/>
<id>urn:sha1:86c9fcc747374e29a9b3af7f2742e28921bfba52</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Switch to execution in QEMU virtual machine</title>
<updated>2024-07-29T18:20:22Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-28T17:17:18Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=c90f9c8d67bf178878f5b0e6328f7c38808b5013'/>
<id>urn:sha1:c90f9c8d67bf178878f5b0e6328f7c38808b5013</id>
<content type='text'>
This ensures that the build environment is exactly the same. Furthermore
security risks for the host are minimized.
</content>
</entry>
<entry>
<title>Enable internet access for VM</title>
<updated>2024-07-29T18:05:41Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-29T18:04:06Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=9ca8bd760a33f3758a044299357f0732617b936b'/>
<id>urn:sha1:9ca8bd760a33f3758a044299357f0732617b936b</id>
<content type='text'>
It is planned that the sources are first directly downloaded into the
VM. Later they will be cloned on the host, transmitted via rsync to the
VM and the artifacts downloaded from the VM to make the build process
completely offline for reproducibility.
</content>
</entry>
<entry>
<title>Re-introduce password setting in VM preparation</title>
<updated>2024-07-28T17:14:18Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-28T17:14:18Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=5bea4c50e7afd39ae64bb2b80c49e4a81650be1b'/>
<id>urn:sha1:5bea4c50e7afd39ae64bb2b80c49e4a81650be1b</id>
<content type='text'>
This is useful to log into the VM manually e.g. for package updates.
</content>
</entry>
<entry>
<title>Wait for VM to boot</title>
<updated>2024-07-28T16:37:11Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-28T11:18:23Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=419fe88d38145973ef9aa387e877be402c5e7e28'/>
<id>urn:sha1:419fe88d38145973ef9aa387e877be402c5e7e28</id>
<content type='text'>
This waits for a little delay and then tries to run `true` via SSH on
the virtual machine. If this does not work for a maximum amount of
attempts a fatal error is raised and an appropriate log message is
written.
</content>
</entry>
<entry>
<title>Switch to SSH keys instead of passwords</title>
<updated>2024-07-28T11:08:26Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-28T11:08:26Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=1b78d4af89791791b68b51a72cbcf0775038108d'/>
<id>urn:sha1:1b78d4af89791791b68b51a72cbcf0775038108d</id>
<content type='text'>
This is better for automation and security (which of course is only a
thing if the default key is not used).
</content>
</entry>
<entry>
<title>Move from busybox ash to sh</title>
<updated>2024-07-21T15:38:46Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-21T15:38:46Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=e08829ca3870a3a802ac756b9194b1217da30d0f'/>
<id>urn:sha1:e08829ca3870a3a802ac756b9194b1217da30d0f</id>
<content type='text'>
`busybox` is not installed inside the current VM and there is no strict
reason to use it. `sh` instead should be present on any targeted system.
</content>
</entry>
<entry>
<title>Startup VM parallel to craft execution on host</title>
<updated>2024-07-21T15:34:56Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-21T15:20:57Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=1b4affb524536ca904f09b0de65fddad3be2a75b'/>
<id>urn:sha1:1b4affb524536ca904f09b0de65fddad3be2a75b</id>
<content type='text'>
This prepares moving the workbench to the virtual machine. It
furthermore adds the following command line arguments:

- image
- port

See `craft --help` or the init() function for details.
</content>
</entry>
<entry>
<title>Remove craft.sh concept / add --task argument</title>
<updated>2024-07-21T12:58:20Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-21T12:58:20Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=0db0ddcc421a5c2a85ac614d1f62e3e3374994a2'/>
<id>urn:sha1:0db0ddcc421a5c2a85ac614d1f62e3e3374994a2</id>
<content type='text'>
There will likely be a way how a source repository can specify the
default shell commands to build itself for craft. If this will be a pure
shell file, YAML, JSON or something else is not clear for now.

This commit removes the lookup of the craft.sh file and instead adds the
--task command line argument to specify that script code.

This might only be a temporary solution but is the best fit for now.
</content>
</entry>
<entry>
<title>Add missing docs for -repo and -commit</title>
<updated>2024-07-21T12:48:19Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-21T12:48:19Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=1259c086a52f12a0a40650f2389d3401d9274144'/>
<id>urn:sha1:1259c086a52f12a0a40650f2389d3401d9274144</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Switch order of startup and exit log message</title>
<updated>2024-07-21T12:40:47Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-21T12:40:47Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=8c95d2ea4b793d1f1eb4ffa85fa621318b00e8e3'/>
<id>urn:sha1:8c95d2ea4b793d1f1eb4ffa85fa621318b00e8e3</id>
<content type='text'>
While the exit log message is prefixed with `defer` and thus called at
the end of the main function it is in theory possible that the startup
log message fails. This would result in a exit message without startup
message which is confusing.

Furthermore it is not intuitive while reading the code to see the exit
message first.
</content>
</entry>
<entry>
<title>Document how to log into the guest VM with SSH</title>
<updated>2024-07-21T12:26:00Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-21T12:26:00Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=c1adc25b1d4e0190ba1e38c9f4ea468770f1bb22'/>
<id>urn:sha1:c1adc25b1d4e0190ba1e38c9f4ea468770f1bb22</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Document how to run the VM for builds</title>
<updated>2024-07-21T12:19:26Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-21T12:19:26Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=2e59b2390e27df6f5be576db8a56e2f14f269bcc'/>
<id>urn:sha1:2e59b2390e27df6f5be576db8a56e2f14f269bcc</id>
<content type='text'>
This includes:

- read-only / snapshot mode
- port forwarding guest 22 to host 9999
- internet access
- no visual display, serial only
</content>
</entry>
<entry>
<title>Add missing git package to install list</title>
<updated>2024-07-20T17:25:42Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-20T17:25:42Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=f90cd583331d4637eecec76b464298aee5f15270'/>
<id>urn:sha1:f90cd583331d4637eecec76b464298aee5f15270</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Enable SSH daemon in guest VM and allow root login</title>
<updated>2024-07-20T17:17:10Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-20T17:17:10Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=c556a9aa3e1714ba1e414e6135ab4c1a80605996'/>
<id>urn:sha1:c556a9aa3e1714ba1e414e6135ab4c1a80605996</id>
<content type='text'>
The guest VM should be accessible via SSH.
</content>
</entry>
<entry>
<title>Document how to build an Arch Linux Guest VM</title>
<updated>2024-07-20T16:33:02Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-20T13:03:25Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=2f2210b8ebf37a2737806b6841ce52a4ed26fa29'/>
<id>urn:sha1:2f2210b8ebf37a2737806b6841ce52a4ed26fa29</id>
<content type='text'>
This is important to document how the guest VM is built since the image
will not be committed.
</content>
</entry>
<entry>
<title>Drop Git hook logic</title>
<updated>2024-07-20T12:42:06Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-20T12:42:06Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=9e006275150cde0c1102b11701481597fcd6527d'/>
<id>urn:sha1:9e006275150cde0c1102b11701481597fcd6527d</id>
<content type='text'>
This might be re-used later but the new goal is to make craft an
independent build automation tool or service which might be called by a
later provided git hook.

Nevertheless the primary target for now is to build something which
executes a build based on a repository reference but not triggered by a
Git hook.
</content>
</entry>
<entry>
<title>Execute build function from craft.sh</title>
<updated>2024-07-06T20:25:09Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-06T20:25:09Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=c80ed2f05dec7080918f4766650c8d821e8a14ff'/>
<id>urn:sha1:c80ed2f05dec7080918f4766650c8d821e8a14ff</id>
<content type='text'>
craft.sh is the script which needs to be located inside the repository
root to define how the repository should be used.

The first defined function is `build()` which is used to build the
repository content.
</content>
</entry>
<entry>
<title>Improve submodule update performance significantly</title>
<updated>2024-07-06T11:02:17Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-06T11:02:17Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=489cc1fa91bb5c8b6ca84e53443ff3d772937b53'/>
<id>urn:sha1:489cc1fa91bb5c8b6ca84e53443ff3d772937b53</id>
<content type='text'>
This commit add the usage of shallow submodule updates. Thus after
checking out the targeted commit of the parent repository only the
required commits of the submodules are fetched.
</content>
</entry>
<entry>
<title>Implement recursive submodule update</title>
<updated>2024-07-06T10:25:13Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-06T10:25:13Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=784991a344f3cd27e5ddf6ae92f39def540032b3'/>
<id>urn:sha1:784991a344f3cd27e5ddf6ae92f39def540032b3</id>
<content type='text'>
This adds support for repositories having submodules. Nevertheless all
the required clone operations are complete which makes this process time
consuming depending on the list of submodules.
</content>
</entry>
<entry>
<title>Prepare simple workbench</title>
<updated>2024-07-06T10:18:30Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-06T09:35:47Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=ac426d988737f3a6161c93767b4801243998e8c7'/>
<id>urn:sha1:ac426d988737f3a6161c93767b4801243998e8c7</id>
<content type='text'>
After detecting an update of a Git ref craft should create a throw-away
Git clone of the repository with the new Git commit checked out. This is
the starting point for executing build and test steps.

Improving performance by tree-less or shallow clones and updating
submodules is not yet implemented.
</content>
</entry>
<entry>
<title>Modify log output</title>
<updated>2024-07-06T07:14:10Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-06T07:14:10Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=b8f4ee66c9bcf1e31b233a9beaa0aa693eae2a89'/>
<id>urn:sha1:b8f4ee66c9bcf1e31b233a9beaa0aa693eae2a89</id>
<content type='text'>
- exit message
- more consistent messages
- refactoring to implement this
</content>
</entry>
<entry>
<title>README: Add build and usage documentation</title>
<updated>2024-07-05T20:08:35Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-05T20:08:35Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=2942b48b87a08de1dab8ca23c66fc5ffa659c50b'/>
<id>urn:sha1:2942b48b87a08de1dab8ca23c66fc5ffa659c50b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Determine and validate Git hook type</title>
<updated>2024-07-05T19:55:06Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-05T19:55:06Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=6af40875aadc742101c128fad37af6065996c3ed'/>
<id>urn:sha1:6af40875aadc742101c128fad37af6065996c3ed</id>
<content type='text'>
Since craft should only be referenced by a symlink like that:

    ln -s /usr/bin/craft myrepo/.git/hooks/post-receive

It is important to detect the hook type, in this case 'post-receive'.

This commit also validates that the determined hook type is supported.
Currently only the post-receive hook is supported.
</content>
</entry>
<entry>
<title>Add build.sh</title>
<updated>2024-07-05T19:23:37Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-05T19:23:37Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=72b68a55e417273110f5db13c95c8916e1f7b809'/>
<id>urn:sha1:72b68a55e417273110f5db13c95c8916e1f7b809</id>
<content type='text'>
This documents how to build craft.
</content>
</entry>
<entry>
<title>Print current working directory</title>
<updated>2024-07-05T19:21:37Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2024-07-05T19:21:37Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=8af796c9379c697bf56feb9ec4d33b43cdccd472'/>
<id>urn:sha1:8af796c9379c697bf56feb9ec4d33b43cdccd472</id>
<content type='text'>
When craft is used - as intended - as Git post-receive hook the current
working directory should always be the .git folder. In case of bare
repositories this should point to the bare repository.
</content>
</entry>
<entry>
<title>Add stdin parsing for Git post-receive hook</title>
<updated>2023-09-02T19:24:20Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2023-08-30T19:19:41Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=e182282eb387d8c73d82e81d2e1fc1aaf5734810'/>
<id>urn:sha1:e182282eb387d8c73d82e81d2e1fc1aaf5734810</id>
<content type='text'>
The first program for this repsoitory will be a Git post-receive hook
which will be used at any source repository which is registered for
automated builds.
</content>
</entry>
<entry>
<title>Add README.md with brief project description</title>
<updated>2023-09-02T19:24:14Z</updated>
<author>
<name>xengineering</name>
<email>me@xengineering.eu</email>
</author>
<published>2023-08-30T18:24:08Z</published>
<link rel='alternate' type='text/html' href='https://cgit.xengineering.eu/craft/commit/?id=aee359703596eb7e25abb25062e35396bd4dc352'/>
<id>urn:sha1:aee359703596eb7e25abb25062e35396bd4dc352</id>
<content type='text'>
</content>
</entry>
</feed>
