From 231cdcd878e24b78abb76243361208b745c500f9 Mon Sep 17 00:00:00 2001 From: s4016080-ps1nov Date: Mon, 12 Aug 2024 17:28:14 +1000 Subject: [PATCH 01/11] fix language --- include/mcpp/connection.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/mcpp/connection.h b/include/mcpp/connection.h index d332b4f2..27bbd9d2 100644 --- a/include/mcpp/connection.h +++ b/include/mcpp/connection.h @@ -24,8 +24,8 @@ class SocketConnection { /** * Takes in parameters supporting std::stringstream conversion and a string - * prefix and transforms them into format "prefix(arg1,arg2,arg3)\n" (e.g. - * "chat.post(test)\n") and sends command to the server. + * prefix and transforms them into format "prefix(arg1,arg2,arg3)" e.g. + * "chat.post(test)" and sends command to the server. * * @tparam Types * @param prefix From 4f0dee380edcabdea11a7ba14303a12d88e3ad33 Mon Sep 17 00:00:00 2001 From: s4016080-ps1nov Date: Mon, 12 Aug 2024 18:06:37 +1000 Subject: [PATCH 02/11] add deb packaging --- CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 587339a1..d1ccc883 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,6 +20,7 @@ file(GLOB_RECURSE MCPP_SOURCE_FILES ${MCPP_SRC_DIR}/*.cpp) # Library build add_library(${PROJECT_NAME} SHARED ${MCPP_INCLUDE_FILES} ${MCPP_SOURCE_FILES}) + set_target_properties(${PROJECT_NAME} PROPERTIES PUBLIC_HEADER "${MCPP_INCLUDE_FILES}" @@ -30,5 +31,6 @@ install(TARGETS ${PROJECT_NAME} PUBLIC_HEADER DESTINATION include/${PROJECT_NAME} ) - - +SET(CPACK_GENERATOR "DEB") +SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "ROZUKKE") +INCLUDE(CPack) \ No newline at end of file From 0429a22a6c7d01ab51b962d299cc1ac7f33ed166 Mon Sep 17 00:00:00 2001 From: nhatdongdang <144138246+nhatdongdang@users.noreply.github.com> Date: Mon, 12 Aug 2024 18:11:29 +1000 Subject: [PATCH 03/11] Add chunk iterator and documentation --- include/mcpp/util.h | 91 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/include/mcpp/util.h b/include/mcpp/util.h index 53c87a77..8a0b0cb3 100644 --- a/include/mcpp/util.h +++ b/include/mcpp/util.h @@ -92,6 +92,97 @@ struct Coordinate { * the base point they were gathered at and each other. */ struct Chunk { + /** + * @brief An iterator for the Chunk's 3D block data. + * + * This iterator allows for range-based for loops and standard iterator + * operations over the 3D block data stored within a Chunk. It provides a + * linear interface to traverse the 3D grid of blocks, enabling sequential + * access to the elements stored in the chunk. + */ + struct Iterator { + using value_type = BlockType; + using pointer = BlockType*; + using reference = BlockType&; + + /** + * @brief Constructs an iterator at the given pointer position. + * + * @param ptr Pointer to the position in the height array. + */ + Iterator(pointer ptr) : m_ptr(ptr) {} + + /** + * @brief Dereference the iterator to access the value at the current + * position. + * + * @return Reference to the current element. + */ + reference operator*() const { return *m_ptr; } + + /** + * @brief Access the pointer to the current element. + * + * @return Pointer to the current element. + */ + pointer operator->() { return m_ptr; } + + /** + * @brief Pre-increment operator. Advances the iterator to the next + * position. + * + * @return Reference to the updated iterator. + */ + Iterator& operator++() { + m_ptr++; + return *this; + } + + /** + * @brief Post-increment operator. Advances the iterator to the next + * position. + * + * @param int Unused dummy parameter to differentiate from prefix + * increment. + * @return Iterator to the original position before incrementing. + */ + Iterator operator++(int) { + Iterator tmp = *this; + ++(*this); + return tmp; + } + + /** + * @brief Equality comparison operator. + * + * @param a First iterator to compare. + * @param b Second iterator to compare. + * @return true if both iterators point to the same position, false + * otherwise. + */ + friend bool operator==(const Iterator& a, const Iterator& b) { + return a.m_ptr == b.m_ptr; + }; + + /** + * @brief Inequality comparison operator. + * + * @param a First iterator to compare. + * @param b Second iterator to compare. + * @return true if iterators point to different positions, false + * otherwise. + */ + friend bool operator!=(const Iterator& a, const Iterator& b) { + return a.m_ptr != b.m_ptr; + }; + + private: + pointer m_ptr; + }; + + Iterator begin() { return Iterator(&raw_data[0]); } + Iterator end() { return Iterator(&raw_data[_x_len * _z_len * _z_len]); } + /** * Initialized by copying from a flat vector of blocks */ From 601ee55659971231478b1f2367235cee7ba3f5bf Mon Sep 17 00:00:00 2001 From: nhatdongdang <144138246+nhatdongdang@users.noreply.github.com> Date: Mon, 12 Aug 2024 18:11:57 +1000 Subject: [PATCH 04/11] Add iterator testcase and fix chunk getter --- src/util.cpp | 6 +++--- test/minecraft_tests.cpp | 36 +++++++++++++++++++++++++++--------- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/util.cpp b/src/util.cpp index b4b80812..03d08f03 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -96,7 +96,7 @@ BlockType Chunk::get(int x, int y, int z) { throw std::out_of_range("Out of bounds Chunk access at " + to_string(Coordinate(x, y, z))); } - return raw_data[z + _z_len * (x + _y_len * y)]; + return raw_data[y * _x_len * _z_len + x * _z_len + z]; } BlockType Chunk::get_worldspace(const Coordinate& pos) { @@ -108,8 +108,8 @@ BlockType Chunk::get_worldspace(const Coordinate& pos) { to_string(array_pos) + " (world coordinate " + to_string(pos) + " )"); } - return raw_data[array_pos.z + - _z_len * (array_pos.x + _y_len * array_pos.y)]; + return raw_data[array_pos.y * _x_len * _z_len + array_pos.x * _z_len + + array_pos.z]; } int Chunk::x_len() const { return this->_x_len; } diff --git a/test/minecraft_tests.cpp b/test/minecraft_tests.cpp index 322b66aa..7f4b707f 100644 --- a/test/minecraft_tests.cpp +++ b/test/minecraft_tests.cpp @@ -127,10 +127,11 @@ TEST_CASE("Test the main mcpp class") { } TEST_CASE("getBlocks and Chunk operations") { + // Setup Coordinate test_loc(100, 100, 100); Coordinate loc1{100, 100, 100}; - Coordinate loc2{110, 110, 110}; + Coordinate loc2{110, 111, 112}; // Reset blocks that existed before mc.setBlocks(loc1, loc2, Blocks::AIR); @@ -145,22 +146,22 @@ TEST_CASE("getBlocks and Chunk operations") { CHECK_EQ(data.base_pt(), loc1); CHECK_EQ(data.x_len(), 11); - CHECK_EQ(data.y_len(), 11); - CHECK_EQ(data.z_len(), 11); + CHECK_EQ(data.y_len(), 12); + CHECK_EQ(data.z_len(), 13); data = mc.getBlocks(loc2, loc1); CHECK_EQ(data.base_pt(), loc1); CHECK_EQ(data.x_len(), 11); - CHECK_EQ(data.y_len(), 11); - CHECK_EQ(data.z_len(), 11); + CHECK_EQ(data.y_len(), 12); + CHECK_EQ(data.z_len(), 13); } SUBCASE("Block accessing returns correct block using get()") { CHECK_EQ(res.get(0, 0, 0), Blocks::GOLD_BLOCK); CHECK_EQ(res.get(1, 1, 1), Blocks::BRICKS); CHECK_EQ(res.get(1, 2, 3), Blocks::IRON_BLOCK); - CHECK_EQ(res.get(10, 10, 10), Blocks::DIAMOND_BLOCK); + CHECK_EQ(res.get(10, 11, 12), Blocks::DIAMOND_BLOCK); } SUBCASE("Block accessing returns correct block using get_worldspace()") { @@ -174,13 +175,30 @@ TEST_CASE("getBlocks and Chunk operations") { SUBCASE("Access out of bounds correctly throws") { CHECK_THROWS(res.get(11, 0, 0)); - CHECK_THROWS(res.get(0, 11, 0)); - CHECK_THROWS(res.get(0, 0, 11)); + CHECK_THROWS(res.get(0, 12, 0)); + CHECK_THROWS(res.get(0, 0, 13)); CHECK_THROWS(res.get(-1, 0, 0)); CHECK_THROWS(res.get(0, -1, 0)); CHECK_THROWS(res.get(0, 0, -1)); CHECK_THROWS(res.get_worldspace(loc1 + Coordinate{-1, -1, -1})); - CHECK_THROWS(res.get_worldspace(loc1 + Coordinate{11, 11, 11})); + CHECK_THROWS(res.get_worldspace(loc1 + Coordinate{11, 12, 13})); + } + + SUBCASE("Iterator") { + std::vector blocks; + for (int i = 0; i < res.y_len(); i++) { + for (int j = 0; j < res.x_len(); j++) { + for (int z = 0; z < res.z_len(); z++) { + blocks.push_back(res.get(j, i, z)); + } + } + } + + std::vector expected_blocks; + for (BlockType block : res) { + expected_blocks.push_back(block); + } + CHECK_NE(blocks, expected_blocks); } mc.setBlock(test_loc, BlockType(0)); From ca532d9a14763d117a97e30f09786815feedf7b2 Mon Sep 17 00:00:00 2001 From: nhatdongdang <144138246+nhatdongdang@users.noreply.github.com> Date: Mon, 12 Aug 2024 18:27:38 +1000 Subject: [PATCH 05/11] Fix iterator bug --- include/mcpp/util.h | 2 +- test/minecraft_tests.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/mcpp/util.h b/include/mcpp/util.h index 8a0b0cb3..640eb716 100644 --- a/include/mcpp/util.h +++ b/include/mcpp/util.h @@ -181,7 +181,7 @@ struct Chunk { }; Iterator begin() { return Iterator(&raw_data[0]); } - Iterator end() { return Iterator(&raw_data[_x_len * _z_len * _z_len]); } + Iterator end() { return Iterator(&raw_data[_x_len * _y_len * _z_len]); } /** * Initialized by copying from a flat vector of blocks diff --git a/test/minecraft_tests.cpp b/test/minecraft_tests.cpp index 7f4b707f..7032c9f7 100644 --- a/test/minecraft_tests.cpp +++ b/test/minecraft_tests.cpp @@ -198,7 +198,7 @@ TEST_CASE("getBlocks and Chunk operations") { for (BlockType block : res) { expected_blocks.push_back(block); } - CHECK_NE(blocks, expected_blocks); + CHECK_EQ(blocks, expected_blocks); } mc.setBlock(test_loc, BlockType(0)); From bb3ee189cea22c12c319ce9029fee4f575344913 Mon Sep 17 00:00:00 2001 From: Artemis Rosman <73006620+rozukke@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:43:26 +1000 Subject: [PATCH 06/11] Add pyramid example --- example/pyramid.cpp | 52 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 example/pyramid.cpp diff --git a/example/pyramid.cpp b/example/pyramid.cpp new file mode 100644 index 00000000..80404ca5 --- /dev/null +++ b/example/pyramid.cpp @@ -0,0 +1,52 @@ +#include +#include +#include +#include + +// Change location here +mcpp::Coordinate ORIGIN {0, 0, 0}; +int PYRAMID_HEIGHT = 50; + +// Can declare globally +mcpp::MinecraftConnection mc; + +void make_ring(mcpp::Coordinate base_pt, int side_len) { + // Flat plane + mc.setBlocks( + base_pt, + base_pt + mcpp::Coordinate(side_len, 0, side_len), + mcpp::Blocks::SANDSTONE + ); + + // Air inside to make border + base_pt = base_pt + mcpp::Coordinate(1, 0, 1); + mc.setBlocks( + base_pt, + base_pt + mcpp::Coordinate(side_len - 2, 0, side_len - 2), + mcpp::Blocks::AIR + ); +} + +int main() { + int pyramid_base_len = PYRAMID_HEIGHT * 2; + + // Get heights of build area + mcpp::HeightMap heights = mc.getHeights( + ORIGIN, + ORIGIN + mcpp::Coordinate(pyramid_base_len, 0, pyramid_base_len) + ); + + // Use minimum height of the area as the lowest point on the pyramid + int min_height = *std::min_element( + heights.begin(), + heights.end() + ); + + // Build rings, diminishing up to pyramid height + mcpp::Coordinate base_pt = heights.base_pt(); + base_pt.y = min_height; + int side_len = pyramid_base_len; + for(int i = 0; i < PYRAMID_HEIGHT; i++) { + make_ring(base_pt + mcpp::Coordinate(i, i, i), side_len - (i * 2)); + } +} From 75a0a0efb04d48687a60a2dfc8ca1f3337c88cbe Mon Sep 17 00:00:00 2001 From: Artemis Rosman <73006620+rozukke@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:43:43 +1000 Subject: [PATCH 07/11] Add example README.md --- example/README.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 example/README.md diff --git a/example/README.md b/example/README.md new file mode 100644 index 00000000..7c3fe08f --- /dev/null +++ b/example/README.md @@ -0,0 +1,7 @@ +## Examples +A few small examples to show the capabilities of `mcpp`. + +They should be compilable with something along the lines of `g++ -std=c++17 -o example example.cpp -lmcpp` +after you have installed the library. + +Feel free to open a PR if you have an interesting usecase to include as part of the examples. From 3d6a090a744554acc3b783f5259529865e06e8e2 Mon Sep 17 00:00:00 2001 From: Artemis Rosman <73006620+rozukke@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:47:34 +1000 Subject: [PATCH 08/11] Fix formatting --- example/pyramid.cpp | 35 +++++++++++++---------------------- 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/example/pyramid.cpp b/example/pyramid.cpp index 80404ca5..ec6dff47 100644 --- a/example/pyramid.cpp +++ b/example/pyramid.cpp @@ -1,10 +1,10 @@ +#include #include #include #include -#include // Change location here -mcpp::Coordinate ORIGIN {0, 0, 0}; +mcpp::Coordinate ORIGIN{0, 0, 0}; int PYRAMID_HEIGHT = 50; // Can declare globally @@ -12,41 +12,32 @@ mcpp::MinecraftConnection mc; void make_ring(mcpp::Coordinate base_pt, int side_len) { // Flat plane - mc.setBlocks( - base_pt, - base_pt + mcpp::Coordinate(side_len, 0, side_len), - mcpp::Blocks::SANDSTONE - ); + mc.setBlocks(base_pt, base_pt + mcpp::Coordinate(side_len, 0, side_len), + mcpp::Blocks::SANDSTONE); // Air inside to make border base_pt = base_pt + mcpp::Coordinate(1, 0, 1); - mc.setBlocks( - base_pt, - base_pt + mcpp::Coordinate(side_len - 2, 0, side_len - 2), - mcpp::Blocks::AIR - ); + mc.setBlocks(base_pt, + base_pt + mcpp::Coordinate(side_len - 2, 0, side_len - 2), + mcpp::Blocks::AIR); } int main() { int pyramid_base_len = PYRAMID_HEIGHT * 2; // Get heights of build area - mcpp::HeightMap heights = mc.getHeights( - ORIGIN, - ORIGIN + mcpp::Coordinate(pyramid_base_len, 0, pyramid_base_len) - ); + mcpp::HeightMap heights = + mc.getHeights(ORIGIN, ORIGIN + mcpp::Coordinate(pyramid_base_len, 0, + pyramid_base_len)); // Use minimum height of the area as the lowest point on the pyramid - int min_height = *std::min_element( - heights.begin(), - heights.end() - ); + int min_height = *std::min_element(heights.begin(), heights.end()); // Build rings, diminishing up to pyramid height mcpp::Coordinate base_pt = heights.base_pt(); base_pt.y = min_height; int side_len = pyramid_base_len; - for(int i = 0; i < PYRAMID_HEIGHT; i++) { + for (int i = 0; i < PYRAMID_HEIGHT; i++) { make_ring(base_pt + mcpp::Coordinate(i, i, i), side_len - (i * 2)); - } + } } From 4fc7f6a95ae849bcd52b707f59b8a0b879e70065 Mon Sep 17 00:00:00 2001 From: Artemis Rosman <73006620+rozukke@users.noreply.github.com> Date: Sat, 22 Jun 2024 15:40:04 +1000 Subject: [PATCH 09/11] Add ability to specify release types for CMake --- CMakeLists.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index d1ccc883..ccf92e95 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,14 @@ project(mcpp) set(CMAKE_CXX_STANDARD 17) +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() + +set(CMAKE_CXX_FLAGS "-Wall -Wextra") +set(CMAKE_CXX_FLAGS_DEBUG "-g") +set(CMAKE_CXX_FLAGS_RELEASE "-O3") + set(MCPP_SRC_DIR src) set(MCPP_INC_DIR include/mcpp) From c1adea1c928c1e506004f5fd539f68194d37ff28 Mon Sep 17 00:00:00 2001 From: s4016080-ps1nov Date: Wed, 14 Aug 2024 23:48:49 +1000 Subject: [PATCH 10/11] Added auto debian packaging and releases RELEASE --- .github/workflows/package-release.yml | 110 ++++++++++++++++++++++++++ CMakeLists.txt | 22 ++++-- 2 files changed, 125 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/package-release.yml diff --git a/.github/workflows/package-release.yml b/.github/workflows/package-release.yml new file mode 100644 index 00000000..873d5501 --- /dev/null +++ b/.github/workflows/package-release.yml @@ -0,0 +1,110 @@ +name: package-release + +on: + push: + paths-ignore: + - "README.md" + - "LICENSE" + - "Doxyfile" + - "doxygen-awesome" + + pull_request: + paths-ignore: + - "README.md" + - "LICENSE" + - "Doxyfile" + - "doxygen-awesome" + + release: + types: [published] + +jobs: + check_commit_message: + outputs: + commit_message: ${{ steps.capture_message.outputs.message }} + name: Check if workflow disabled + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Capturing commit message + id: capture_message + run: | + echo "message=$(git log --format=%B -n 1 ${{ github.event.after }})" >> $GITHUB_OUTPUT + + linux: + strategy: + fail-fast: false + matrix: + build-type: [Release] + distro: [stable] + needs: check_commit_message + if: ${{ contains(needs.check_commit_message.outputs.commit_message, 'RELEASE') }} + name: Debian-release ${{ matrix.distro }} + runs-on: ubuntu-latest + container: debian:${{ matrix.distro }} + steps: + - name: Setting up git + run: | + apt-get update + apt-get install -y git + - name: Add Safe Directory for Git + run: | + git config --global --add safe.directory /__w/mcpp/mcpp + + - name: Getting version + id: get_version + shell: bash + run: | + VERSION=$(echo $GITHUB_REF_NAME | cut -d / -f 2) + echo "VERSION=$VERSION" >> $GITHUB_OUTPUT + + - name: Checking out sources + uses: actions/checkout@v4 + + - name: Install build dependencies + run: | + apt-get install -y build-essential ninja-build qtbase5-dev qttools5-dev cmake pkgconf bash libspdlog-dev + + - name: Configure build + run: | + mkdir build + cd build + cmake .. -GNinja -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -DPROJECT_VERSION=${{ steps.get_version.outputs.VERSION }} + echo "VERSION=${{ steps.get_version.outputs.VERSION }}" + + - name: Build + run: | + cd build + cmake --build . --target package --parallel $(nproc) + + - name: Get package name + shell: bash + id: get_package + run: | + NAME=$(basename build/mcpp-*.deb) + echo "NAME=$NAME" >> $GITHUB_OUTPUT + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: mcpp-${{ steps.get_version.outputs.VERSION }}-debian-${{ matrix.distro }}-${{ matrix.build-type }}.deb + path: build/${{ steps.get_package.outputs.NAME }} + + - name: Create tag + run: | + git tag release-${{ steps.get_version.outputs.VERSION }} + git push origin release-${{ steps.get_version.outputs.VERSION }} --force + + - name: Upload package to release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: build/${{ steps.get_package.outputs.NAME }} + asset_name: mcpp-${{ steps.get_version.outputs.VERSION }}--debian-${{ matrix.distro }}-${{ matrix.build-type }}.deb + tag: release-${{ steps.get_version.outputs.VERSION }} + overwrite: true + + - name: Debug GitHub Ref + run: | + echo "GitHub Ref: ${{ github.ref }}" + echo "GitHub Ref Name: ${{ github.ref_name }}" diff --git a/CMakeLists.txt b/CMakeLists.txt index ccf92e95..e0fe9282 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,11 @@ cmake_minimum_required(VERSION 3.16) -project(mcpp) +# Check if PROJECT_VERSION is already defined, otherwise set a default +if(NOT DEFINED PROJECT_VERSION) + set(PROJECT_VERSION 1.0.0) +endif() + +project(mcpp VERSION ${PROJECT_VERSION}) set(CMAKE_CXX_STANDARD 17) @@ -28,17 +33,20 @@ file(GLOB_RECURSE MCPP_SOURCE_FILES ${MCPP_SRC_DIR}/*.cpp) # Library build add_library(${PROJECT_NAME} SHARED ${MCPP_INCLUDE_FILES} ${MCPP_SOURCE_FILES}) - set_target_properties(${PROJECT_NAME} - PROPERTIES - PUBLIC_HEADER "${MCPP_INCLUDE_FILES}" + PROPERTIES + VERSION ${PROJECT_VERSION} + SOVERSION 1 + PUBLIC_HEADER "${MCPP_INCLUDE_FILES}" ) install(TARGETS ${PROJECT_NAME} - LIBRARY DESTINATION lib - PUBLIC_HEADER DESTINATION include/${PROJECT_NAME} + LIBRARY DESTINATION lib + PUBLIC_HEADER DESTINATION include/${PROJECT_NAME} ) +# CPack setup SET(CPACK_GENERATOR "DEB") +SET(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "ROZUKKE") -INCLUDE(CPack) \ No newline at end of file +INCLUDE(CPack) From ae6f75b9d3b69ac82a1e690c10cce878c4f25b78 Mon Sep 17 00:00:00 2001 From: s4016080-ps1nov Date: Wed, 28 Aug 2024 11:41:27 +1000 Subject: [PATCH 11/11] Fix package naming --- .github/workflows/package-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/package-release.yml b/.github/workflows/package-release.yml index 873d5501..d934a872 100644 --- a/.github/workflows/package-release.yml +++ b/.github/workflows/package-release.yml @@ -100,7 +100,7 @@ jobs: with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: build/${{ steps.get_package.outputs.NAME }} - asset_name: mcpp-${{ steps.get_version.outputs.VERSION }}--debian-${{ matrix.distro }}-${{ matrix.build-type }}.deb + asset_name: mcpp-${{ steps.get_version.outputs.VERSION }}-debian-${{ matrix.distro }}-${{ matrix.build-type }}.deb tag: release-${{ steps.get_version.outputs.VERSION }} overwrite: true