Commit Graph
1046 Commits
Author SHA1 Message Date
Hamish Coleman d8b02bcbdb Test only against current runner OS versions 2023-10-24 11:19:40 +01:00
shaxxxandHamish Coleman 90bf51c9d8 Fix auto IP tracking 2023-10-24 11:19:40 +01:00
Logan oos Even 6dac89f1a7 removed abandoned Windows 2016 runner 2022-03-20 14:14:53 +01:00
Logan oos Even b9948a1a47 made supernode ignore its own registration attempts 2022-03-20 13:57:38 +01:00
t-tomekandGitHub bde78319ea Update Openwrt build to the correct stable version number
Merge pull request #948 from t-tomek/patch-2
2022-02-08 20:46:53 +00:00
Logan oos Even 0177e14026 backported supernode selection by MAC address to 3.0 as it also fixes a rarely occuring bug found in general supernode selection 2021-11-01 16:40:17 +05:45
Hamish ColemanandGitHub 8d4b771d87 Only trigger automatic release process on annotated tags - Take two (#884)
* Fix tagtype logic, shell quotes need to be correct for shell vars

* Fix - if we want to run git commands, we need a git repo clone

* Add some debug info to the release automation

* With the better release gating, we dont need to check if the job can run (also allows more debug info output)

* Tags dont work properly with a thin clone

* Add more debug data, still trying to work out why github doesnt think tags are tags

* Attempt to work around strage git behaviour in github

* Avoid exitcode triggering job failure

* Shorten line to address yamllint warning

* Add more tag debugging output

* Try a different way to fetch the right tag data

* Getting closer, it clearly showed the upstream had a different view than this checkout

* Try returning to the 'normal' command, after force pulling the correct repo data

* Adjust pull command to pull.rebase=false

* Abandon using the github checkout action, it is clearly at fault

* Add more debug data output

* Of course, nobody has a standard git repo layout, so need to jump more hoops

* Fix spelling

* Return the tags check to the releases, use our own clone and remove all the debug output

* Fix clone command, removing the half removed old fetch-based command

* Add reference to a ticket for this problem

* Attempt to fix github tags in each job

See https://github.com/actions/checkout/issues/290 for some discussion.

* Re-add much of the debug output

* Add a debugging job to show the get tagtype data quicker in the workflow

* Output correct debug data...

* Remove debugging outputs
2021-10-31 20:45:09 +00:00
Hamish ColemanandGitHub 4491ecea62 Only trigger automatic release process on annotated tags (#881)
* Only trigger release process on annotated tags

Annotated tags are meant for releases while lightweight tags are meant
for private or temporary object labels.

For this reason, we should not trigger the automatic release actions
unless we have an annotated tag.

* Actions set-output is only scoped within the same job id

* Fix workflow syntax - of course keys cannot be defined twice
2021-10-31 13:34:26 +00:00
Hamish ColemanandGitHub d2683f2c23 Fix build system errors (#879)
* Attempt cross compiling for apple silicon

* Try the apple expected compiler

* Make config.log viewable to figure out the compiler error

* Attempt to install the missing architecture

* Leave this branch in a working and documented what is missing state

* Try cross-compiling on macos with a specific SDK version

* Every now and again the runner pacakge db gets out of sync with reality - avoid this ever stopping a build, at the expense of making the builds take longer to run

* Add needed macos cross compile linker flag

* Fix package db sync for binaries build as well

* Add a fat binary build

* Add missing dep on the new binaries_macos_universal build

* Copy the macos cross compile artifacts into the right shared binaries bucket

* Use the correct arch-based subdir name for macos binaries
2021-10-28 00:47:15 +05:45
Luca Deri 66f557af97 3.0 stable 3.0 2021-10-27 20:43:08 +02:00
Logan oos EvenandGitHub 9c50e96e7b updated Authentication.md 2021-10-26 03:31:01 +05:45
Hamish ColemanandGitHub 999b3ffbf3 fixed python JSON clients so they don't hang if the daemon does not respond (or is not even running) (#876) 2021-10-25 18:36:47 +05:45
Hamish ColemanandGitHub cea8bf8644 handled all remaining lint warnings (#875)
* Add workaround for 'truthy' warnings in yaml

See https://github.com/adrienverge/yamllint/issues/158
for some more discussion

* Check each yamllint line length warning and clearly markup those which cannot be easily folded into shorter lines
2021-10-25 16:30:34 +05:45
Hamish ColemanandGitHub 6c1ed021b1 expanded YAML linting to cover every yaml file found in this repo (#874) 2021-10-25 16:07:01 +05:45
Hamish ColemanandGitHub c5253ecf2a Automatically upload binaries when tagged (#871)
* Add a workflow to automatically upload packages in to tagged releases

* Mark automatic release as a pre-release as that way its contents are actually visible

* Dont run the release job unless we are acting on a tag

* Minor rename to try and fit description into github graph view
2.9.1
2021-10-25 02:24:41 +05:45
Logan oos EvenandGitHub 1690241b9b updated Scratchpad.md 2021-10-25 02:04:57 +05:45
Hamish ColemanandGitHub 10b3464bd2 Linting for yaml files (#872)
* Add YAML file linting

* Add cmake-linux.yml lint and address its concerns
2021-10-25 01:37:21 +05:45
Hamish ColemanandGitHub e727304681 fixed support for python versions prior to 3.6 ... (#870)
... which do not support a context manager in the socketserver
2021-10-24 17:16:48 +05:45
Logan oos EvenandGitHub 3b187b4ac8 updated JSON API password handling '--management-password <pw>' (#869) 2021-10-24 15:22:36 +05:45
Logan oos EvenandGitHub 7bace3755c updated Federation.md 2021-10-24 13:09:33 +05:45
Logan oos EvenandGitHub c61b62ab1b choose supernode selection strategy at run-time '--select-rtt' (#864) 2021-10-24 12:53:25 +05:45
Hamish ColemanandGitHub 7b7449c813 Minor JSON field name fixes and additions (#865)
* Change JSON supernodes field to match the struct member name

* Add some missing fields to the edge json output.
2021-10-24 04:05:36 +05:45
Hamish ColemanandGitHub 7eb3f2cd7f Rename scripts for better consistancy (#866)
* Address shellcheck concerns with n2n_gateway.sh script

* Rename n2n_gateway.sh to live with all the other scripts (and update docs)

* Rename hack_fakeautoconf to make it clearly a shell script

* Address shellcheck concerns with hack_fakeautoconf.sh

* Rename python scripts to match other n2n tools

* Fix windows compile - when streamlining the use of hack_fakeautoconf.sh, I forgot to update all uses of this script
2021-10-24 03:58:01 +05:45
Hamish ColemanandGitHub 80b33cd1a9 Basic C Code lint checker and shell checker (#859)
* Factor build packages out into a more maintainable list

* Create a location for scripts to live

* Provide a make target to return the source dir as close as reasonable to the original distributed state

* Add a code lint step, checking the coding style

* Change test harness as recommended by shellcheck

* Ensure we actually have the linter tool installed

* Use the correct directory for cmake to run the tests

* Adjust for the older uncrustify in the current github ubuntu-latest

* Make one file pass the linter

* Integrate the lint with the existing test workflow

* Add files with minimal changes needed to the linter

* Add more files with minimal changes needed to the linter

* Dont build binaries if we fail the lint test

* Update the phony targets with the lint steps

* Ensure the flake8 package is installed in the new lint workflow job

* Use the makefile to drive the packages needed to install for linting

* No need to add dependancies on lint, just rely on the workflow status to show failure

* Update the scripts dir README to reflect current assumptions

* Rename and briefly document the indent.sh script

* Fix the ignore to ignore the right Makefile

* Rename the test_harness script to make it clear it is a shell script

* Provide a master lint make target and add a shell script lint tool

* Elminate stray tabs

* Drop include/auth.h from linter - there are inconsistant results with function definitions when using the current uncrustify rules
2021-10-24 01:21:18 +05:45
Hamish ColemanandGitHub ae502d9181 JSON Reply Management API - feature parity with old management interfaces (#861)
* Ensure that recent code additions pass the linter

* Include some of the more obviously correct lint fixes to edge_utils.c

* Refactor edge JSON api into its own source file

* Use shorter names for static management functions

* Implement a JSON RPC way of managing the verbosity

* Tidy up help display in n2nctl script

* Make note of issue with implementing the stop command

* Implement a JSON RPC call to fetch current community

* Make n2nhttpd time value be more self-contained

* Make n2nhttpd order more closely match the existing management stats output

* Wire up status page to the verbosity setting

* Add JSON versions of the remainder of the edge management stats

* Add new file to cmake

* Properly define management handler

* Only update the last updated timestamp after a successful data fetch

* Function and types definition cleanup

* Force correct type for python scripts mgmt port

* Implement initial JSON API for supernode

* Fix whitespace error

* Use helper function for rendering peers ip4 address

* Proxy the auth requirement back out to the http client, allowing normal http auth to be used

* Ensure that we do not leak the federation community

* Use the same rpc method name and output for both edge and supernode for peers/edges

* Allow n2nctl to show raw data returned without resorting to tricks

* Make n2nctl pretty printer understandable with an empty table

* Use the full name for supernodes RPC call

* Use same RPC method name (but some missing fields) for getting communities from both edge and supernode

* Add *_sup_broadcast stats to edge packet stats output

* Refacter the stats into a packetstats method for supernode RPC

* Even if I am not going to prettyprint the timestamps, at least make all the timestamps on the page the same unit

* Simplify the RPC handlers by flagging some as writable and checking that in the multiplexer

* Remove invalid edges data

* Avoid crash on bad data to verbose RPC

* Avoid showing bad or inconsistant protocol data in communities RPC

* Minor clarification on when --write is handled

* Make linter happy

* Fix changed method name in n2nhttpd

* Move mainloop stop flag into the n2n_edge_t structure, allowing access from management commands

* Implement edge RPC stop command

* Move mainloop stop flag into the n2n_sn_t structure, allowing access from management commands

* Implement supernode RPC stop command

* Allow multiple pages to be served from mini httpd

* Extract common script functions into a separate URL

* Handle an edge case in the python rpc class

With a proper tag-based demultiplexer, this case should be a nop,
but we are single-threaded and rely on the packet ordering in this
library.

* Add n2nhttpd support to query supernode using urls prefixed with /supernode/

* Handle missing values in javascript table print

* Add another less filtering javascript key/value renderer

* Add a supernode.html page to the n2nhttpd

* Address lint issue

* Mention the second html page on the Scripts doc

* Remove purgable column from supernode edges list - it looks like it is rarely going to be set

* Add a simple one-line example command at the top of the API documentation

* Acknowledge that this is not the most efficient protocol, but point out that it was not supposed to be

* Make it clear that the n2nctl script works for both edge and supernode

* Fight with inconsistant github runner results

* Turn off the /right/ coverage generator
2021-10-23 11:05:05 +05:45
Hamish ColemanandGitHub e6fcf1c55b Cleanup and Documentation for JSON management API (#856)
* Reimplement JSON mgmt with clear separation of read/write actions

* Reduce boilerplate by using a table driven command definition for json mgmt commands

* Port tools to use new json api

* Add a basic authentication for json mgmt commands

* If a auth key is given, it must match

* Add auth key to management scripts

* Add a flag bitfield to clearly turn the tag param into a options list

* Allow simple pass-through of any command from n2nctl

* Convert the n2nctl to use an object oriented interface

* Handle sigpipe in the n2nhttpd - this happens if the remote client disconnects unexpectely

* Remove some repetition from the server

* Use the correct options to allow reuseaddr

* Dont generate a scary message on ctrl-c

* Convert n2nhttpd to use object based RPC

* Use the same longopt for both tools

* Pass any extra args through to the RPC

* Add some documentation for the scripts in the repository

* Spelling fix

* Add documentation for the JSON reply mangement API
2021-10-18 02:01:42 +05:45
Logan oos EvenandGitHub 966b6b9394 updated Scratchpad.md 2021-10-17 22:37:41 +05:45
Hamish ColemanandGitHub 94e6f4a8a8 add a rendered html page to the example httpd server (#855)
* Expand example http gateway with html rendered stats

* Update the httpd comments
2021-10-16 06:00:21 +05:45
Hamish ColemanandGitHub bb3de5698c added JSON interfaces to edge management port and scripts to further process output (#854)
* Add management commands to show data in JSON format

* Add a script to query the JSON management interface

* Suprisingly, the github runner does not have flake8 installed

* Add n2nctl debugging output to show the raw data received from the JSON

* Ensure well known tag wrap-around semantics

* Try to ensure we check every edge case in the protocol handling - only valid packets are allowed

* Add a very simple http to management port gateway

* Fix the lint issue
2021-10-16 00:11:39 +05:45
Hamish ColemanandGitHub 1670b14d69 reduced the number of artifacts to a reasonable number (#853)
* Consolidate all binaries into one artifact bucket

* Remove unused variables from cmake matrix

* Consolidate dpkg and rpm packages into one bucket each

* Consolidate all the coverage reports into one bucket

* Consolidate all the test outputs into one bucket

* Avoid the artifact prefix removal using a simple hack, but upload the expected test results as a consequance
2021-10-15 20:19:52 +05:45
Hamish ColemanandGitHub c3c72e2656 test on all available runner environments and add autogenerated crossbuilt dpkg packages (#852)
* Make test workflow smoke test use the same internal name as descriptive name

* Refactor workflow to be test_os then build for that OS

* Run tests on all available github runner environments

* Ensure that dpkg builds will fail if the compile fails

* Allow explicitly overriding the debian package architecture

* Pass the detected architecture into the dpkg build process

* Use the possibly overridden MACHINE variable to calculate the short machine name

* Remove unused variable

* Remove unused AC_SUBST

* Allow EXTN to be overridden instead of MACHINE

* Add crossbuilding for dpkg builds

* Ubnuts dont got no crossbuild for mips

* Use the correct value for EXTN
2021-10-14 15:54:19 +05:45
Hamish ColemanandGitHub f5b730baed added some cross-compiled binary outputs to the autobuild (#850)
* Add an example cross compile build

* Harmonise the naming to reflect full architecture and if it is a real package or not

* Add some more example cross compile targets

* Only one RPM package is created, so use the singular word

* Dont use build triplet for OS packages, use the OS prefered arch name

* Add some cross compiling documentation to the Building.md
2021-10-14 02:30:42 +05:45
Hamish ColemanandGitHub 7d4ff08200 added automated binary artifacts (#849)
* Allow an autobuilder with no access to private key material to create testable packages

* Initial dpkg build - will need helpers installed to work

* Start adding required dpkg helpers

* Tweak package artifact names

* Add a windows 'package' builder

* Ensure prefix path handling deals with current directory change when descending to tools dir

* The tools makefile currently only needs the SBINDIR path to install properly

* Add a macos 'package' builder

* Remove unused configure variables

* Without commit history, some of the automatic version numbering will fail

* Add an rpm builder

* Need to set the env var for the rpm build before we change our working dir

* Allow gpg signing to fail for generating test rpm packages

* Unfortunately the rpm spec file hardcodes some path assumptions, so we need to use hacks to work around them

* Return to the top dir before moving things around

* A small change to make actions re-run the pipeline

* Name this workflow file with a nicer looking name
2021-10-11 18:44:28 +05:45
Logan oos EvenandGitHub 5f3c27e3a6 compile fix (#846) 2021-10-07 14:05:29 +05:45
Logan oos EvenandGitHub 50d4273272 disabled federation name output at supernode's management port (#845) 2021-10-07 13:56:03 +05:45
Hamish ColemanandGitHub 2e57663cde increased test coverage (#844)
* Start adding helper functions to the wire tests

* Add tests for two more wire functions

* Update test expects with new test data

* Use the normal mac address format, like a boss
2021-10-07 13:22:00 +05:45
Hamish ColemanandGitHub 4438f1aa2a added mingw test platform (#829)
* Provide a minimal reimplementation of our autoconf, to try windows builds

* Try building with windows

* Fix thinko in spelling

* Ensure shell script runs inside a shell

* Add a hack to aid include discovery

* Just keep adding tech debt...

* Assume that we will have slashes in some of the replacement strings and avoid that char with sed

* Restore one slash

* Hack around the tools makefile interdependancy bug

* A correct cflags include hack for each compile dir

* Ensure we link against winsock (note, even though this says 32bit, it should link the 64bit library ... I think)

* Bad link ordering if we dont use LDLIBS

* Remove unused make variable

* Remove makefile duplication using inheritance (this does mean you can no longer cd tools; make, but must do make tools)

* Add missing library for win32

* Show OS variable

* Make hack autoconf more robust for tests on non gitlab runners

* Remove no longer used substitutions from hack autoconf

* Add missing include path to tools under win32

* Build the win32 subdir when the compiler is Msys

* The different subdirs have different dependancies

* Ensure we can find the include files

* Fix library link ordering

* Ensure the tools dir can find the special win32 lib

* Deal with the differing basic type sizes on both linux/64bit and windows/64bit

* Document the steps to mimic the github windows/mingw build locally - to allow for simpler debugging

* Ensure branch name in instructions matches my test branch name

* Clarify the shell needed to build with mingw

* Since the makefile depends on knowing the OS, raise a fatal error if we cannot determine this

* Handling different compile environments is hard.

- Linux: sane and reasonable results for both uname -s (=Linux) and
  uname -o (=GNU/Linux)
- Windows/Mingw: insane results for uname -s
  (=MSYS_NT-$MAJOR.$MINOR-$BUILDNR) but sane results for uname -o (Msys)
- Macos: sane results for uname -s (=Darwin) but does not support
  uname -o at all

* Revamp the way that Mingw is detected

* Avoid attempting to generate gcovr report when running under windows

* Whoops, isolate the right step

* Fix spelling mistake

* win32/Makefile: Remove unused setting and add comment

* ensure that all win32 includes use the same expected path

* Allow simpler cross compilation by letting configure pass the CC and AR environment through

* Avoid multiple '_CRT_SECURE_NO_WARNINGS redefined' warnings

* Convert to a consolidated CONFIG_TARGET variable to select any different compile options

* Use the more generic printf defines to avoid warnings on mingw

* Update mingw build docs

* English better for reader happy make

* Address a number of mingw compiler warnings

* Fix Visual C compile

* Be sure to document some of the hacky nature of the mingw build
2021-10-06 00:52:15 +05:45
Logan oos EvenandGitHub db5adc2038 fine-tuned REGISTER cookie handling (#837) 2021-10-03 18:19:29 +05:45
Logan oos EvenandGitHub bc65a7f59e added forwarded REGISTER cookie type (#836) 2021-10-03 05:24:33 +05:45
Logan oos EvenandGitHub ebb357245a added a flag field to QUERY_PEER (#835) 2021-10-02 23:17:45 +05:45
Logan oos EvenandGitHub 2d34545304 compile fix (#834) 2021-09-30 12:39:31 +05:45
Logan oos EvenandGitHub 560b16f28f compile fix (#833) 2021-09-30 12:21:26 +05:45
Logan oos EvenandGitHub 16d248d921 fixed MinGW compile (#830) 2021-09-30 02:20:48 +05:45
Hamish ColemanandGitHub dec1771d5f added test platform MacOS (#828)
* Just for a laugh, lets naively throw the same build at non linux OS

* Only run apt commands on linux (yes, this is not actually right, but it is close enough for github actions at the moment)

* Start installing required macOS packages

* Only run apt commands on linux #2

* Ensure that we use a Bourne shell, even on Windows

* Until it is clear how to install autotools on windows in github runners, avoid fighting that bear

* Only try to run gcovr on ubuntu-latest

* Install the right macos dep

* Install gcovr on macos and upload all coverage report artifacts

* Upload a generated tests output artifact, even if the tests failed

* Prepend a quick smoke test to the full matrix and coverage builds

* Use short names for jobs
2021-09-29 16:51:02 +05:45
Logan oos EvenandGitHub 4137441b5e fine-tuned log levels (#827) 2021-09-29 13:38:55 +05:45
Luca Deri 00159d0d01 Compilation fix 2021-09-27 16:38:13 +02:00
Logan oos EvenandGitHub 4aaa5e5522 updated Scratchpad.md 2021-09-27 19:55:21 +05:45
Hamish ColemanandGitHub b735ad6b9e added test framework and code coverage reporting (#797)
* Add a simple test framework

* Add a code coverage report example oneliner

* Move the coverage report into a separate directory

* Add a github action to run tests and publish a branch with the coverage report

* Fix: Missing job separator

* Fix: remember to actually run configure

* Fix: Gotta autogen before I configure

* Dont try to upload coverage report unless this is a push

* Clearly show the git ref tested in the coverage report

* Add a test for the various transforms

* Add tests for the elliptic curve and pearson hash

* Ensure we ignore new generated output

* Remove unneeded boilerplate from the compression tests

* Add an example of a test of the encoded wire packets

* Ensure that correctly testable data is output even when zstd is not compiled

* Factor test runner out into its own script and attempt to add it to the cmake file

* Tell cmake about a new object file

* Stop trying to make Cmake work...

* Stop trying to make cmake work, round 2

* In the middle of a thousand lines of cmake output was one important one - windows could not find assert() - try again

* Try again to plumb the tests into cmake

* Add missing library to our superset install line

* Fix build error when libcap-dev is installed

* Switch to using artifact uploads instead of pages to store/show the coverage report

* Fix artifact upload yaml

* Upload coverage report to codecov

* Fix codecov - clearly it doesnt do a recursive search for coverage files

* Fix codecov - my hopeful use of a list of directories didnt work

* Fix codecov - unfortunately, it doesnt just consume the coverage data and needs us to generate the gcov output

* Fix codecov - nope, it still doesnt recursively search

* Fix codecov - it really helps if I run the gcov data generator

* Add a simple matrix build

* Fix older ubuntu versions of gcovr that do not support the '--html-title' option

* Ensure we use gcover options that are identical on older ubuntu

* Improve coverage generation and required build packages
2021-09-27 15:26:06 +05:45
Logan oos EvenandGitHub f0a4f65067 updated n2n.7 man page (#825) 2021-09-27 14:57:26 +05:45
Logan oos EvenandGitHub 0d39f50051 created space for more REGISTER type cookies 2021-09-27 02:41:14 +05:45