This project builds the following artifacts:
- A docker image that can be used to run this application stand-alone.
Drivers needed for jdbc/jms connection can be added to ./src/main/drivers and will become part of the built image under /opt/frank/drivers.
For drivers that are only needed for local development or CI/CD, it is recommended to instead place the driver in the ./contrib folder somewhere and mount the driver
in the Docker Compose file. For example:
services:
frank:
volumes:
- ./contrib/activemq/drivers/activemq-all-6.2.0.jar:/opt/frank/drivers/activemq-all-6.2.0.jarDocker Compose file compose.frank.loc.yaml brings up an instance for local development.
It is recommended to a 'sync+restart' watch action for each configuration's 'DeploymentSpecifics' files. This ensures that the container is automatically restarted when a change is made in it. Additionally, it is recommended to set the 'classLoaderType' to 'ScanningDirectoryClassLoader', so that the Frank!Framework automatically reloads the configuration when changes are made to it.
To use this Docker Compose file:
docker compose -f ./compose.frank.loc.yaml up --build --force-recreate --watch
Arguments:
--build- Builds a new image from your local source.--force-recreate- Eventhough you built a new image, by default Docker reuses the already existing container. This forces Docker to recreate the container, which will then use your newly built image to build the new container from.--watch- Use the Docker Watch functionality to automatically sync, restart or rebuild the container when certain files in your local source change. Which files/folders trigger what action can be found in the Docker Compose file under thefrankservice, in thedevelop.watchsection.
Access the Frank!Console by navigating to http://frank.localtest.me:8080 orhttp://localhost:8080/.
Frank!Flow is included to provide a visual representation of the integration's flow. It allows users to visually configure adapters by dragging and connecting components in a graphical environment, rather than directly editing XML code. This makes the Frank!Framework more accessible, especially for users who are less familiar with XML.
Access Frank!Flow by navigating to http://frank-flow.localtest.me:8080 orhttp://localhost:8080/.
-
Navigate to "docusaurus" subfolder.
cd ./docusaurus -
Install dependencies.
npm install -
Serve Docusaurus webserver locally.
./node_modules/.bin/docusaurus.cmd startBy default it is served at
http://localhost:3000/. -
Basic guide on how to use Docusaurus and a styleguide can be found at
./docusaurus/docs/_README.md.
- Navigate to the 'docusaurus' subfolder:
cd ./docusaurus - Update dependencies:
npm i @docusaurus/core@latest @docusaurus/preset-classic@latest @docusaurus/theme-mermaid@latest @docusaurus/module-type-aliases@latest @docusaurus/tsconfig@latest @docusaurus/types@latest
The 'Skeleton' project template repository will always stay up-to-date with the latest developments and best practices. It is recommended to merge changes from the Skeleton repo every one or two months. Otherwise projects will over time become less and less compatible with the Skeleton project. This leads to extra troubleshooting work, because usually the issues you might run into are already fixed in the Skeleton repo. Additionally, the Skeleton repo ia regularly expanded with new tools and features to make development and maintenance easier and faster.
To merge changes from the Skeleton repo, the Skeleton repo needs to be added as an upstream. Because of the way GitHub template repositories work, the project's Git history is not related to the Skeleton repo's
Git history. Because of this, it is needed to merge with the --allow-unrelated-histories argument. Unfortunatly this creates very ugly and hard to resolve merge conflicts, because Git can't use the commit history
to diff properly. To resolve this, it is recommended to do a rebase once instead of a merge. This will apply every single commit in the project repo on top of the Skeleton repo's Git history. After a rebase, future
merging should be as easy as merging simple PR, as for Git the project repo is now effectively a fork of the Skeleton repo with a shared Git History.
- Add the Skeleton repo as upstream.
git remote add upstream https://github.com/wearefrank/skeleton.git - Fetch from upstream.
git fetch upstream - Create and switch to new branch.
git checkout -b <branchname-for-upstream-changes> - Merge from upstream.
git merge upstream/main --allow-unrelated-histories - Stage and commit changes.
git add . git commit -m "<commit message>" - Create Pull Request.
We use conventional commits, see https://www.conventionalcommits.org/en/v1.0.0/. Releases are created automatically by GitHub Actions, see .github/workflows/ci.yml and .github/workflows/release.yml.
Please take care to write meaningful commit messages that result in meaningful entries in CHANGELOG.md. Here is an example of the commit message for a breaking change:
chore: example of a chore that breaks
BREAKING: This is what breaks
This commit message appears as follows in the release notes:
A breaking change means that this version is not backwards compatible with the previous release. A breaking change should result in a major release (first number of semantic version is incremented). Please note the following:
- The word BREAKING should appear on the last line of the commit message.
- The word BREAKING is followed by a
:and a description. This description appears in the release notes in a bullet that explains what is breaking. - The commit type (e.g. chore) is still relevant for breaking changes. This information appears in the release notes in the same way as a non-breaking change.
- For non-breaking changes, omit the line with BREAKING and make a commit message like the first line shown.
Here is a checklist for testing the CI/CD.
- Testing goes best when you make hot fixes on the main branch. Check with the team that you are allowed to do this.
- Do a commit on main that has a commit message starting with
fix:. The following should happen:- The pipeline succeeds - this checks all authorizations are in place.
- A commit with a message starting with
chore:has been added automatically. - The extra commit updates files
src/main/resources/BuildInfo.properties,configurations/{{ cookiecutter.configuration_name }}/BuildInfo.properties,publiccode.yamlandCHANGELOG.md. - These files should have trustworthy contents - speaks for itself.
- On GitHub, there is a tag for the new version that starts with
v. For example if the new release is3.2.1then the tag should bev3.2.1. You can get this tag usinggit fetch originon the command line. - The docker image for the release has been created on http://www.dockerhub.com. The
latesttag should have been updated - creation time should be the current time. Depending on the type of release, the3.2.1, the3.2or the3tags should be the current date. - Check on dockerhub that tags that should not have been updated do not have the current time as creation time.
- Run the docker image using
docker run -p 8080:8080 wearefrank/{{ cookiecutter.instance_name_lc }}:3.2.1. Check the name of the docker container you started usingdocker ps -a. Login to the docker container usingdocker exec -it <container name> bash. Check that/opt/frank/resources/BuildInfo.propertiesand/opt/frank/configurations/{{ cookiecutter.configuration_name }}/BuildInfo.propertiescontain the right version and the right date.
- Check a breaking change like above. This should update the major version.
- Do a commit with [skip ci] in the commit message. It should not make a release and it should not push a docker image.
- Make a pull request. Check that no release is made and that no docker image is pushed.
