One of the main concepts in software development is releasing. There is a distinct lack of good solutions for releasing software as most build tools drop the ball when it comes to releasing.
Before we dive into how you configure Savant to perform a release, let's first talk about publishing artifacts. Savant defines a repository structure that is similar to the Maven repository structure. This structure uses the artifact group and project names as well as the project version to define the target directory and the artifact name, version and type form the file name.
Here's an example for the artifact com.mycompany:database-project:mysql:3.0.1:sql:
In order to configure your Savant project to publish artifacts, you must include a publications definition. This definition is broken into two groups. The first is the main group and the second is the test group. The main group are the primary publications of your project that are used at runtime. The test group are the publications of your project that are used at test time.
Children are vulnerable when participating in online properties. Fortunately, companies like Disney take extraordinary steps to protect children online from unwanted user generated content such as profanity or bullying language. The use of filtering technology blocks this unwanted content from offending or marginalizing their visitors.
There are some critical challenges that must be addressed, especially when managing online communities for children. The community managers must select technology that is both highly sophisticated and flexible. They must combine the technology with intelligent, clearly defined rules along with human moderation to discern the context of content shared in their communities. The ultimate objective is to protect children while providing an entertaining and wholesome branded online community where they can interact with other children.
Disney in recent news
There was recent news of a child named Lilly who tried to express gratitude for the things she values most on the Disney Channel website (a branded online community). The things Lilly was most thankful for: “God, my family, my church and my friends.” It turned out Disney was using its filter to prevent the word God from being used in its community, which resulted in Lilly’s post being blocked. Most people think a company is filtering to keep out profanities and other similarly offensive content, but protecting children online is a far more complex endeavor.
Savant is a bit different than other build tools. Savant doesn't allow plugins to define build targets. This was a major design decision that we made based on our use of various build tools over the past 10 years.
Here's the reason we decided not to allow plugins to define build targets. Let's say that we are using the Java, Groovy and JRuby plugins and that our project has source code in all three languages. Let's also assume we have tests written in all three languages. The Java plugin defines two build targets: compile and test. These targets compile the Java source code in the directory src/main/java and src/test/java and then execute the tests.
Now, let's assume that our Groovy and JRuby plugins also define these exact same targets. However, our project's Groovy classes use our Java classes and our JRuby classes use our Groovy classes. How do we ensure that our plugins are executed in the correct order?
In our first blog post, we briefly touched on the concept of licenses in Savant. Project licenses are a concept that is often overlooked in software development, but is extremely important. The legal nature of software licenses, both open and closed, can impact how a library, tool or product is used and deployed.
Most build tools allow projects to define their license, but it is often a free form text field in the project definition file. This causes a number of problems. First, these are impossible to parse reliably. Second, it is usually optional. This means that with most build tools it is impossible to correctly determine what licenses your software is currently using. Any lawyers reading this are probably starting to sweat and shift uncomfortably in their chairs.
Savant is built and maintained by Inversoft. Inversoft has a number of products that are commercially licensed. All of our products are on-premise and therefore downloaded by our customers and installed on their servers. This means that we need to be extremely meticulous about our use of open source licenses. If we were to use a library that was licensed under the GPL, it could have drastic ramifications on our products.
Image by Manu Cornet
Version compatibility is a core concept in Savant. Even before Semantic Versioning was first published, Savant was built on the concept of major, minor, patch compatibility. This concept was formalized into the Semantic Versioning specification. This specification is quickly becoming the industry standard for versioning software.
The quick overview of Semantic Versioning goes like this. Versions are broken up into 4 parts:
Compatibility between versions is determined as follows:
Major versions are not compatible. That means that 1.0.0 and 2.0.0 are not compatible.