Giter Club home page Giter Club logo

ocaml-ci-scripts's Introduction

⚠️ CAUTION

The developer team released OCaml 5.0.0 in December 2022. This release sports a full rewrite of its runtime system for shared-memory parallel programming using domains and native support for concurrent programming using effect handlers.

Owing to the large number of changes, the initial 5.0 release is more experimental than usual. It is recommended that all users wanting a stable release use the 4.14 release which will continue to be supported and updated while 5.x reaches feature and stability parity. Similarly, if you need one of the ports not yet supported in the 5.0 release you must use the 4.14 release.

The initial release of OCaml 5.0 only supports the native compiler under ARM64 and x86-64 architectures under Linux, macOS and the BSDs. On Windows, only the MinGW-w64 port is supported in OCaml 5.0 and the Cygwin port is restored in 5.1. On Linux, native code support for RISC-V and s390x/IBM Z is available in OCaml 5.1 and in 5.2 for Power.

❗ From OCaml 5.0 onwards, native compilation is available only on 64-bit systems. Native compilation on 32-bit systems is no longer available, nor are there plans to bring it back. The bytecode compiler will continue to work on all architectures.

Branch trunk Branch 5.2 Branch 5.1 Branch 5.0 Branch 4.14

Github CI Build Status (trunk branch) Github CI Hygiene Status (trunk branch) AppVeyor Build Status (trunk branch)

Github CI Build Status (5.2 branch) AppVeyor Build Status (5.2 branch)

Github CI Build Status (5.1 branch) AppVeyor Build Status (5.1 branch)

Github CI Build Status (5.0 branch) AppVeyor Build Status (5.0 branch)

Github CI Build Status (4.14 branch) AppVeyor Build Status (4.14 branch)

README

Overview

OCaml is a functional, statically-typed programming language from the ML family, offering a powerful module system extending that of Standard ML and a feature-rich, class-based object system.

OCaml comprises two compilers. One generates bytecode which is then interpreted by a C program. This compiler runs quickly, generates compact code with moderate memory requirements, and is portable to many 32 or 64 bit platforms. Performance of generated programs is quite good for a bytecoded implementation. This compiler can be used either as a standalone, batch-oriented compiler that produces standalone programs, or as an interactive REPL system.

The other compiler generates high-performance native code for a number of processors. Compilation takes longer and generates bigger code, but the generated programs deliver excellent performance, while retaining the moderate memory requirements of the bytecode compiler. The native-code compiler currently runs on the following platforms:

Tier 1 (actively maintained) Tier 2 (maintained when possible)

x86 64 bits

Linux, macOS, Windows, FreeBSD

NetBSD, OpenBSD, OmniOS (Solaris)

ARM 64 bits

Linux, macOS

FreeBSD, OpenBSD, NetBSD

Power 64 bits

Linux (little-endian, ABIv2)

Linux (big-endian, ABIv2)

RISC-V 64 bits

Linux

IBM Z (s390x)

Linux

Other operating systems for the processors above have not been tested, but the compiler may work under other operating systems with little work.

All files marked "Copyright INRIA" in this distribution are Copyright © 1996-2023 Institut National de Recherche en Informatique et en Automatique (INRIA) and distributed under the conditions stated in file LICENSE.

Installation

See the file INSTALL.adoc for installation instructions on machines running Unix, Linux, macOS, WSL and Cygwin. For native Microsoft Windows, see README.win32.adoc.

Documentation

The OCaml manual is distributed in HTML, PDF, and Emacs Info files. It is available at

Availability

The complete OCaml distribution can be accessed at

Releases

More information about when and how new releases of OCaml are published is available at release-info/introduction.md, see also release-info/calendar.md for a prospective calendar for future OCaml versions. For past versions, release-info/News contains a short description of major changes in previous versions.

Keeping in Touch with the Caml Community

There is an active and friendly discussion forum at

The OCaml mailing list is the longest-running forum for OCaml users. You can email it at

