]> Sergey Matveev's repositories - nnn.git/blob - .circleci/config.yml
Use CircleCI parallelism
[nnn.git] / .circleci / config.yml
1 version: 2
2
3 jobs:
4   compile:
5     docker:
6       - image: ubuntu:22.04
7         working_directory: ~/nnn
8         environment:
9           CI_FORCE_TEST: 1
10     parallelism: 4
11     steps:
12       - run:
13           command: |
14             apt update -qq
15             DEBIAN_FRONTEND="noninteractive" TZ="America/New_York" apt-get -y install tzdata
16             apt install -y --no-install-recommends software-properties-common wget gpg-agent shellcheck
17             apt install -y --no-install-recommends git make pkg-config libncurses-dev libreadline-dev
18             apt install -y --no-install-recommends gcc-9 gcc-10 gcc-11 gcc-12
19             apt install -y --no-install-recommends clang-11 clang-12 clang-13 clang-14 clang-15 clang-tidy-15
20       - checkout
21       - run:
22           command: |
23             export CFLAGS=-Werror
24             make clean
25             echo
26             echo "########## gcc-9 ##########"
27             CC=gcc-9 make strip
28             ls -l nnn
29             make clean
30             echo
31             echo "########## gcc-10 ##########"
32             CC=gcc-10 make strip
33             ls -l nnn
34             make clean
35             echo
36             echo "########## gcc-11 ##########"
37             CC=gcc-11 make strip
38             ls -l nnn
39             make clean
40             echo
41             echo "########## gcc-12 ##########"
42             CC=gcc-12 make strip
43             ls -l nnn
44             make clean
45             echo
46             echo "########## clang-11 ##########"
47             CC=clang-11 make strip
48             ls -l nnn
49             make clean
50             echo
51             echo "########## clang-12 ##########"
52             CC=clang-12 make strip
53             ls -l nnn
54             make clean
55             echo
56             echo "########## clang-13 ##########"
57             CC=clang-13 make strip
58             ls -l nnn
59             make clean
60             echo
61             echo "########## clang-14 ##########"
62             CC=clang-14 make strip
63             ls -l nnn
64             make clean
65             echo
66             echo "########## clang-tidy-15 ##########"
67             clang-tidy-15 src/* -- -I/usr/include -I/usr/include/ncursesw
68             echo "########## shellcheck ##########"
69             find plugins/ -type f -not -name "*.md" -exec shellcheck {} +
70
71   package-and-publish:
72     machine: true
73     working_directory: ~/nnn
74     steps:
75       - checkout
76       - run:
77           name: "auto-generate packages"
78           command: |
79             # Create dist directory if it doesn't exist
80             mkdir ./dist
81             # Clean up
82             rm -rf ./dist/*
83             # Pack source
84             git archive -o ../${CIRCLE_PROJECT_REPONAME}-${CIRCLE_TAG}.tar.gz --format tar.gz --prefix=${CIRCLE_PROJECT_REPONAME}-${CIRCLE_TAG#v}/ ${CIRCLE_TAG}
85             # Use latest installed python3 from pyenv
86             export PYENV_VERSION="$(pyenv versions | grep -Po '\b3\.\d+\.\d+' | tail -1)"
87             #pip install packagecore
88             #packagecore -c misc/packagecore/packagecore.yaml -o ./dist/ ${CIRCLE_TAG#v}
89             # Move source pack to dist
90             mv ../${CIRCLE_PROJECT_REPONAME}-${CIRCLE_TAG}.tar.gz ./dist/
91
92       - run:
93           name: "publish to GitHub"
94           command: |
95             go install github.com/tcnksm/ghr@latest
96             ghr -t ${GITHUB_API_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -replace ${CIRCLE_TAG} ./dist/
97
98 workflows:
99   version: 2
100
101   CircleCI:
102     jobs: &all-tests
103       - compile
104
105   nightly:
106     triggers:
107       - schedule:
108           cron: "0 0 * * 6"
109           filters:
110             branches:
111               only:
112                 - master
113     jobs: *all-tests
114
115   publish-github-release:
116     jobs:
117       - package-and-publish:
118           filters:
119             tags:
120               only: /^v.*/
121             branches:
122               ignore: /.*/