JFPatch as a service is actually a generic cloud based RISC OS build system. It can also be supplied a Zip archive, as described on the home page, which contains the JFPatch source and patch files, and it will build these. This is only one of the modes in which it can function. If the Zip archive contains a configuration file, the JFPatch as a service system will interpret this as build instructions and return the results.
The build configuration is held in a file with the RISC OS filename '
/robuild/yml' or '
/robuild'. The YAML format has been allocated the filetype &F74, although the file does not have to have this filetype assigned to it.
The file may be stored in the Zip archive using either RISC OS zip conventions (using the
ARC0 extra field, as used by most RISC OS tools), or the standard unix conventions, with or without NFS encoding of the filename (ie, the file in the Zip can be called '
.robuild.yml', or '
.robuild.yml,f74' or any of the other variations.
The file is used to define how the build should be performed. The file must contain a dictionary with the following elements:
source: Defines where the source should be obtained from. Not currently implemented.
jobs: Defines a dictionary of the build jobs which the file declares. Only one job may be defined at present, which it is recommended be called '
jobs dictionary may contain the following keys:
env: Declares a dictionary of system variables which should be set before the build.
script: Declares a list of the RISC OS commands to run. Failure of any command will fail the build.
artifacts: Declares a list of artifacts that should be returned. Only one item can exist at present
artifacts list items are a dictionary describing how they artifacts are to be
path: Declares the path which will be archived.
The YAML file content is restricted to simple expressions. Flow content (eg JSON strings), block strings, anchors and aliases, directives and types are not supported.
The build environment that the service executes files under is a variant of RISC OS and can function as you might expect RISC OS to function. There are limitations, however, which are based on the implementation, the nature of the service and security. These limitations are subject to change at any time, but the following are the most significant:
- There's no WindowManager. Wimp Tasks don't exist.
- The build service has no interactive components. You cannot type commands.
- There is no graphics system. That means no sprites and no frame buffer.
- There is no sound system.
- There is no printer or serial system.
- There is no FileCore. There's also no Fileswitch registerable filesystems.
- The filesystem is ephemeral. Every build job is independant from every other job.
- There is no boot sequence. That means that none of the variables you might see on a native system will exist.
The build environment has the following tools installed:
amu- A Make Utility (RISC OS make tool).
cc- RISC OS ARM C compiler.
libfile- RISC OS ARM library management tool.
link- RISC OS ARM linker.
objasm- RISC OS ARM assembler.
CMunge- Module header generator tool (CMHG replacement).
perl- Perl 5.0.0 interpreter.
ResGen- ResourceFS file creation tool.
bison- GNU Parser generator
flex- GNU Lexical parser generator
sed- GNU sed, a text stream editor.
jfpatch- JFPatch, preprocessing ARM assembler.
p2c- Pascal to C conversion tool.
There are libraries and headers for the C and Pascal libraries present.
An example file, used in the LineEditor build.