<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one or more
  ~ contributor license agreements.  See the NOTICE file distributed with
  ~ this work for additional information regarding copyright ownership.
  ~ The ASF licenses this file to You under the Apache License, Version 2.0
  ~ (the "License"); you may not use this file except in compliance with
  ~ the License.  You may obtain a copy of the License at
  ~
  ~     http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  ~
  -->

<assembly
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>dist</id>
    <formats>
        <format>tar.gz</format>
    </formats>
    <fileSets>
        <fileSet>
            <directory>${project.basedir}/../dist-material/bin</directory>
            <outputDirectory>bin</outputDirectory>
            <includes>
                <include>*.sh</include>
                <include>*.bat</include>
            </includes>
            <fileMode>0755</fileMode>
        </fileSet>
        <fileSet>
            <directory>${project.basedir}/../dist-material</directory>
            <outputDirectory>config</outputDirectory>
            <includes>
                <include>log4j2.xml</include>
                <include>alarm-settings.yml</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${project.basedir}/../dist-material</directory>
            <outputDirectory/>
            <includes>
                <include>config-examples/*</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${project.basedir}/../oap-server/server-starter/src/main/resources</directory>
            <includes>
                <include>application.yml</include>
                <include>component-libraries.yml</include>
                <include>gateways.yml</include>
                <include>service-apdex-threshold.yml</include>
                <include>endpoint-name-grouping.yml</include>
                <include>metadata-service-mapping.yaml</include>
                <include>trace-sampling-policy-settings.yml</include>
                <include>oal/*.oal</include>
                <include>fetcher-prom-rules/*.yaml</include>
                <include>envoy-metrics-rules/*.yaml</include>
                <include>meter-analyzer-config/*.yaml</include>
                <include>zabbix-rules/*.yaml</include>
                <include>openapi-definitions/*</include>
                <include>otel-oc-rules/*</include>
                <include>ui-initialized-templates/*</include>
                <include>lal/*</include>
                <include>log-mal-rules/*</include>
            </includes>
            <outputDirectory>config</outputDirectory>
        </fileSet>
        <fileSet>
            <directory>${project.basedir}/../oap-server/server-starter/target/skywalking-oap-assembly/skywalking-oap/libs</directory>
            <outputDirectory>oap-libs</outputDirectory>
        </fileSet>

        <fileSet>
            <directory>${project.basedir}/../oap-server/server-tools/profile-exporter/tool-profile-snapshot-exporter/target/skywalking-tools-exporter-assembly/skywalking-tools-exporter/libs</directory>
            <outputDirectory>oap-libs</outputDirectory>
        </fileSet>

        <!-- Profile exporter tools -->
        <fileSet>
            <directory>${project.basedir}/../tools/profile-exporter</directory>
            <outputDirectory>tools/profile-exporter</outputDirectory>
        </fileSet>

        <fileSet>
            <directory>${project.basedir}/../dist-material/release-docs</directory>
            <outputDirectory/>
        </fileSet>
    </fileSets>
    <files>
        <file>
            <source>${project.basedir}/../apm-webapp/target/skywalking-webapp.jar</source>
            <outputDirectory>webapp</outputDirectory>
            <fileMode>0644</fileMode>
        </file>
        <file>
            <source>${project.basedir}/../apm-webapp/src/main/assembly/webapp.yml</source>
            <outputDirectory>webapp</outputDirectory>
            <fileMode>0644</fileMode>
        </file>
    </files>
</assembly>
