Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

wip #5

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .github/workflows/ci-pr-report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: CI Report
on:
workflow_run:
workflows: [ CI ]
types: [ completed ]

permissions:
checks: write
pull-requests: write
actions: read

jobs:
checks:
runs-on: ubuntu-latest
steps:
- name: Download Test Results
uses: dawidd6/action-download-artifact@v2
with:
workflow: ${{ github.event.workflow.id }}
run_id: ${{ github.event.workflow_run.id }}
- name: Publish Test Results
uses: EnricoMi/publish-unit-test-result-action@v2
with:
commit: ${{ github.event.workflow_run.head_sha }}
event_file: Event File/event.json
event_name: ${{ github.event.workflow_run.event }}
files: "**/*.xml"
258 changes: 258 additions & 0 deletions .github/workflows/ci-pr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,258 @@
name: CI

on: [ pull_request ]
env:
# BASIC_PACKAGES is used fo the basic tools (make)
BASIC_PACKAGES: git build-essential ccache libgc-dev graphviz libunwind-dev libreadline-dev pkg-config
# MORE_PACKAGES is used for more tools and libs (make more)
MORE_PACKAGES: libgmp-dev libcurl4-openssl-dev libevent-dev openjdk-17-jdk-headless libgles-dev libegl-dev libsdl1.2-dev libsdl2-dev libsdl2-mixer-dev libsdl2-gfx-dev libsdl2-image-dev libsdl2-net-dev libsdl2-ttf-dev libgtk-3-dev inkscape postgresql libxdg-basedir-dev gettext libsqlite3-dev libpq-dev libmongoc-dev openmpi-bin libopenmpi-dev
JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64/
JNI_LIB_PATH: /usr/lib/jvm/java-17-openjdk-amd64/lib/server/
LD_LIBRARY_PATH: /usr/lib/jvm/java-17-openjdk-amd64/lib/server/

jobs:
build:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y $BASIC_PACKAGES
- run: make
- uses: actions/upload-artifact@v4
with:
path: bin
name: bin

sanity-check:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- run: misc/jenkins/ensuregit.sh
- run: misc/jenkins/checkwhitespaces.sh
if: ${{ !cancelled() }}
- run: misc/jenkins/checklicense.sh
if: ${{ !cancelled() }}
- run: misc/jenkins/checksignedoffby.sh
if: ${{ !cancelled() }}

