You are viewing a plain text version of this content. The canonical link for it is here.
Posted to repository@apache.org by Tim Anderson <tm...@netspace.net.au> on 2003/11/15 04:21:17 UTC

[proposal] common build version specifier - v0.1

Overview
========

This proposal extends the URI Syntax proposal, v0.2:
http://nagoya.apache.org/eyebrowse/ReadMsg?listName=repository@apache.org&ms
gNo=367

The key aims of this proposal are to:

. formalise version-specifier for projects which
  provide formal and interim builds;

. provide a set of best practices for such projects; and

. enable tools to construct a URI to unambigously locate a
  particular project version using a set of known criteria


URI Components
==============

An absolute repository URI is written as follows:

  repository-uri = access-specifier "/" product-specifier "/"
                   version-specifier "/" artifact-specifier

This proposal defines version-specifier as follows:

  version-specifier = build
  build = formal-build | interim-build
  formal-build = [formal-build-designation "/"] version
  interim-build = interim-build-designation "/" version
                  [ "/" interim-version ]
  interim-version = "latest" | YYYYMMDD ["-" HHMM [SS]]
  formal-build-designation = "release" | ...
  interim-build-designation = "interim" | "nightly" | "snapshot" | ...
  version = "latest" | *pchar

  (pchar is per http://www.ietf.org/rfc/rfc2396.txt)

Build
-----
  Builds are separated into formal and interim builds.

  A formal build may be a final or milestone release. e.g:
    "1.0", "release/1.0", "1.0-beta1", "release/1.0-rc1"

  An interim build is an informal release, produced by
  a nightly build or an ad-hoc snapshot. e.g:
    "nightly/1.0/20031113", "snapshot/1.2beta1".

Version
-------
  Version is either "latest" or arbitrary, determined by the
  project or deployment tool.
  "latest" always refers to the latest version of a particular
  build, and may be supported using symbolic links, or via http
  redirection.

E.g:
  http://repo.apache.org/apache/commons-cli/release/l.0/...
  http://repo.apache.org/apache/commons-cli/release/l.1/...
  http://repo.apache.org/apache/commons-cli/release/latest/...
    -> symlink to ../1.1

Interim version
---------------
  The interim version is either a timestamp, or "latest".
  "latest" always refers to the latest interim version and
  may be supported using symbolic links, or via http
  redirection.

  http://repo.apache.org/apache/commons-cli/nightly/1.0/20031112/...
  http://repo.apache.org/apache/commons-cli/nightly/1.0/20031113/...
  http://repo.apache.org/apache/commons-cli/nightly/1.0/latest/...
    -> symlink to ../20031113

Rationale
=========

Optional build designation for formal builds
--------------------------------------------

<formal-build> is defined as:
  formal-build = [formal-build-designation "/"] version
  formal-build-designation = "release" | ...

The formal-build-designation is optional for those projects
which don't produce interim builds, or don't wish to add
another directory for formal releases. E.g:

  http://repo.apache.org/apache/commons-cli/l.0/...
  http://repo.apache.org/apache/commons-cli/l.1/...


Mandatory version in interim builds
-----------------------------------

<interim-build> is defined as:

  interim-build = interim-build-designation "/" version
                  [ "/" interim-version ]
  interim-version = "latest" | YYYYMMDD ["-" HHMM [SS]]

This enables support for multiple versions of builds, if
there are two or more concurrent development streams.
E.g, to support nightly builds of versions 1.0 and 2.0 of commons-cli:

  http://repo.apache.org/apache/commons-cli/nightly/1.0/20031112/...
  http://repo.apache.org/apache/commons-cli/nightly/1.0/20031113/...
  http://repo.apache.org/apache/commons-cli/nightly/1.0/latest/...
    -> symlink to ../20031113
  http://repo.apache.org/apache/commons-cli/nightly/2.0/20031112/...
  http://repo.apache.org/apache/commons-cli/nightly/2.0/20031113/...
  http://repo.apache.org/apache/commons-cli/nightly/2.0/latest/...
    -> symlink to ../20031113


Build designation naming conventions
------------------------------------

<formal-build-designation> and <interim-build-designation> are
defined as:

  formal-build-designation = "release" | ...
  interim-build-designation = "interim" | "nightly" | "snapshot" | ...

In other words, tools may use "release", "interim" etc, but may also
extend them to define their own.


Tool support
============

Tools can unambigously locate a project version given the following
criteria:
. formal or interim build-designation
  Optional. If not specified, assume formal build.
. version
  Mandatory.
. interim-version
  Optional. If specified, build designation must also be specified.

Example 1.
----------

Given:
  organisation = "apache"
  project = "commons-cli"
  version = "1.0"
  build-designation =
  interim-version =

The URI would be:
  http://repo.apache.org/apache/commons-cli/1.0

Example 2.
----------

Given:
  organisation = "apache"
  project = "commons-cli"
  version = "latest"
  build-designation =
  interim-version =

The URI would be:
  http://repo.apache.org/apache/commons-cli/latest

If two versions of commons-cli are available, "1.0" and "1.1",
the URI would resolve to:
  http://repo.apache.org/apache/commons-cli/1.1

Example 3.
----------

Given:
  organisation = "apache"
  project = "commons-cli"
  version = "1.1"
  build-designation = "snapshot"
  interim-version = 20031113

The URI would be:
  http://repo.apache.org/apache/commons-cli/snapshot/1.1/20031113

Example 4.
----------

Given:
  organisation = "apache"
  project = "commons-cli"
  version = "1.1"
  build-designation = "snapshot"
  interim-version = "latest"

The URI would be:
  http://repo.apache.org/apache/commons-cli/snapshot/1.1/latest

If two snapshot builds of commons-cli 1.1 are available,
"20031112" and "20031113", the URI would resolve to:
  http://repo.apache.org/apache/commons-cli/snapshot/1.1/20031113

Example 5.
----------

Given:
  organisation = "apache"
  project = "commons-cli"
  version = "latest"
  build-designation = "snapshot"
  interim-version = "latest"

The URI would be:
  http://repo.apache.org/apache/commons-cli/snapshot/latest/latest

If two versions or commons-cli are available, "1.0" and "1.1",
and two snapshot builds of commons-cli 1.1 are available,
"20031112" and "20031113", the URI would resolve to:
  http://repo.apache.org/apache/commons-cli/snapshot/1.1/20031113



RE: [proposal] common build version specifier - v0.1

Posted by Tim Anderson <tm...@netspace.net.au>.
> From: Adam R. B. Jack [mailto:ajack@trysybase.com]
> Sent: Saturday, 15 November 2003 2:54 PM
> To: repository@apache.org
> Subject: Re: [proposal] common build version specifier - v0.1
>
>
> Tim,
>
> I *love* your specifications, I really appreciate the
> clear/concise/explicit
> nature of them. I only wish you'd use Wiki not EyeBrowse as your
> persistent
> documentation tool. Wiki has versioning (so we can see older copies should
> we need to refer back) and such, and allows other to make (respectful)
> changes, and allows a view not cluttered throughout mail threads.
>
> I'm game to be your cut-n-paste-wallah if you really need one, but please
> (at least) refer to your proposals in the Wiki.
>
> regards
>

OK. I'm not particularly wiki literate (the formatting is a bit
off), but I've added/updated the proposals at:
  http://nagoya.apache.org/wiki/apachewiki.cgi?ASFRepository/Proposals

