diff --git a/.github/workflows/maven.yaml b/.github/workflows/maven.yaml index 3a326c5..fb14674 100644 --- a/.github/workflows/maven.yaml +++ b/.github/workflows/maven.yaml @@ -20,4 +20,4 @@ jobs: distribution: 'temurin' cache: maven - name: Build with Maven - run: mvn clean install --batch-mode --update-snapshots + run: mvn clean install -Pqulice --batch-mode --update-snapshots diff --git a/src/main/java/io/github/artemget/tagrelease/command/CmdListStand.java b/src/main/java/io/github/artemget/tagrelease/command/CmdListStand.java index 0aff317..8b96ffd 100644 --- a/src/main/java/io/github/artemget/tagrelease/command/CmdListStand.java +++ b/src/main/java/io/github/artemget/tagrelease/command/CmdListStand.java @@ -42,7 +42,7 @@ * * @since 0.1.0 */ -public class CmdListStand implements Cmd { +public final class CmdListStand implements Cmd { /** * Available stands. */ @@ -56,22 +56,27 @@ public CmdListStand(final Stands stands) { this.stands = stands; } + // @checkstyle IllegalCatchCheck (50 lines) + @SuppressWarnings("PMD.AvoidCatchingGenericException") @Override public Send execute(final Update update) throws CmdException { final SendMessage message; try { message = new SendMessage( update.getMessage().getChatId().toString(), - new Stand.Text( + new Stand.Printed( this.stands.stand( new Trimmed( new Replaced( - new TextOf(update.getMessage().getText()), "Покажи сервис", "") + new TextOf(update.getMessage().getText()), + "Покажи сервис", + "" + ) ).asString() ) ).toString() ); - } catch (Exception exception) { + } catch (final Exception exception) { throw new CmdException( String.format("Failed to eject value from cmd %s", update.getMessage().getText()), exception diff --git a/src/main/java/io/github/artemget/tagrelease/command/CmdListStands.java b/src/main/java/io/github/artemget/tagrelease/command/CmdListStands.java index 6c7ed2c..c877735 100644 --- a/src/main/java/io/github/artemget/tagrelease/command/CmdListStands.java +++ b/src/main/java/io/github/artemget/tagrelease/command/CmdListStands.java @@ -26,7 +26,6 @@ import io.github.artemget.tagrelease.domain.Stands; import io.github.artemget.teleroute.command.Cmd; -import io.github.artemget.teleroute.command.CmdException; import io.github.artemget.teleroute.send.Send; import io.github.artemget.teleroute.telegrambots.send.SendMessageWrap; import org.telegram.telegrambots.meta.api.methods.send.SendMessage; @@ -56,7 +55,7 @@ public CmdListStands(final Stands stands) { public Send execute(final Update update) { final SendMessage message = new SendMessage( update.getMessage().getChatId().toString(), - new Stands.Text(this.stands).toString() + new Stands.Printed(this.stands).toString() ); message.setReplyToMessageId(update.getMessage().getMessageId()); message.enableMarkdownV2(true); diff --git a/src/main/java/io/github/artemget/tagrelease/command/package-info.java b/src/main/java/io/github/artemget/tagrelease/command/package-info.java new file mode 100644 index 0000000..1f3f12e --- /dev/null +++ b/src/main/java/io/github/artemget/tagrelease/command/package-info.java @@ -0,0 +1,28 @@ +/* + * MIT License + * + * Copyright (c) 2024-2025. Artem Getmanskii + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/** + * Commands directory. + */ +package io.github.artemget.tagrelease.command; diff --git a/src/main/java/io/github/artemget/tagrelease/domain/Service.java b/src/main/java/io/github/artemget/tagrelease/domain/Service.java index 073e11b..b1cf289 100644 --- a/src/main/java/io/github/artemget/tagrelease/domain/Service.java +++ b/src/main/java/io/github/artemget/tagrelease/domain/Service.java @@ -24,12 +24,34 @@ package io.github.artemget.tagrelease.domain; +import io.github.artemget.tagrelease.exception.TagException; import org.cactoos.Scalar; +/** + * Application's source code in git. + * + * @since 0.1.0 + */ public interface Service { + /** + * Returns application name. + * + * @return Name + */ String name(); + /** + * Returns application's tag. + * + * @return Tag + */ String tag(); - Service tagged(Scalar tag); + /** + * Builds new tag. + * + * @param rule To build tag + * @return Service with a new tag + */ + Service tagged(Scalar rule) throws TagException; } diff --git a/src/main/java/io/github/artemget/tagrelease/domain/ServiceGitlabEager.java b/src/main/java/io/github/artemget/tagrelease/domain/ServiceGitlabEager.java index 9e06ac0..91410ab 100644 --- a/src/main/java/io/github/artemget/tagrelease/domain/ServiceGitlabEager.java +++ b/src/main/java/io/github/artemget/tagrelease/domain/ServiceGitlabEager.java @@ -24,12 +24,32 @@ package io.github.artemget.tagrelease.domain; +import io.github.artemget.tagrelease.exception.TagException; import org.cactoos.Scalar; -public class ServiceGitlabEager implements Service { +/** + * Application's source code in gitlab. + * + * @since 0.1.0 + */ +@SuppressWarnings("PMD.AvoidFieldNameMatchingMethodName") +public final class ServiceGitlabEager implements Service { + /** + * Application name. + */ private final String name; + + /** + * Application tag. + */ private final String tag; + /** + * Main ctor. + * + * @param name Of application + * @param tag Of application + */ public ServiceGitlabEager(final String name, final String tag) { this.name = name; this.tag = tag; @@ -45,13 +65,17 @@ public String tag() { return this.tag; } + // @checkstyle IllegalCatchCheck (50 lines) + @SuppressWarnings("PMD.AvoidCatchingGenericException") @Override - public Service tagged(Scalar tag) { - //todo: req to gitlab + public Service tagged(final Scalar rule) throws TagException { try { - return new ServiceGitlabEager(this.name, tag.value()); - } catch (Exception exception) { - throw new UnsupportedOperationException(exception); + return new ServiceGitlabEager(this.name, rule.value()); + } catch (final Exception exception) { + throw new TagException( + String.format("Failed to create tag for service: %s", this.name), + exception + ); } } } diff --git a/src/main/java/io/github/artemget/tagrelease/domain/Services.java b/src/main/java/io/github/artemget/tagrelease/domain/Services.java index 3d56c1c..183a171 100644 --- a/src/main/java/io/github/artemget/tagrelease/domain/Services.java +++ b/src/main/java/io/github/artemget/tagrelease/domain/Services.java @@ -26,23 +26,61 @@ import java.util.List; import java.util.stream.Collectors; +import org.cactoos.Text; +/** + * Applications. + * + * @since 0.1.0 + */ public interface Services { + /** + * Returns all services from stand. + * + * @return Services + */ List services(); + /** + * Returns service from stand by it's name. + * + * @param name Of service + * @return Service + */ Service service(String name); - final class Text { + /** + * Printed Services. + * Format: ```java %s:%s```\n + * + * @since 0.1.0 + */ + final class Printed implements Text { + /** + * Services. + */ private final Services services; - public Text(final Services services) { + /** + * Main ctor. + * + * @param services Services + */ + public Printed(final Services services) { this.services = services; } @Override - public String toString() { + public String asString() { return this.services.services().stream() - .map(service -> String.format("```java %s:%s```\n ", service.name(), service.tag())) + .map( + service -> + String.format( + "```java %s:%s```\n ", + service.name(), + service.tag() + ) + ) .collect(Collectors.joining()); } } diff --git a/src/main/java/io/github/artemget/tagrelease/domain/ServicesGitlab.java b/src/main/java/io/github/artemget/tagrelease/domain/ServicesGitlab.java index 7c55e7b..7ab47fb 100644 --- a/src/main/java/io/github/artemget/tagrelease/domain/ServicesGitlab.java +++ b/src/main/java/io/github/artemget/tagrelease/domain/ServicesGitlab.java @@ -26,14 +26,19 @@ import java.util.List; -public class ServicesGitlab implements Services { +/** + * Applications from gitlab. + * + * @since 0.1.0 + */ +public final class ServicesGitlab implements Services { @Override public List services() { throw new UnsupportedOperationException(); } @Override - public Service service(String name) { + public Service service(final String name) { throw new UnsupportedOperationException(); } } diff --git a/src/main/java/io/github/artemget/tagrelease/domain/Stand.java b/src/main/java/io/github/artemget/tagrelease/domain/Stand.java index 7c00770..66b445d 100644 --- a/src/main/java/io/github/artemget/tagrelease/domain/Stand.java +++ b/src/main/java/io/github/artemget/tagrelease/domain/Stand.java @@ -24,20 +24,54 @@ package io.github.artemget.tagrelease.domain; +import org.cactoos.Text; + +/** + * Server. + * + * @since 0.1.0 + */ public interface Stand { + /** + * Returns server name. + * + * @return Name + */ String name(); + /** + * Returns server's services. + * + * @return Services + */ Services services(); - final class Text { + /** + * Printed server. + * Format: + * Стенд: %s + * Сервисы: + * %s + * + * @since 0.1.0 + */ + final class Printed implements Text { + /** + * Server. + */ private final Stand stand; - public Text(final Stand stand) { + /** + * Main ctor. + * + * @param stand Stand + */ + public Printed(final Stand stand) { this.stand = stand; } @Override - public String toString() { + public String asString() { return String.format( """ Стенд: %s @@ -45,7 +79,7 @@ public String toString() { %s """, this.stand.name(), - new Services.Text(this.stand.services()) + new Services.Printed(this.stand.services()) ); } } diff --git a/src/main/java/io/github/artemget/tagrelease/domain/StandGitlab.java b/src/main/java/io/github/artemget/tagrelease/domain/StandGitlab.java index 1b81184..f8135c4 100644 --- a/src/main/java/io/github/artemget/tagrelease/domain/StandGitlab.java +++ b/src/main/java/io/github/artemget/tagrelease/domain/StandGitlab.java @@ -24,7 +24,12 @@ package io.github.artemget.tagrelease.domain; -public class StandGitlab implements Stand { +/** + * Server at gitlab. + * + * @since 0.1.0 + */ +public final class StandGitlab implements Stand { @Override public String name() { throw new UnsupportedOperationException(); diff --git a/src/main/java/io/github/artemget/tagrelease/domain/Stands.java b/src/main/java/io/github/artemget/tagrelease/domain/Stands.java index 6534cdf..78120af 100644 --- a/src/main/java/io/github/artemget/tagrelease/domain/Stands.java +++ b/src/main/java/io/github/artemget/tagrelease/domain/Stands.java @@ -26,23 +26,52 @@ import java.util.List; import java.util.stream.Collectors; +import org.cactoos.Text; +/** + * Servers. + * + * @since 0.1.0 + */ public interface Stands { + /** + * Returns available servers. + * + * @return Servers + */ List stands(); + /** + * Returns server by it's name. + * + * @param name Name + * @return Server + */ Stand stand(String name); - final class Text { + /** + * Printed servers. + * + * @since 0.1.0 + */ + final class Printed implements Text { + /** + * Stands. + */ private final Stands stands; - public Text(final Stands stands) { + /** + * Main ctor. + * @param stands Stands + */ + public Printed(final Stands stands) { this.stands = stands; } @Override - public String toString() { - return stands.stands().stream() - .map(st -> new Stand.Text(st).toString()) + public String asString() { + return this.stands.stands().stream() + .map(st -> new Stand.Printed(st).toString()) .collect(Collectors.joining()); } } diff --git a/src/main/java/io/github/artemget/tagrelease/domain/StandsGitlab.java b/src/main/java/io/github/artemget/tagrelease/domain/StandsGitlab.java index 5e01440..e5fd2ec 100644 --- a/src/main/java/io/github/artemget/tagrelease/domain/StandsGitlab.java +++ b/src/main/java/io/github/artemget/tagrelease/domain/StandsGitlab.java @@ -25,14 +25,20 @@ package io.github.artemget.tagrelease.domain; import java.util.List; -public class StandsGitlab implements Stands { + +/** + * Servers. + * + * @since 0.1.0 + */ +public final class StandsGitlab implements Stands { @Override public List stands() { throw new UnsupportedOperationException(); } @Override - public Stand stand(String name) { + public Stand stand(final String name) { throw new UnsupportedOperationException(); } } diff --git a/src/main/java/io/github/artemget/tagrelease/domain/package-info.java b/src/main/java/io/github/artemget/tagrelease/domain/package-info.java new file mode 100644 index 0000000..e60804e --- /dev/null +++ b/src/main/java/io/github/artemget/tagrelease/domain/package-info.java @@ -0,0 +1,28 @@ +/* + * MIT License + * + * Copyright (c) 2024-2025. Artem Getmanskii + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/** + * Domain directory. + */ +package io.github.artemget.tagrelease.domain; diff --git a/src/main/java/io/github/artemget/tagrelease/entry/ESplit.java b/src/main/java/io/github/artemget/tagrelease/entry/ESplit.java index f98e47e..2b343fb 100644 --- a/src/main/java/io/github/artemget/tagrelease/entry/ESplit.java +++ b/src/main/java/io/github/artemget/tagrelease/entry/ESplit.java @@ -36,11 +36,12 @@ */ public final class ESplit implements Entry> { /** - * Origin string entry + * Origin string entry. */ private final Entry origin; + /** - * Split delimiter + * Split delimiter. */ private final String delimiter; @@ -69,9 +70,13 @@ public Set value() throws EntryException { final String value = this.origin.value(); try { return Set.of(value.split(this.delimiter)); - } catch (PatternSyntaxException exception) { + } catch (final PatternSyntaxException exception) { throw new EntryException( - String.format("Wrong pattern delimiter: %s for entry value: %s", this.delimiter, value), + String.format( + "Wrong pattern delimiter: %s for entry value: %s", + this.delimiter, + value + ), exception ); } diff --git a/src/main/java/io/github/artemget/tagrelease/entry/package-info.java b/src/main/java/io/github/artemget/tagrelease/entry/package-info.java new file mode 100644 index 0000000..96b6892 --- /dev/null +++ b/src/main/java/io/github/artemget/tagrelease/entry/package-info.java @@ -0,0 +1,28 @@ +/* + * MIT License + * + * Copyright (c) 2024-2025. Artem Getmanskii + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/** + * Entry directory. + */ +package io.github.artemget.tagrelease.entry; diff --git a/src/main/java/io/github/artemget/tagrelease/exception/TagException.java b/src/main/java/io/github/artemget/tagrelease/exception/TagException.java new file mode 100644 index 0000000..56d0123 --- /dev/null +++ b/src/main/java/io/github/artemget/tagrelease/exception/TagException.java @@ -0,0 +1,49 @@ +/* + * MIT License + * + * Copyright (c) 2024-2025. Artem Getmanskii + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package io.github.artemget.tagrelease.exception; + +import java.io.Serial; + +/** + * Throws at build/get tag. + * + * @since 0.1.0 + */ +public class TagException extends Exception { + @Serial + private static final long serialVersionUID = 4172661814037122452L; + + public TagException(final String message) { + super(message); + } + + public TagException(final String message, final Throwable cause) { + super(message, cause); + } + + public TagException(final Throwable cause) { + super(cause); + } +} diff --git a/src/main/java/io/github/artemget/tagrelease/exception/package-info.java b/src/main/java/io/github/artemget/tagrelease/exception/package-info.java new file mode 100644 index 0000000..b695bbd --- /dev/null +++ b/src/main/java/io/github/artemget/tagrelease/exception/package-info.java @@ -0,0 +1,28 @@ +/* + * MIT License + * + * Copyright (c) 2024-2025. Artem Getmanskii + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/** + * Exception directory. + */ +package io.github.artemget.tagrelease.exception; diff --git a/src/main/java/io/github/artemget/tagrelease/match/MatchAdmin.java b/src/main/java/io/github/artemget/tagrelease/match/MatchAdmin.java index f6b0ff7..2eae29d 100644 --- a/src/main/java/io/github/artemget/tagrelease/match/MatchAdmin.java +++ b/src/main/java/io/github/artemget/tagrelease/match/MatchAdmin.java @@ -53,9 +53,10 @@ public MatchAdmin(final Entry> admins) { } @Override - public boolean test(final Wrap updateWrap) { + public boolean test(final Wrap update) { try { - return this.admins.value().contains(updateWrap.src().getMessage().getFrom().getId().toString()); + return this.admins.value() + .contains(update.src().getMessage().getFrom().getId().toString()); } catch (final EntryException exception) { throw new EntryExceptionUnchecked(exception); } diff --git a/src/main/java/io/github/artemget/tagrelease/match/MatchChats.java b/src/main/java/io/github/artemget/tagrelease/match/MatchChats.java index 13957f8..4684eb1 100644 --- a/src/main/java/io/github/artemget/tagrelease/match/MatchChats.java +++ b/src/main/java/io/github/artemget/tagrelease/match/MatchChats.java @@ -37,7 +37,7 @@ * * @since 0.1.0 */ -public class MatchChats implements Predicate> { +public final class MatchChats implements Predicate> { /** * Chat ids. */ @@ -53,9 +53,10 @@ public MatchChats(final Entry> chats) { } @Override - public boolean test(final Wrap updateWrap) { + public boolean test(final Wrap update) { try { - return this.chats.value().contains(updateWrap.src().getMessage().getChatId().toString()); + return this.chats.value() + .contains(update.src().getMessage().getChatId().toString()); } catch (final EntryException exception) { throw new EntryExceptionUnchecked(exception); } diff --git a/src/main/java/io/github/artemget/tagrelease/match/package-info.java b/src/main/java/io/github/artemget/tagrelease/match/package-info.java new file mode 100644 index 0000000..47a911d --- /dev/null +++ b/src/main/java/io/github/artemget/tagrelease/match/package-info.java @@ -0,0 +1,28 @@ +/* + * MIT License + * + * Copyright (c) 2024-2025. Artem Getmanskii + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/** + * Match directory. + */ +package io.github.artemget.tagrelease.match;