b7940ba360
* Not up-to-date jsdelivr takes some days or weeks to get latest erlang versions, compare https://builds.hex.pm/builds/otp/arm64/ubuntu-24.04/builds.txt https://cdn.jsdelivr.net/hex/builds/otp/arm64/ubuntu-24.04/builds.txt * Unnecessary As builds.hex.pm is already geodistributed, there's no need to add mirror Reference: https://www.hex.pm/docs/mirrors * Problematic in parallel jobs The ci.yml workflow is split in separate jobs that run in parallel, and all of them must use the exact same erlang version. When using mirrors, different erlang versions may be used... and then the compiled files require more recompilation, which fail ===> Compiling /home/runner/work/ejabberd/ejabberd/c_src/epam.c ===> /home/runner/work/ejabberd/ejabberd/c_src/epam.c:18:10: fatal error: security/pam_appl.h: No such file or directory 18 | #include <security/pam_appl.h> | ^~~~~~~~~~~~~~~~~~~~~ Instead of removing mirrors, an alternative solution would be to specify exact OTP version: "28.3.2", but then we would need to update all those strings in ci.yml for every erlang release.
178 lines
4.8 KiB
YAML
178 lines
4.8 KiB
YAML
name: Weekly
|
|
|
|
on:
|
|
schedule:
|
|
- cron: '30 9 * * 0'
|
|
|
|
jobs:
|
|
|
|
############################################################### Compile #####
|
|
|
|
test:
|
|
runs-on: ubuntu-24.04-arm
|
|
strategy:
|
|
matrix:
|
|
otp: ['25', '26', '27', '28', '29.0-rc1']
|
|
|
|
steps:
|
|
|
|
- uses: actions/checkout@v6
|
|
|
|
- uses: erlef/setup-beam@v1
|
|
with:
|
|
otp-version: ${{ matrix.otp }}
|
|
|
|
- uses: awalsh128/cache-apt-pkgs-action@latest
|
|
with:
|
|
packages: libexpat1-dev libgd-dev libpam0g-dev
|
|
libsqlite3-dev libwebp-dev libyaml-dev
|
|
|
|
- name: Compile
|
|
uses: ./.github/actions/manage-ejabberd
|
|
with:
|
|
for: prod
|
|
do: compile
|
|
tool: rebar3
|
|
configure: --disable-elixir --disable-mssql
|
|
|
|
########################################################## Static Tests #####
|
|
|
|
- name: Test shell scripts
|
|
run: |
|
|
shellcheck ejabberd.init.template
|
|
shellcheck -x ejabberdctl.template
|
|
shellcheck .vscode/relive.sh
|
|
shellcheck rel/setup-dev.sh
|
|
shellcheck rel/setup-relive.sh
|
|
shellcheck test/ejabberd_SUITE_data/gencerts.sh
|
|
shellcheck tools/captcha.sh
|
|
shellcheck tools/emacs-indent.sh
|
|
shellcheck tools/generate-doap.sh
|
|
shellcheck tools/prepare-tr.sh
|
|
shellcheck tools/rebar3-format.sh
|
|
|
|
- run: make hooks
|
|
- run: make options
|
|
- run: make xref
|
|
- run: make dialyzer
|
|
- run: make testeunit
|
|
- run: make elvis
|
|
if: matrix.otp > '25'
|
|
|
|
- run: make install -s
|
|
|
|
######################################################### Dynamic Tests #####
|
|
|
|
- name: Check production release
|
|
uses: ./.github/actions/manage-ejabberd
|
|
with:
|
|
for: prod
|
|
do: deploy, start, stop, check
|
|
|
|
- name: Start development release
|
|
uses: ./.github/actions/manage-ejabberd
|
|
with:
|
|
for: dev
|
|
do: deploy, no_tls, start, register
|
|
username: user123
|
|
|
|
- name: Stop development release
|
|
if: always()
|
|
uses: ./.github/actions/manage-ejabberd
|
|
with:
|
|
for: dev
|
|
do: stop, check
|
|
|
|
- name: View production logs
|
|
if: always()
|
|
uses: ./.github/actions/manage-ejabberd
|
|
with:
|
|
for: prod
|
|
do: logs
|
|
|
|
- name: View development logs
|
|
if: always()
|
|
uses: ./.github/actions/manage-ejabberd
|
|
with:
|
|
for: dev
|
|
do: logs
|
|
|
|
##################################################### Common Test Suite #####
|
|
|
|
- name: Prepare database
|
|
uses: ./.github/actions/manage-database
|
|
with:
|
|
for: mysql, pgsql, redis
|
|
do: install, start, user, create
|
|
|
|
- name: Setup multihost SQL schema
|
|
run: |
|
|
sed -i 's|new_schema, false|new_schema, true|g' test/suite.erl
|
|
|
|
- name: Run tests
|
|
id: ct
|
|
run: make test
|
|
|
|
- name: Send to coveralls
|
|
continue-on-error: true
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
DIAGNOSTIC=1 ./rebar3 as test coveralls send
|
|
|
|
- name: Check results
|
|
if: always() && (steps.ct.outcome != 'skipped')
|
|
id: ctresults
|
|
run: |
|
|
[[ -d _build ]] && ln -s _build/test/logs/last/ logs || true
|
|
ln `find logs/ -name suite.log` logs/suite.log
|
|
grep 'TEST COMPLETE' logs/suite.log
|
|
grep -q 'TEST COMPLETE,.* 0 failed' logs/suite.log
|
|
test $(find logs/ -empty -name error.log)
|
|
|
|
- name: View logs
|
|
if: always()
|
|
run: |
|
|
echo "::group::ejabberd.log"
|
|
find logs/ -name ejabberd.log -exec cat '{}' ';'
|
|
echo "::endgroup::"
|
|
echo "::group::error.log"
|
|
find logs/ -name error.log -exec cat '{}' ';'
|
|
echo "::endgroup::"
|
|
echo "::group::exunit.log"
|
|
find logs/ -name exunit.log -exec cat '{}' ';'
|
|
echo "::endgroup::"
|
|
echo "::group::suite.log (only failures)"
|
|
cat logs/suite.log | awk \
|
|
'BEGIN{RS="\n=case";FS="\n"} /=result\s*failed/ {print "=case" $0}'
|
|
echo "::endgroup::"
|
|
echo "::group::suite.log (complete)"
|
|
cat logs/suite.log
|
|
echo "::endgroup::"
|
|
|
|
- name: Upload CT logs
|
|
if: failure()
|
|
uses: actions/upload-artifact@v6
|
|
with:
|
|
name: ct-logs-${{ matrix.otp }}
|
|
path: _build/test/logs
|
|
retention-days: 14
|
|
|
|
############################################################# Coveralls #####
|
|
|
|
cover:
|
|
needs: test
|
|
if: always()
|
|
runs-on: ubuntu-24.04-arm
|
|
steps:
|
|
- name: Finish parallel upload to coveralls
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
curl -v -k https://coveralls.io/webhook \
|
|
--header "Content-Type: application/json" \
|
|
--data '{"repo_name":"$GITHUB_REPOSITORY",
|
|
"repo_token":"$GITHUB_TOKEN",
|
|
"payload":{"build_num":$GITHUB_RUN_ID,
|
|
"status":"done"}}'
|