Regards,

Tim



Re: [proposal] common build version specifier - v0.1

Posted by "Adam R. B. Jack" <aj...@trysybase.com>.
Tim,

I *love* your specifications, I really appreciate the clear/concise/explicit
nature of them. I only wish you'd use Wiki not EyeBrowse as your persistent
documentation tool. Wiki has versioning (so we can see older copies should
we need to refer back) and such, and allows other to make (respectful)
changes, and allows a view not cluttered throughout mail threads.

I'm game to be your cut-n-paste-wallah if you really need one, but please
(at least) refer to your proposals in the Wiki.

regards

Adam
----- Original Message ----- 
From: "Tim Anderson" <tm...@netspace.net.au>
To: <re...@apache.org>
Sent: Friday, November 14, 2003 8:21 PM
Subject: [proposal] common build version specifier - v0.1


> Overview
> ========
>
> This proposal extends the URI Syntax proposal, v0.2:
>
http://nagoya.apache.org/eyebrowse/ReadMsg?listName=repository@apache.org&ms
> gNo=367
>
> The key aims of this proposal are to:
>
> . formalise version-specifier for projects which
>   provide formal and interim builds;
>
> . provide a set of best practices for such projects; and
>
> . enable tools to construct a URI to unambigously locate a
>   particular project version using a set of known criteria
>
>
> URI Components
> ==============
>
> An absolute repository URI is written as follows:
>
>   repository-uri = access-specifier "/" product-specifier "/"
>                    version-specifier "/" artifact-specifier
>
> This proposal defines version-specifier as follows:
>
>   version-specifier = build
>   build = formal-build | interim-build
>   formal-build = [formal-build-designation "/"] version
>   interim-build = interim-build-designation "/" version
>                   [ "/" interim-version ]
>   interim-version = "latest" | YYYYMMDD ["-" HHMM [SS]]
>   formal-build-designation = "release" | ...
>   interim-build-designation = "interim" | "nightly" | "snapshot" | ...
>   version = "latest" | *pchar
>
>   (pchar is per http://www.ietf.org/rfc/rfc2396.txt)
>
> Build
> -----
>   Builds are separated into formal and interim builds.
>
>   A formal build may be a final or milestone release. e.g:
>     "1.0", "release/1.0", "1.0-beta1", "release/1.0-rc1"
>
>   An interim build is an informal release, produced by
>   a nightly build or an ad-hoc snapshot. e.g:
>     "nightly/1.0/20031113", "snapshot/1.2beta1".
>
> Version
> -------
>   Version is either "latest" or arbitrary, determined by the
>   project or deployment tool.
>   "latest" always refers to the latest version of a particular
>   build, and may be supported using symbolic links, or via http
>   redirection.
>
> E.g:
>   http://repo.apache.org/apache/commons-cli/release/l.0/...
>   http://repo.apache.org/apache/commons-cli/release/l.1/...
>   http://repo.apache.org/apache/commons-cli/release/latest/...
>     -> symlink to ../1.1
>
> Interim version
> ---------------
>   The interim version is either a timestamp, or "latest".
>   "latest" always refers to the latest interim version and
>   may be supported using symbolic links, or via http
>   redirection.
>
>   http://repo.apache.org/apache/commons-cli/nightly/1.0/20031112/...
>   http://repo.apache.org/apache/commons-cli/nightly/1.0/20031113/...
>   http://repo.apache.org/apache/commons-cli/nightly/1.0/latest/...
>     -> symlink to ../20031113
>
> Rationale
> =========
>
> Optional build designation for formal builds
> --------------------------------------------
>
> <formal-build> is defined as:
>   formal-build = [formal-build-designation "/"] version
>   formal-build-designation = "release" | ...
>
> The formal-build-designation is optional for those projects
> which don't produce interim builds, or don't wish to add
> another directory for formal releases. E.g:
>
>   http://repo.apache.org/apache/commons-cli/l.0/...
>   http://repo.apache.org/apache/commons-cli/l.1/...
>
>
> Mandatory version in interim builds
> -----------------------------------
>
> <interim-build> is defined as:
>
>   interim-build = interim-build-designation "/" version
>                   [ "/" interim-version ]
>   interim-version = "latest" | YYYYMMDD ["-" HHMM [SS]]
>
> This enables support for multiple versions of builds, if
> there are two or more concurrent development streams.
> E.g, to support nightly builds of versions 1.0 and 2.0 of commons-cli:
>
>   http://repo.apache.org/apache/commons-cli/nightly/1.0/20031112/...
>   http://repo.apache.org/apache/commons-cli/nightly/1.0/20031113/...
>   http://repo.apache.org/apache/commons-cli/nightly/1.0/latest/...
>     -> symlink to ../20031113
>   http://repo.apache.org/apache/commons-cli/nightly/2.0/20031112/...
>   http://repo.apache.org/apache/commons-cli/nightly/2.0/20031113/...
>   http://repo.apache.org/apache/commons-cli/nightly/2.0/latest/...
>     -> symlink to ../20031113
>
>
> Build designation naming conventions
> ------------------------------------
>
> <formal-build-designation> and <interim-build-designation> are
> defined as:
>
>   formal-build-designation = "release" | ...
>   interim-build-designation = "interim" | "nightly" | "snapshot" | ...
>
> In other words, tools may use "release", "interim" etc, but may also
> extend them to define their own.
>
>
> Tool support
> ============
>
> Tools can unambigously locate a project version given the following
> criteria:
> . formal or interim build-designation
>   Optional. If not specified, assume formal build.
> . version
>   Mandatory.
> . interim-version
>   Optional. If specified, build designation must also be specified.
>
> Example 1.
> ----------
>
> Given:
>   organisation = "apache"
>   project = "commons-cli"
>   version = "1.0"
>   build-designation =
>   interim-version =
>
> The URI would be:
>   http://repo.apache.org/apache/commons-cli/1.0
>
> Example 2.
> ----------
>
> Given:
>   organisation = "apache"
>   project = "commons-cli"
>   version = "latest"
>   build-designation =
>   interim-version =
>
> The URI would be:
>   http://repo.apache.org/apache/commons-cli/latest
>
> If two versions of commons-cli are available, "1.0" and "1.1",
> the URI would resolve to:
>   http://repo.apache.org/apache/commons-cli/1.1
>
> Example 3.
> ----------
>
> Given:
>   organisation = "apache"
>   project = "commons-cli"
>   version = "1.1"
>   build-designation = "snapshot"
>   interim-version = 20031113
>
> The URI would be:
>   http://repo.apache.org/apache/commons-cli/snapshot/1.1/20031113
>
> Example 4.
> ----------
>
> Given:
>   organisation = "apache"
>   project = "commons-cli"
>   version = "1.1"
>   build-designation = "snapshot"
>   interim-version = "latest"
>
> The URI would be:
>   http://repo.apache.org/apache/commons-cli/snapshot/1.1/latest
>
> If two snapshot builds of commons-cli 1.1 are available,
> "20031112" and "20031113", the URI would resolve to:
>   http://repo.apache.org/apache/commons-cli/snapshot/1.1/20031113
>
> Example 5.
> ----------
>
> Given:
>   organisation = "apache"
>   project = "commons-cli"
>   version = "latest"
>   build-designation = "snapshot"
>   interim-version = "latest"
>
> The URI would be:
>   http://repo.apache.org/apache/commons-cli/snapshot/latest/latest
>
> If two versions or commons-cli are available, "1.0" and "1.1",
> and two snapshot builds of commons-cli 1.1 are available,
> "20031112" and "20031113", the URI would resolve to:
>   http://repo.apache.org/apache/commons-cli/snapshot/1.1/20031113
>
>


RE: [proposal] common build version specifier - v0.1

Posted by Tim Anderson <tm...@netspace.net.au>.
> From: Nick Chalko [mailto:nick@chalko.com]
> 
> http://nagoya.apache.org/wiki/apachewiki.cgi?ASFRepository/CommonB
> uildVersionSpecifier
> Currently has
> version-specifier = build
>  build = formal-build | interim-build
>  formal-build = [formal-build-designation "/"] version
> interim-build = interim-build-designation "/" version [ "/" 
> interim-version ]
> interim-version = timestamp | latest
> formal-build-designation = "release" | ...
> interim-build-designation = "interim" | "nightly" | "snapshot" | ...
> version = version-name | latest
> version-name = pchar+
> timestamp = YYYYMMDD ["." HHMM [SS]]
> latest = "latest"
> 
> 
> I think we need  (not sure of syntax)
> 
> version-name  =  (~ formal-build-designation & ~ 
> interim-build-designation & ~ latest )  & pchar+
> 
> In other words if  formal-build-designation is optional then  we can't 
> name a version "release", "latest","snapshot"  etc.
> 
> Seems a reasonable restriction but we must annotate it.
> 

Not sure either. Yours could be simplified to:
  version-name = pchar+ & ~(formal-build-designation | 
                            interim-build-designation | latest)

Also, formal-build-designation and interim-build-designation
could be tightened to remove "...", although this prevents
extension.

-Tim

(off till Thursday. No more noise from me till then :)



Re: [proposal] common build version specifier - v0.1

Posted by Nick Chalko <ni...@chalko.com>.
http://nagoya.apache.org/wiki/apachewiki.cgi?ASFRepository/CommonBuildVersionSpecifier
Currently has
version-specifier = build
 build = formal-build | interim-build
 formal-build = [formal-build-designation "/"] version
interim-build = interim-build-designation "/" version [ "/" 
interim-version ]
interim-version = timestamp | latest
formal-build-designation = "release" | ...
interim-build-designation = "interim" | "nightly" | "snapshot" | ...
version = version-name | latest
version-name = pchar+
timestamp = YYYYMMDD ["." HHMM [SS]]
latest = "latest"


I think we need  (not sure of syntax)

version-name  =  (~ formal-build-designation & ~ 
interim-build-designation & ~ latest )  & pchar+

In other words if  formal-build-designation is optional then  we can't 
name a version "release", "latest","snapshot"  etc.

Seems a reasonable restriction but we must annotate it.