You can subscribe and access list archives via the Web interface at

There also exist other mailing lists, chat channels, and various other forums around the internet for getting in touch with the OCaml and ML family language community. These can be accessed at

In particular, the IRC channel #ocaml on Libera has a long history and welcomes questions.

Bug Reports and User Feedback

Please report bugs using the issue tracker at https://github.com/ocaml/ocaml/issues

To be effective, bug reports should include a complete program (preferably small) that exhibits the unexpected behavior, and the configuration you are using (machine type, etc).

Contributing

For information on contributing to OCaml, see HACKING.adoc and CONTRIBUTING.md.

Separately maintained components

Some libraries and tools which used to be part of the OCaml distribution are now maintained separately and distributed as OPAM packages. Please use the issue trackers at their respective new homes:

Library Removed since OPAM package

The Stream and Genlex standard library modules

OCaml 5.0

camlp-streams

The Graphics library

OCaml 4.09

graphics

The Num library

OCaml 4.06

num

The OCamlbuild tool

OCaml 4.03

ocamlbuild

The camlp4 tool

OCaml 4.02

camlp4

The LablTk library

OCaml 4.02

labltk

The CamlDBM library

OCaml 4.00

dbm

The OCamlWinTop Windows toplevel

OCaml 4.00

none

ocaml-ci-scripts's People

Contributors

andyli avatar avsm avatar chris00 avatar cyrilst avatar djs55 avatar dra27 avatar dsheets avatar edwintorok avatar euanh avatar fdopen avatar fgimenez avatar gaborigloi avatar gasche avatar hannesm avatar jonsterling avatar kit-ty-kate avatar lcdunstan avatar leonidas-from-xiv avatar lindig avatar liyishuai avatar mor1 avatar rjbou avatar samoht avatar seliopou avatar simonjbeaumont avatar talex5 avatar xvilka avatar yallop avatar ygrek avatar yomimono avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ocaml-ci-scripts's Issues

`make configure` awkward for Mirage unikernels

The docs say:

It assumes the existence of a Makefile at the root of the repo having targets configure and build.

However, Makefile is normally generated by mirage, so adding one to the source repository will cause lots of trouble with git.

DEPOPTS variable confusion

DEPOPTS is being used for 2 different purposes:

  • as a true/false variable to determine if a run with the optional dependencies should be done
  • the names of the optional packages

If you set DEPOPTS=true, you end up also having "true" as the name of the optional package to install.

The README should also be fixed. Right now it mentions the second usage above for DEPOPTS.

Docker-based Travis builds failing with OCaml 4.04

Recently most of our Travis builds started failing with the following error:

opam: "execvp" failed on ci-opam: No such file or directory

For example, this one: https://travis-ci.org/xapi-project/ocaml-netlink/jobs/313427741#L581

The cause is probably this issue: https://caml.inria.fr/mantis/view.php?id=7640

I'd be grateful for any help you can provide 🙂 - It would be really helpful for us if this was fixed or there was a workaround that we could use to make our Travis builds work again.

CI for multi opam packages

Is there a way to test all packages defined in a single git repository? I'm transitioning cohttp away from depopts, and I'd like to make sure travis is still working.

How to avoid an optional dependency being built?

I've tried many variations on:

    - PACKAGE=biokepi INSTALL=false TESTS=false PINS="trakeva:https://github.com/smondet/trakeva.git ketrew:https://github.com/hammerlab/ketrew.git" DEPOPTS=postgresql EXTRA_DEPS=postgresql PRE_INSTALL_HOOK='opam install postgresql'

but the build always fails on MacOSX: https://travis-ci.org/hammerlab/biokepi/builds/82633540
(because of Sqlite needing a hack: https://github.com/smondet/trakeva#sqlite3-on-macosx)

Sqlite3 is an optional dependency and postgresql should replace it →
https://github.com/hammerlab/ketrew/blob/master/opam#L30
how do I convince the ocaml-travisci-skeleton to not install it?

Build on MacOSX consistantly fails while Linux passes

See: https://travis-ci.org/jnavila/plotkicadsch/jobs/185877988

The compilation consistantly passes with Linux, but fails as consistantly on Mac ;-)

