| @@ -1,2 +1 @@ | |||
| *.agdai | |||
| MAlonzo/** | |||
| data/ | |||
| @@ -0,0 +1,23 @@ | |||
| # Maven Sync Setup | |||
| ## Repository | |||
| _Reposilite_-based Maven Repository Manager acting as a caching proxy. | |||
| ```sh | |||
| mkdir data | |||
| cd repo | |||
| ./deploy.sh | |||
| ``` | |||
| TODO: something is not working correctly when loading the initial configuration. | |||
| Take the content of the `reposilite.cdn` and paste it into the Configuration window | |||
| after logging in as `admin:secret` on http://localhost:9001 and press _Update configuration and reload_. | |||
| ## Sync job | |||
| Script that can be triggered manually or scheduled. | |||
| cd sync | |||
| ./sync.sh | |||
| Mirror tarballs. | |||
| @@ -0,0 +1,113 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
| xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> | |||
| <modelVersion>4.0.0</modelVersion> | |||
| <parent> | |||
| <groupId>org.springframework.boot</groupId> | |||
| <artifactId>spring-boot-starter-parent</artifactId> | |||
| <version>2.6.5</version> | |||
| <relativePath/> <!-- lookup parent from repository --> | |||
| </parent> | |||
| <groupId>com.example</groupId> | |||
| <artifactId>demo</artifactId> | |||
| <version>0.0.1-SNAPSHOT</version> | |||
| <name>demo</name> | |||
| <description>Demo project for Spring Boot</description> | |||
| <properties> | |||
| <java.version>11</java.version> | |||
| <kotlin.version>1.6.10</kotlin.version> | |||
| </properties> | |||
| <dependencies> | |||
| <dependency> | |||
| <groupId>org.springframework.boot</groupId> | |||
| <artifactId>spring-boot-starter-actuator</artifactId> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>org.springframework.boot</groupId> | |||
| <artifactId>spring-boot-starter-amqp</artifactId> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>org.springframework.boot</groupId> | |||
| <artifactId>spring-boot-starter-hateoas</artifactId> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>org.springframework.boot</groupId> | |||
| <artifactId>spring-boot-starter-oauth2-resource-server</artifactId> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>org.springframework.boot</groupId> | |||
| <artifactId>spring-boot-starter-security</artifactId> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>org.springframework.boot</groupId> | |||
| <artifactId>spring-boot-starter-thymeleaf</artifactId> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>org.springframework.boot</groupId> | |||
| <artifactId>spring-boot-starter-web</artifactId> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>com.fasterxml.jackson.module</groupId> | |||
| <artifactId>jackson-module-kotlin</artifactId> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>org.jetbrains.kotlin</groupId> | |||
| <artifactId>kotlin-reflect</artifactId> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>org.jetbrains.kotlin</groupId> | |||
| <artifactId>kotlin-stdlib-jdk8</artifactId> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>org.thymeleaf.extras</groupId> | |||
| <artifactId>thymeleaf-extras-springsecurity5</artifactId> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>org.springframework.boot</groupId> | |||
| <artifactId>spring-boot-starter-test</artifactId> | |||
| <scope>test</scope> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>org.springframework.amqp</groupId> | |||
| <artifactId>spring-rabbit-test</artifactId> | |||
| <scope>test</scope> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>org.springframework.security</groupId> | |||
| <artifactId>spring-security-test</artifactId> | |||
| <scope>test</scope> | |||
| </dependency> | |||
| </dependencies> | |||
| <build> | |||
| <sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory> | |||
| <testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory> | |||
| <plugins> | |||
| <plugin> | |||
| <groupId>org.springframework.boot</groupId> | |||
| <artifactId>spring-boot-maven-plugin</artifactId> | |||
| </plugin> | |||
| <plugin> | |||
| <groupId>org.jetbrains.kotlin</groupId> | |||
| <artifactId>kotlin-maven-plugin</artifactId> | |||
| <configuration> | |||
| <args> | |||
| <arg>-Xjsr305=strict</arg> | |||
| </args> | |||
| <compilerPlugins> | |||
| <plugin>spring</plugin> | |||
| </compilerPlugins> | |||
| </configuration> | |||
| <dependencies> | |||
| <dependency> | |||
| <groupId>org.jetbrains.kotlin</groupId> | |||
| <artifactId>kotlin-maven-allopen</artifactId> | |||
| <version>${kotlin.version}</version> | |||
| </dependency> | |||
| </dependencies> | |||
| </plugin> | |||
| </plugins> | |||
| </build> | |||
| </project> | |||
| @@ -0,0 +1,3 @@ | |||
| #!/bin/sh | |||
| docker-compose -d up | |||
| @@ -0,0 +1,14 @@ | |||
| version: '3.9' | |||
| services: | |||
| repo: | |||
| image: dzikoysk/reposilite:3.0.0-alpha.23 | |||
| environment: | |||
| REPOSILITE_OPTS: "--token admin:secret --local-config=/reposilite.cdn --local-config-mode=copy" | |||
| volumes: | |||
| - ./reposilite.cdn:/reposilite.cdn | |||
| - ../data:/app/data | |||
| ports: | |||
| - "9001:80" | |||
| restart: unless-stopped | |||
| @@ -0,0 +1,84 @@ | |||
| # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # | |||
| # Reposilite :: Shared # | |||
| # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # | |||
| # Repository id used in Maven repository configuration | |||
| id: reposilite-repository | |||
| # Repository title | |||
| title: Maven Mirror | |||
| # Repository description | |||
| description: Maven Mirror | |||
| # Link to organization's website | |||
| organizationWebsite: https://reposilite.com | |||
| # Link to organization's logo | |||
| organizationLogo: https://avatars.githubusercontent.com/u/88636591 | |||
| # The Internet Content Provider License (also known as Bei'An) | |||
| # Web services in China require ICP license, a permit issued by the Chinese government to permit China-based websites to operate in China. | |||
| # In order to fulfill the conditions, you should apply for ICP license from your service provider and fill in this parameter. | |||
| icpLicense: "" | |||
| # Enable default frontend with dashboard | |||
| frontend: true | |||
| # Enable Swagger (/swagger-docs) and Swagger UI (/swagger) | |||
| swagger: false | |||
| # Custom base path | |||
| basePath: / | |||
| # List of supported Maven repositories | |||
| repositories { | |||
| releases { | |||
| visibility: PUBLIC | |||
| redeployment: false | |||
| preserved: -1 | |||
| storageProvider: fs --quota 100% | |||
| proxied: [ | |||
| https://repo.maven.apache.org/maven2 --store --connectTimeout=3 --readTimeout=15 | |||
| ] | |||
| } | |||
| snapshots { | |||
| visibility: PUBLIC | |||
| redeployment: false | |||
| preserved: -1 | |||
| storageProvider: fs --quota 100% | |||
| proxied: [ | |||
| https://oss.sonatype.org/content/repositories/snapshots --store --connectTimeout=3 --readTimeout=15 | |||
| ] | |||
| } | |||
| } | |||
| # Statistics module configuration | |||
| statistics { | |||
| # How often Reposilite should divide recorded requests into separated groups. | |||
| # With higher precision you can get more detailed timestamps, but it'll increase database size. | |||
| # It's not that important for small repos with low traffic, but public instances should not use daily interval. | |||
| # Available modes: daily, weekly, monthly, yearly | |||
| resolvedRequestsInterval: monthly | |||
| } | |||
| # LDAP configuration | |||
| ldap { | |||
| # LDAP Authenticator is enabled | |||
| enabled: false | |||
| # LDAP server address | |||
| hostname: ldap.domain.com | |||
| # LDAP server port | |||
| port: 389 | |||
| # Base DN with users | |||
| baseDn: dc=company,dc=com | |||
| # User used to perform searches in LDAP server (requires permissions to read all LDAP entries) | |||
| searchUserDn: cn=reposilite,ou=admins,dc=domain,dc=com | |||
| # Search user's password | |||
| searchUserPassword: reposilite-admin-secret | |||
| # Attribute in LDAP that represents unique username used to create access token | |||
| userAttribute: cn | |||
| # LDAP user filter | |||
| userFilter: (&(objectClass=person)(ou=Maven Users)) | |||
| # Should the created through LDAP access token be TEMPORARY or PERSISTENT | |||
| userType: PERSISTENT | |||
| } | |||
| # Any kind of proxy services change real ip. | |||
| # The origin ip should be available in one of the headers. | |||
| # Nginx: X-Forwarded-For | |||
| # Cloudflare: CF-Connecting-IP | |||
| # Popular: X-Real-IP | |||
| forwardedIp: X-Forwarded-For | |||
| @@ -0,0 +1,84 @@ | |||
| # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # | |||
| # Reposilite :: Shared # | |||
| # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # | |||
| # Repository id used in Maven repository configuration | |||
| id: reposilite-repository | |||
| # Repository title | |||
| title: Maven Mirror | |||
| # Repository description | |||
| description: Maven Mirror | |||
| # Link to organization's website | |||
| organizationWebsite: https://reposilite.com | |||
| # Link to organization's logo | |||
| organizationLogo: https://avatars.githubusercontent.com/u/88636591 | |||
| # The Internet Content Provider License (also known as Bei'An) | |||
| # Web services in China require ICP license, a permit issued by the Chinese government to permit China-based websites to operate in China. | |||
| # In order to fulfill the conditions, you should apply for ICP license from your service provider and fill in this parameter. | |||
| icpLicense: "" | |||
| # Enable default frontend with dashboard | |||
| frontend: true | |||
| # Enable Swagger (/swagger-docs) and Swagger UI (/swagger) | |||
| swagger: false | |||
| # Custom base path | |||
| basePath: / | |||
| # List of supported Maven repositories | |||
| repositories { | |||
| releases { | |||
| visibility: PUBLIC | |||
| redeployment: false | |||
| preserved: -1 | |||
| storageProvider: fs --quota 100% | |||
| proxied: [ | |||
| https://repo.maven.apache.org/maven2 --store --connectTimeout=3 --readTimeout=15 | |||
| ] | |||
| } | |||
| snapshots { | |||
| visibility: PUBLIC | |||
| redeployment: false | |||
| preserved: -1 | |||
| storageProvider: fs --quota 100% | |||
| proxied: [ | |||
| https://oss.sonatype.org/content/repositories/snapshots --store --connectTimeout=3 --readTimeout=15 | |||
| ] | |||
| } | |||
| } | |||
| # Statistics module configuration | |||
| statistics { | |||
| # How often Reposilite should divide recorded requests into separated groups. | |||
| # With higher precision you can get more detailed timestamps, but it'll increase database size. | |||
| # It's not that important for small repos with low traffic, but public instances should not use daily interval. | |||
| # Available modes: daily, weekly, monthly, yearly | |||
| resolvedRequestsInterval: monthly | |||
| } | |||
| # LDAP configuration | |||
| ldap { | |||
| # LDAP Authenticator is enabled | |||
| enabled: false | |||
| # LDAP server address | |||
| hostname: ldap.domain.com | |||
| # LDAP server port | |||
| port: 389 | |||
| # Base DN with users | |||
| baseDn: dc=company,dc=com | |||
| # User used to perform searches in LDAP server (requires permissions to read all LDAP entries) | |||
| searchUserDn: cn=reposilite,ou=admins,dc=domain,dc=com | |||
| # Search user's password | |||
| searchUserPassword: reposilite-admin-secret | |||
| # Attribute in LDAP that represents unique username used to create access token | |||
| userAttribute: cn | |||
| # LDAP user filter | |||
| userFilter: (&(objectClass=person)(ou=Maven Users)) | |||
| # Should the created through LDAP access token be TEMPORARY or PERSISTENT | |||
| userType: PERSISTENT | |||
| } | |||
| # Any kind of proxy services change real ip. | |||
| # The origin ip should be available in one of the headers. | |||
| # Nginx: X-Forwarded-For | |||
| # Cloudflare: CF-Connecting-IP | |||
| # Popular: X-Real-IP | |||
| forwardedIp: X-Forwarded-For | |||
| @@ -0,0 +1,3 @@ | |||
| ** | |||
| !settings.xml | |||
| !resolve-deps-from-poms.sh | |||
| @@ -0,0 +1,10 @@ | |||
| FROM maven:alpine | |||
| RUN mkdir /poms && mkdir -p /root/.m2 | |||
| ADD resolve-deps-from-poms.sh /resolve-deps-from-poms.sh | |||
| ADD settings.xml /root/.m2/settings.xml | |||
| VOLUME [ "/poms" ] | |||
| ENTRYPOINT [ "/resolve-deps-from-poms.sh" ] | |||
| @@ -0,0 +1,5 @@ | |||
| #!/bin/sh | |||
| COCLI=docker # or podman | |||
| docker build -t maven-sync-job . | |||
| @@ -0,0 +1,2 @@ | |||
| #!/bin/sh | |||
| @@ -0,0 +1,5 @@ | |||
| #!/bin/sh | |||
| for pom in /poms/*; do | |||
| mvn -f $pom dependency:go-offline; | |||
| done | |||
| @@ -0,0 +1,31 @@ | |||
| <settings> | |||
| <profiles> | |||
| <profile> | |||
| <id>reposilite</id> | |||
| <repositories> | |||
| <repository> | |||
| <id>central</id> | |||
| <name>Central Repository</name> | |||
| <url>http://localhost:9001/releases</url> | |||
| <layout>default</layout> | |||
| <snapshots> | |||
| <enabled>false</enabled> | |||
| </snapshots> | |||
| </repository> | |||
| <repository> | |||
| <id>snapshots-repo</id> | |||
| <url>http://localhost:9001/snapshots</url> | |||
| <releases> | |||
| <enabled>false</enabled> | |||
| </releases> | |||
| <snapshots> | |||
| <enabled>true</enabled> | |||
| </snapshots> | |||
| </repository> | |||
| </repositories> | |||
| </profile> | |||
| </profiles> | |||
| <activeProfiles> | |||
| <activeProfile>reposilite</activeProfile> | |||
| </activeProfiles> | |||
| </settings> | |||
| @@ -0,0 +1,11 @@ | |||
| #!/bin/sh | |||
| COCLI=docker # or podman | |||
| $COCLI run --network=host -it --rm -v $(pwd)/../examples:/poms maven-sync-job | |||
| cd ../data/repositories/ | |||
| tar zcvf maven-releases-packages.tar.gz releases/* | |||
| tar zcvf maven-snapshots-packages.tar.gz snapshots/* | |||
| echo "NEXT: mirror *.tar.gz and import into Artifactory." | |||