tests-some:
runs-on: ubuntu-24.04
needs: [build]
container: "ubuntu:24.04"
services:
postgres:
image: postgres
env:
POSTGRES_HOST_AUTH_METHOD: trust
mongo:
image: mongo
neo4j:
image: 'neo4j:2.3'
env:
NEO4J_AUTH: none
strategy:
fail-fast: false
matrix:
engine: [nitcg, nitcs, nitcsg, nitce, niti]
steps:
- name: Install dependencies
run: apt-get update && apt-get install -y $BASIC_PACKAGES $MORE_PACKAGES
- uses: actions/checkout@v4
- run: misc/jenkins/ensuregit.sh
- uses: actions/download-artifact@v4
- run: chmod +x bin/*
- run: make src/version.nit
- run: cd tests && ./search_tests_git.sh origin/master HEAD > list
- run: cd tests && ./tests.sh --engine ${{ matrix.engine }} `cat list`
- uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
path: 'tests/*.xml'
name: tests-some-${{ matrix.engine }}
- uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
path: 'tests/out/*.res'
name: tests-some-${{ matrix.engine }}-res

tests-full:
runs-on: ubuntu-24.04
needs: [tests-some]
container: "ubuntu:24.04"
services:
postgres:
image: postgres
env:
POSTGRES_HOST_AUTH_METHOD: trust
mongo:
image: mongo
neo4j:
image: 'neo4j:2.3'
env:
NEO4J_AUTH: none
strategy:
fail-fast: false
matrix:
engine: [nitcg, nitcs, nitcsg, nitce, niti]
steps:
- name: Install dependencies
run: apt-get update && apt-get install -y $BASIC_PACKAGES $MORE_PACKAGES
- uses: actions/checkout@v4
- run: misc/jenkins/ensuregit.sh
- uses: actions/download-artifact@v4
- run: chmod +x bin/*
- run: make src/version.nit
- name: Run tests
run: cd tests && ./testfull.sh --engine ${{ matrix.engine }}
- uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
path: 'tests/*.xml'
name: tests-full-${{ matrix.engine }}
- uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
path: 'tests/out/*.res`'
name: tests-full-${{ matrix.engine }}-res

nitunit-some:
runs-on: ubuntu-24.04
needs: [build]
container: "ubuntu:24.04"
services:
postgres:
image: postgres
env:
POSTGRES_HOST_AUTH_METHOD: trust
mongo:
image: mongo
neo4j:
image: 'neo4j:2.3'
env:
NEO4J_AUTH: none
steps:
- name: Install dependencies
run: apt-get update && apt-get install -y $BASIC_PACKAGES $MORE_PACKAGES
- uses: actions/checkout@v4
- run: misc/jenkins/ensuregit.sh
- uses: actions/download-artifact@v4
- run: chmod +x bin/*
- run: make nitunit-some
- uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
path: '*.xml'
name: nitunit-some

nitunit-full:
runs-on: ubuntu-24.04
needs: [nitunit-some]
container: "ubuntu:24.04"
services:
postgres:
image: postgres
env:
POSTGRES_HOST_AUTH_METHOD: trust
mongo:
image: mongo
neo4j:
image: 'neo4j:2.3'
env:
NEO4J_AUTH: none
steps:
- name: Install dependencies
run: apt-get update && apt-get install -y $BASIC_PACKAGES $MORE_PACKAGES
- uses: actions/checkout@v4
- run: misc/jenkins/ensuregit.sh
- uses: actions/download-artifact@v4
- run: chmod +x bin/*
- run: make nitunit-full
- uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
path: '*.xml'
name: nitunit-full

test-contrib:
runs-on: ubuntu-24.04
needs: [build]
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y $BASIC_PACKAGES $MORE_PACKAGES
- uses: actions/download-artifact@v4
- run: chmod +x bin/*
- run: 'PATH=$PWD/bin:$PATH make test-contrib'
- uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
path: '*.xml'
name: test-contrib

bootstrap-full:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y $BASIC_PACKAGES
- run: make bootstrap-full

bench-fast:
runs-on: ubuntu-24.04
needs: [build]
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y $BASIC_PACKAGES gnuplot
- uses: actions/download-artifact@v4
- run: chmod +x bin/*
- run: 'PATH=$PWD/bin:$PATH make bench-fast'
- uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
path: |-
benchmarks/*.dat
benchmarks/*.gnu
benchmarks/*.png
benchmarks/*.html
name: bench-fast

valgrind:
runs-on: ubuntu-24.04
needs: [build]
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y $BASIC_PACKAGES valgrind
- uses: actions/download-artifact@v4
- run: chmod +x bin/*
- run: make valgrind
- uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
path: 'valgrind.out'
name: valgrind

info:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- run: pwd
- run: id
- run: ls -al
- run: git branch -av || true
- run: lscpu || true
- run: git log --oneline --graph --decorate | head -n 50
- run: cat /etc/issue
- run: cat /etc/os-release
- run: env

event_file:
name: "Event File"
runs-on: ubuntu-latest
steps:
- name: Upload
uses: actions/upload-artifact@v4
with:
name: Event File
path: ${{ github.event_path }}
86 changes: 84 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,16 @@ bin/nitdoc:
cd src; make ../bin/nitdoc

bin/nitls:
cd src; make ../bin/nitls
cd src; make

bin/nitunit:
cd src; make

bin/nitpick:
cd src; make

src/version.nit:
cd src && ./git-gen-version.sh

doc/stdlib/index.html: bin/nitdoc bin/nitls
@echo '***************************************************************'
Expand Down Expand Up @@ -87,4 +96,77 @@ clean:
(echo "CLEANING $$directory" && cd "$$directory" && $(MAKE) clean); \
done
@echo ""
@echo "Nit was succesfully cleaned."
@echo "Nit was succesfully cleaned."

# BASIC CI-CD JOBS ########################################################

sanity-check:
misc/jenkins/checkwhitespaces.sh
misc/jenkins/checksignedoffby.sh
misc/jenkins/checkbinaryfiles.sh
misc/jenkins/checklicense.sh

nitunit-some: bin/nitls bin/nitunit src/version.nit
misc/jenkins/nitunit-some.sh

nitpick-full: bin/nitls bin/nitpick src/version.nit
bin/nitls lib src examples contrib
bin/nitls -Pp lib src examples | grep -v -f tests/gitlab_ci.skip > list.txt || true # filter what is skipped by tests.sh
xargs bin/nitpick < list.txt


# LIB, CONTRIB AND OOT ##############################################

nitunit-full: bin/nitls bin/nitunit src/version.nit
bin/nitls -Pp lib src examples | grep -v -f tests/gitlab_ci.skip > list.txt || true # filter what is skipped by tests.sh
ls -1 doc/manual/*.md >> list.txt
xargs bin/nitunit -v < list.txt

nitunit-src: bin/nitls bin/nitunit src/version.nit
bin/nitls -Pp src examples | grep -v -f tests/gitlab_ci.skip > list.txt || true # filter what is skipped by tests.sh
xargs bin/nitunit -v < list.txt

test-contrib: src/version.nit
misc/jenkins/check_contrib.sh all check
grep 'error message' *.xml > status.txt || true
test ! -s status.txt # no lines, no errors

# MISC ##############################################################

bootstrap-full:
cd src && ./full_bootstrap && ./ncall.sh

bench-fast:
cd benchmarks && ./bench_engines.sh --fast --fast --html options

nitunit-manual: bin/nitunit
bin/nitunit doc/manual/*.md

# MORE TOOLS ########################################################

build-more-tools: more
$(MAKE) -C contrib/nitcc

valgrind: src/version.nit
mkdir -p valgrind.out
bin/nitc src/nitc.nit # To warm-up the cache
src/valgrind.sh --callgrind-out-file=valgrind.out/nitc.nitc.out bin/nitc src/nitc.nit -vv
callgrind_annotate valgrind.out/nitc.nitc.out > valgrind.out/nitc.nitc.txt
src/valgrind.sh --callgrind-out-file=valgrind.out/niti.niti.out bin/nit -- src/nit.nit tests/base_simple3.nit -vv
callgrind_annotate valgrind.out/niti.niti.out > valgrind.out/niti.niti.txt

build-doc:
nitdoc -d nitdoc.out --keep-going lib src

build-manual:
# apt-get update && apt-get install --yes --no-install-recommends pandoc texlive texlive-latex-extra lmodern
$(make) -C doc/manual

nitmetrics:
mkdir -p nitmetrics.out
nitmetrics --all --log --log-dir nitmetrics.out --dir nitmetrics.out --keep-going lib src | tee nitmetrics.out/metrics.txt

build-catalog:
misc/jenkins/check_contrib.sh pre-build
cd contrib && ./oot.sh update && ./oot.sh pre-build
nitcatalog -d catalog.out lib/ examples/ contrib/ contrib/oot/
3 changes: 2 additions & 1 deletion misc/jenkins/README.md
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
Some scripts used by the Nit Jenkins for continuous integration, but you can use them also.
Some scripts used by the continuous integration, but you can use them also.
While Jenkins is not used anymore, we keep it as a legacy name and memento.
Loading