The compilation fails with the following error:

- + /Users/travis/.opam/4.04.0/bin/ocamlfind ocamlopt -a -o src/plotkicadsch.cmxa
- ar: no archive members specified
- usage:  ar -d [-TLsv] archive file ...
- 	ar -m [-TLsv] archive file ...
- 	ar -m [-abiTLsv] position archive file ...
- 	ar -p [-TLsv] archive [file ...]
- 	ar -q [-cTLsv] archive file ...
- 	ar -r [-cuTLsv] archive file ...
- 	ar -r [-abciuTLsv] position archive file ...
- 	ar -t [-TLsv] archive [file ...]
- 	ar -x [-ouTLsv] archive [file ...]
- File "_none_", line 1:
- Error: Error while creating the library src/plotkicadsch.a
- Command exited with code 2.
- E: Failure("Command ''/Users/travis/.opam/4.04.0/bin/ocamlbuild' src/plotkicadsch.cma src/plotkicadsch.native src/plotgitsch.native -tag debug' terminated with error code 10")

Digging into similar issues, it seems that the ar utility on MacOSX doesn't accept creating empty archives where as GCC's ar is happy with it.

Destination directory of documentation

The docgen script copies the contents of all *.docdir directories as follows:

cp _build/*.docdir/* $DOCDIR

This just clobbered my gh-pages directory. There are several issues here:

  1. If there is more than one .docdir directory containing files of the same name (typically index.html), the copy command can clobber itself.
  2. The user might not even want to have the API-documentation in the topmost directory of the gh-pages branch.
  3. Documentation files that don't exist anymore will not be removed.

The following may be more closer to what most users want:

rsync -a --delete  _build/*.docdir $DOCDIR

This would keep API-documentation of distinct libraries of a repository separate and allows the user to have their own index.html to refer to the appropriate documentation.

Alternatively, we could introduce new variables to indicate the destination directory or what should happen. At least for my purposes the above would be perfectly sufficient.

CircleCI support

It'd be useful for ocaml-ci-scripts to support CircleCI. Here's the documentation for the configuration.

New release

There's quite a lot of unreleased code on master (currently 60 commits since the last release, v1.0.2).

It would be useful to have a new release, since some recent changes (e.g. #96) are expected to fix longstanding problems with CI builds such as this.

TravisCI Log Folding

Travis' default shell provides the command travis_fold(action, name), where action is either open or close. Its implementation is here and simply involves outputting a string to trigger the fold.

Would it be possible to add these commands/string output into the scripts to make the logs easier to follow?

DEPOPTS broken?

while I can find some export DEPOPTS=mirage-xen in here, mirage-xen itself is never installed!?!?

What is the license for this code?

We're suggesting that people copy these build scripts into their own projects. It would be good to say what the license for these files is.

OPAM env required?

Shouldn't this script evaluate the OPAM init scripts to adjust PATH? Or is it a deliberate decision not to do that? I would make a PR, but would like to know if there is some reason behind this.

Background: I have dependencies that install binaries via OPAM, but these are not in the PATH unless setting the OPAM variables properly.

OCAML_VERSION=4.04 leads to 4.04.0

whereas I'd expect it to be 4.04.2, i.e. the highest minor version. I suspect similar inconsistencies are around with other OCaml versions if you disregard the minor number.

Debian Docker images are currently broken

This manifests as a failure to download a .deb which looks superficially like a network glitch but is in fact a permanent error.

From mirage/mirage#837 -- we use unstable stable and testing as names but these are aliases and they've recently been bumped, causing the Docker images to be out of sync.

I think we should

  • regenerate the Docker images
  • perhaps switch to using the release names (stretch etc)

Support for setting package name

Currently, the scripts use the default my-package name. We could add something like:

- PACKAGE=<name>

in the env variable to set-ip correctly. Or we can read it in the opam file ...

travis-docker defaults to an old travis-opam version

When using travis-docker, this part determines what version of travis-opam should be used:

if [ $fork_user != $default_user -o $fork_branch != $default_branch ]; then
echo RUN opam remove travis-opam >> Dockerfile
echo RUN opam pin add -n travis-opam \
https://github.com/$fork_user/ocaml-ci-scripts.git#$fork_branch \
>> Dockerfile
echo RUN opam depext -i travis-opam >> Dockerfile
fi

In particular, this means that by default, the latest version on opam is used. At this time, it means 1.0.3, even though 1.1.0 is released and includes useful fixes such as #146.

I believe that releasing 1.1.0 on opam would be enough to fix this issue.

As a workaround, it is possible to set FORK_BRANCH=v1.1.0 in the environment.

Thanks!

4.05 support

Hi,

OCaml 4.05+beta2 was released earlier, so I assume that a final version will be out in a couple weeks.
Can you please add support to it so that it is possible to test it on Travis?

Thanks!

Ability to override OPAM_SWITCH

I'd like to leave a matrix testing 4.05.0+rc1, so I added OCAML_VERSION=4.05 OPAM_SWITCH=4.05.0+rc1 to the test matrix. However, this results in this:

+OPAM_SWITCH=4.05.0+rc1
+BASE_REMOTE=git://github.com/ocaml/opam-repository
+UPDATE_GCC_BINUTILS=0
+UBUNTU_TRUSTY=0
+INSTALL_XQUARTZ=true
+install_on_linux
+OCAML_VERSION=4.02
+OPAM_SWITCH=4.05.0+trunk

Would it be OK for install_on_linux to go with OPAM_SWITCH if it's specified?

Name change causes problems with pinning

The script .travis-docker.sh allows pinning ocaml-ci-scripts to enable using features from unreleased versions.

However, the name of the travis-opam binary has been changed in recent versions to ci-opam. Since the ocaml/opam Docker images and the .travis-docker.sh script both still use the old name, pinning recent versions rarely works.

pass variables in the build matrix to the container

When testing mirage, we'd like to pass the MODE environment variable to the container we start with .travis-docker.sh . It's easy enough to add this to the list of variables copied into env.list and passed to the container, but I wonder whether a more general solution might be widely useful.

Wrong OCaml version for 4.02.3 image

It looks like image ocaml/opam:debian-stable_ocaml-4.02.3 contains OCaml 4.01.0 instead of 4.02.3.

> docker pull ocaml/opam:debian-stable_ocaml-4.02.3
debian-stable_ocaml-4.02.3: Pulling from ocaml/opam
28c297c6ec72: Already exists 
a3ed95caeb02: Already exists 
d3a2cca92131: Pull complete 
38f8b0265afb: Pull complete 
7f5a04423ce8: Pull complete 
Digest: sha256:09cb52431d5034beb5fd407f08d839a5a9185ebb2f4417decaa934a14537586e
Status: Downloaded newer image for ocaml/opam:debian-stable_ocaml-4.02.3
> docker run -ti ocaml/opam:debian-stable_ocaml-4.02.3 bash
opam@b4fa61ef998e:~$ opam config var ocaml-version
4.01.0

Add option to inject commands

Hi,

I am using OASIS for my project but as I don't want to have it as a dependency of my project, I pregenerate the setup.ml in release tarballs. Therefore it is not listed in the OPAM file. Could there be an additional option for calling additional commands? I'd need to install oasis via OPAM and then run oasis setup.

If interested, I can prepare a PR.

Update version on brew (system is now 4.04)

Is there a reason that that the .travis-ocaml.sh script hasn't been updated to the new 4.04 system switch?

In the current state asking for 4.03. will switch to system which is now 4.04. I'm just wondering if there is a reason besides the "no one has noticed it yet."

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.