diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f40d1f4..fa78115 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,6 +14,14 @@ on: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: + check_version_files: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: check version + run: | + $GITHUB_WORKSPACE/travis/version.py --check prepare_example_json: runs-on: ubuntu-latest @@ -147,6 +155,7 @@ jobs: - name: copy code run: | + mkdir -p $HOME/Arduino/libraries/ cp -r $GITHUB_WORKSPACE $HOME/Arduino/libraries/arduinoWebSockets - name: config IDE @@ -158,6 +167,7 @@ jobs: arduino --pref update.check=false - name: build example + timeout-minutes: 20 run: | export DISPLAY=:1.0 export PATH="$HOME/arduino_ide:$PATH" @@ -166,7 +176,7 @@ jobs: build_sketch arduino $SKETCH done: - needs: [prepare_ide, prepare_example_json, build] + needs: [prepare_ide, prepare_example_json, build, check_version_files] runs-on: ubuntu-latest steps: - name: Done diff --git a/library.json b/library.json index fbf044f..9944b75 100644 --- a/library.json +++ b/library.json @@ -1,25 +1,25 @@ { - "name": "WebSockets", - "description": "WebSocket Server and Client for Arduino based on RFC6455", - "keywords": "wifi, http, web, server, client, websocket", "authors": [ { + "maintainer": true, "name": "Markus Sattler", - "url": "https://github.com/Links2004", - "maintainer": true + "url": "https://github.com/Links2004" } ], - "repository": { - "type": "git", - "url": "https://github.com/Links2004/arduinoWebSockets.git" - }, - "version": "2.3.2", - "license": "LGPL-2.1", + "description": "WebSocket Server and Client for Arduino based on RFC6455", "export": { "exclude": [ "tests" ] }, "frameworks": "arduino", - "platforms": "atmelavr, espressif8266, espressif32" -} + "keywords": "wifi, http, web, server, client, websocket", + "license": "LGPL-2.1", + "name": "WebSockets", + "platforms": "atmelavr, espressif8266, espressif32", + "repository": { + "type": "git", + "url": "https://github.com/Links2004/arduinoWebSockets.git" + }, + "version": "2.3.2" +} \ No newline at end of file diff --git a/src/WebSockets.h b/src/WebSockets.h index aded4bb..b182bd5 100644 --- a/src/WebSockets.h +++ b/src/WebSockets.h @@ -40,6 +40,8 @@ #include #endif +#include "WebSocketsVersion.h" + #ifndef NODEBUG_WEBSOCKETS #ifdef DEBUG_ESP_PORT #define DEBUG_WEBSOCKETS(...) \ diff --git a/src/WebSocketsVersion.h b/src/WebSocketsVersion.h new file mode 100644 index 0000000..2d8968b --- /dev/null +++ b/src/WebSocketsVersion.h @@ -0,0 +1,36 @@ +/** + * @file WebSocketsVersion.h + * @date 07.01.2021 + * @author Markus Sattler + * + * Copyright (c) 2015 Markus Sattler. All rights reserved. + * This file is part of the WebSockets for Arduino. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef WEBSOCKETSVERSION_H_ +#define WEBSOCKETSVERSION_H_ + +#define WEBSOCKETS_VERSION "2.3.2" + +#define WEBSOCKETS_VERSION_MAJOR 2 +#define WEBSOCKETS_VERSION_MINOR 3 +#define WEBSOCKETS_VERSION_PATCH 2 + +#define WEBSOCKETS_VERSION_INT 2003002 + +#endif /* WEBSOCKETSVERSION_H_ */ diff --git a/travis/version.py b/travis/version.py new file mode 100755 index 0000000..be1359f --- /dev/null +++ b/travis/version.py @@ -0,0 +1,81 @@ +#!/usr/bin/python3 + +import json +import configparser +import argparse +import re +import os + +travis_dir = os.path.dirname(os.path.abspath(__file__)) +base_dir = os.path.abspath(travis_dir + "/../") + +def get_library_properties_version(): + library_properties = {} + with open(f'{base_dir}/library.properties', 'r') as f: + library_properties = configparser.ConfigParser() + library_properties.read_string('[root]\n' + f.read()) + return library_properties['root']['version'] + +def get_library_json_version(): + library_json = {} + with open(f'{base_dir}/library.json', 'r') as f: + library_json = json.load(f) + return library_json['version'] + +def get_header_versions(): + data = {} + define = re.compile('^#define WEBSOCKETS_VERSION_?(.*) "?([0-9\.]*)"?$') + with open(f'{base_dir}/src/WebSocketsVersion.h', 'r') as f: + for line in f: + m = define.match(line) + if m: + name = m[1] + if name == "": + name = "VERSION" + data[name] = m[2] + return data + + +parser = argparse.ArgumentParser(description='Checks and update Version files') +parser.add_argument( + '--update', action=argparse.BooleanOptionalAction, default=False) +parser.add_argument( + '--check', action=argparse.BooleanOptionalAction, default=True) + +args = parser.parse_args() + +if args.update: + library_properties_version = get_library_properties_version() + + with open(f'{base_dir}/library.json', 'r') as f: + library_json = json.load(f) + + library_json['version'] = library_properties_version + + with open(f'{base_dir}/library.json', 'w') as f: + json.dump(library_json, f, indent=4, sort_keys=True) + + +library_json_version = get_library_json_version() +library_properties_version = get_library_properties_version() +header_version = get_header_versions() + +print("WebSocketsVersion.h", header_version) +print(f"library.json: {library_json_version}") +print(f"library.properties: {library_properties_version}") + +if args.check: + if library_json_version != library_properties_version or header_version['VERSION'] != library_properties_version: + raise Exception('versions did not match!') + + hvs = header_version['VERSION'].split('.') + if header_version['MAJOR'] != hvs[0]: + raise Exception('header MAJOR version wrong!') + if header_version['MINOR'] != hvs[1]: + raise Exception('header MINOR version wrong!') + if header_version['PATCH'] != hvs[2]: + raise Exception('header PATCH version wrong!') + + intversion = int(hvs[0]) * 1000000 + int(hvs[1]) * 1000 + int(hvs[2]) + if int(header_version['INT']) != intversion: + raise Exception('header INT version wrong!') \ No newline at end of file