public Map<String, String> getIPAddresses() {
   Map<String, String> idToIpAddressMap = new HashMap<>();
   for (Id id : ids()) {
     Conf conf = repo.conf(id);
     if (inclusive(id) && conf.isExposeContainerIp()) {
       String containerName = repo.containerName(id);
       InspectContainerResponse containerInspectResponse =
           docker.inspectContainerCmd(containerName).exec();
       idToIpAddressMap.put(
           id.toString(), containerInspectResponse.getNetworkSettings().getIpAddress());
     }
   }
   return idToIpAddressMap;
 }
 private File prepare(Id id) throws IOException {
   if (id == null) {
     throw new IllegalArgumentException("id is null");
   }
   logger.info("Preparing " + id);
   return fileOrchestrator.prepare(id, repo.src(id), conf(id));
 }
 public void stop() {
   for (Id id : repo.ids(true)) {
     if (!inclusive(id)) {
       continue;
     }
     stop(id);
   }
 }
 /**
  * RtReleases can remove a release.
  *
  * @throws Exception if any problem inside
  */
 @Test
 public void canRemoveRelease() throws Exception {
   final Releases releases = repo.releases();
   final Release release = releases.create(RandomStringUtils.randomAlphanumeric(Tv.TEN));
   MatcherAssert.assertThat(releases.iterate(), Matchers.hasItem(release));
   releases.remove(release.number());
   MatcherAssert.assertThat(releases.iterate(), Matchers.not(Matchers.hasItem(release)));
 }
Example #5
0
 /**
  * Checks package descriptor and if packages involved in dependencies are already installed.
  *
  * @param pkg package
  * @throws QueryException query exception
  */
 public void check(final Package pkg) throws QueryException {
   // check if package is already installed
   final byte[] name = pkg.uniqueName();
   if (repo.pkgDict().get(name) != null) PKGINST.thrw(input, name);
   // check package dependencies
   checkDepends(pkg);
   // check package components
   checkComps(pkg);
 }
Example #6
0
 /**
  * Checks if secondary package, i.e. package involved in a dependency is already installed.
  *
  * @param dep dependency
  * @return result
  */
 public byte[] depPkg(final Dependency dep) {
   // get installed versions of secondary package
   final TokenSet instVers = new TokenSet();
   for (final byte[] nextPkg : repo.pkgDict().keys())
     if (nextPkg != null && startsWith(nextPkg, dep.pkg)) instVers.add(version(nextPkg));
   // check if an appropriate version is already installed
   final byte[] version = availVersion(dep, instVers);
   return version == null ? null : dep.name(version);
 }
  private String createNewContainer(Id id) throws DockerException {

    CreateContainerCmd cmd = docker.createContainerCmd(findImageId(id));

    Conf conf = conf(id);

    cmd.withPublishAllPorts(true);
    cmd.withPrivileged(conf.isPrivileged());

    Link[] links = links(id);

    logger.info(" - links " + conf.getLinks());
    cmd.withLinks(links);

    List<PortBinding> portBindings = new ArrayList<>();
    for (String e : conf.getPorts()) {

      final String[] split = e.split(" ");

      assert split.length == 1 || split.length == 2;

      final int hostPort = Integer.parseInt(split[0]);
      final int containerPort = split.length == 2 ? Integer.parseInt(split[1]) : hostPort;

      logger.info(" - port " + hostPort + "->" + containerPort);
      portBindings.add(
          new PortBinding(
              new Ports.Binding(hostPort), new ExposedPort(containerPort, InternetProtocol.TCP)));
    }
    cmd.withPortBindings(portBindings.toArray(new PortBinding[portBindings.size()]));

    logger.info(" - volumes " + conf.getVolumes());

    final List<Bind> binds = new ArrayList<>();
    for (Map.Entry<String, String> entry : conf.getVolumes().entrySet()) {
      String volumePath = entry.getKey();
      String hostPath = entry.getValue();
      File file = new File(hostPath);
      String path = file.getAbsolutePath();
      logger.info(" - volumes " + volumePath + " <- " + path);
      binds.add(new Bind(path, new Volume(volumePath)));
    }

    cmd.withBinds(binds.toArray(new Bind[binds.size()]));

    cmd.withName(repo.containerName(id));
    logger.info(" - env " + conf.getEnv());
    cmd.withEnv(asEnvList(conf.getEnv()));

    if (!conf.getExtraHosts().isEmpty()) {
      List<String> extraHosts = conf.getExtraHosts();
      cmd.withExtraHosts(extraHosts.toArray(new String[extraHosts.size()]));
      logger.info(" - extra hosts " + conf.getExtraHosts());
    }

    return cmd.exec().getId();
  }
 private void validate(final Id id) {
   if (id == null) {
     throw new IllegalArgumentException("id is null");
   }
   try {
     dockerfileValidator.validate(repo.src(id));
   } catch (IOException e) {
     throw new OrchestrationException(e);
   }
 }
Example #9
0
  /**
   * Checks if an XQuery component is already installed as part of another package.
   *
   * @param comp component
   * @param name component's package
   * @return result
   * @throws QueryException query exception
   */
  private boolean isInstalled(final Component comp, final byte[] name) throws QueryException {
    // get packages in which the module's namespace is found
    final TokenSet pkgs = repo.nsDict().get(comp.uri);
    if (pkgs == null) return false;

    for (final byte[] nextPkg : pkgs) {
      if (nextPkg != null && !eq(Package.name(nextPkg), name)) {
        // installed package is a different one, not just a different version
        // of the current one
        final String pkgDir = string(repo.pkgDict().get(nextPkg));
        final IO pkgDesc = new IOFile(repo.path(pkgDir), DESCRIPTOR);
        final Package pkg = new PkgParser(repo, input).parse(pkgDesc);
        for (final Component nextComp : pkg.comps) {
          if (nextComp.name().equals(comp.name())) return true;
        }
      }
    }
    return false;
  }
 /**
  * RtReleases can edit release body.
  *
  * @throws Exception if any problem inside.
  */
 @Test
 public void canEditBody() throws Exception {
   final Releases releases = repo.releases();
   final Release release = releases.create(RandomStringUtils.randomAlphanumeric(Tv.TEN));
   final String body = "Description of the release";
   new Release.Smart(release).body(body);
   MatcherAssert.assertThat(
       new Release.Smart(releases.get(release.number())).body(), Matchers.equalTo(body));
   releases.remove(release.number());
 }
 /**
  * RtReleases can edit release tag.
  *
  * @throws Exception if any problem inside.
  */
 @Test
 public void canEditTag() throws Exception {
   final Releases releases = repo.releases();
   final Release release = releases.create(RandomStringUtils.randomAlphanumeric(Tv.TEN));
   final String tag = RandomStringUtils.randomAlphanumeric(Tv.FIFTEEN);
   new Release.Smart(release).tag(tag);
   MatcherAssert.assertThat(
       new Release.Smart(releases.get(release.number())).tag(), Matchers.equalTo(tag));
   releases.remove(release.number());
 }
 /**
  * RtReleases can iterate releases.
  *
  * @throws Exception if something goes wrong
  */
 @Test
 public void canFetchAllReleases() throws Exception {
   final Releases releases = repo.releases();
   final Release release = releases.create(RandomStringUtils.randomAlphanumeric(Tv.TEN));
   try {
     MatcherAssert.assertThat(
         releases.iterate(), Matchers.not(Matchers.emptyIterableOf(Release.class)));
   } finally {
     releases.remove(release.number());
   }
 }
Example #13
0
 /**
  * Public ctor.
  *
  * @param req RESTful API entry point
  * @param repo Repository
  */
 RtDeployKeys(final Request req, final Repo repo) {
   this.owner = repo;
   this.entry = req;
   this.request =
       req.uri()
           .path("/repos")
           .path(repo.coordinates().user())
           .path(repo.coordinates().repo())
           .path("/keys")
           .back();
 }
 /**
  * RtReleases can fetch a single release.
  *
  * @throws Exception if any error inside
  */
 @Test
 public void canFetchRelease() throws Exception {
   final Releases releases = repo.releases();
   final String tag = "v1.0";
   final Release release = releases.create(tag);
   MatcherAssert.assertThat(
       releases.get(release.number()).number(), Matchers.equalTo(release.number()));
   MatcherAssert.assertThat(
       new Release.Smart(releases.get(release.number())).tag(), Matchers.equalTo(tag));
   releases.remove(release.number());
 }
Example #15
0
 /**
  * Public ctor.
  *
  * @param req Request
  * @param repo Repository
  * @param name Name of it
  */
 RtLabel(final Request req, final Repo repo, final String name) {
   final Coordinates coords = repo.coordinates();
   this.request =
       req.uri()
           .path("/repos")
           .path(coords.user())
           .path(coords.repo())
           .path("/labels")
           .path(name)
           .back();
   this.owner = repo;
   this.txt = name;
 }
  @SuppressWarnings(("DM_DEFAULT_ENCODING"))
  private void build(File dockerFolder, Id id) {
    try {

      String tag = repo.tag(id);
      logger.info("Building " + id + " (" + tag + ")");

      final boolean noCache = buildNoCache();
      logger.info(" - no cache: " + noCache);

      final boolean removeIntermediateImages = buildRemoveIntermediateImages();
      logger.info(" - remove intermediate images: " + removeIntermediateImages);

      final boolean quiet = buildQuiet();
      logger.info(" - quiet: " + quiet);

      BuildImageCmd build =
          docker
              .buildImageCmd(dockerFolder)
              .withNoCache(noCache)
              .withRemove(removeIntermediateImages)
              .withQuiet(quiet)
              .withTag(tag);

      throwExceptionIfThereIsAnError(build.exec());

      for (String otherTag : repo.conf(id).getTags()) {
        int lastIndexOfColon = otherTag.lastIndexOf(':');
        if (lastIndexOfColon > -1) {
          String repositoryName = otherTag.substring(0, lastIndexOfColon);
          String tagName = otherTag.substring(lastIndexOfColon + 1);
          docker.tagImageCmd(findImageId(id), repositoryName, tagName).withForce().exec();
        }
      }
    } catch (DockerException | IOException e) {
      throw new OrchestrationException(e);
    }
  }
 /**
  * RtReleases can create a release.
  *
  * @throws Exception if any error inside
  */
 @Test
 public void canCreateRelease() throws Exception {
   final Releases releases = repo.releases();
   final Release created = releases.create("0.1");
   final int number = created.number();
   try {
     final Release obtained = releases.get(number);
     MatcherAssert.assertThat(created, Matchers.is(obtained));
     MatcherAssert.assertThat(
         new Release.Smart(created).tag(), Matchers.equalTo(new Release.Smart(obtained).tag()));
   } finally {
     releases.remove(number);
   }
 }
 private String findImageId(Id id) {
   String imageTag = repo.tag(id);
   logger.debug("Converting {} ({}) to image id.", id, imageTag);
   List<Image> images = docker.listImagesCmd().exec();
   for (Image i : images) {
     for (String tag : i.getRepoTags()) {
       if (tag.startsWith(imageTag)) {
         logger.debug(
             "Using {} ({}) for {}. It matches (enough) to {}.",
             new Object[] {i.getId(), tag, id.toString(), imageTag});
         return i.getId();
       }
     }
   }
   logger.debug("could not find image ID for \"" + id + "\" (tag \"" + imageTag + "\")");
   return null;
 }
 private List<Container> findContainers(Id id, boolean allContainers) {
   final List<Container> matchingContainers = new ArrayList<>();
   for (Container container : docker.listContainersCmd().withShowAll(allContainers).exec()) {
     boolean imageNameMatches = container.getImage().equals(repo.imageName(id));
     String[] containerNames = container.getNames();
     if (containerNames == null) {
       // Every container should have a name, but this is not the case
       // on Circle CI. Containers with no name are broken residues of
       // building the image and therefore will be ignored.
       continue;
     }
     boolean containerNameMatches = asList(containerNames).contains(containerName(id));
     if (imageNameMatches || containerNameMatches) {
       matchingContainers.add(container);
     }
   }
   return matchingContainers;
 }
 private Conf conf(Id id) {
   return repo.conf(id);
 }
Example #21
0
 final File getConfig() {
   return new File(repo.getEtc(), "doogal.conf");
 }
Example #22
0
 public static int deleteApksByRepo(Context context, Repo repo) {
   ContentResolver resolver = context.getContentResolver();
   final Uri uri = getRepoUri(repo.getId());
   return resolver.delete(uri, null, null);
 }
Example #23
0
 public static List<Apk> findByRepo(Context context, Repo repo, String[] fields) {
   ContentResolver resolver = context.getContentResolver();
   final Uri uri = getRepoUri(repo.getId());
   Cursor cursor = resolver.query(uri, fields, null, null, null);
   return cursorToList(cursor);
 }
 /**
  * Tear down test fixtures.
  *
  * @throws Exception If some errors occurred.
  */
 @AfterClass
 public static void tearDown() throws Exception {
   if (repos != null && repo != null) {
     repos.remove(repo.coordinates());
   }
 }
Example #25
0
  public static void publish(Long id) throws IOException {
    models.Upload upload = getUpload(id);
    File uploadsDir = Util.getUploadDir(id);
    User user = getUser();
    UploadInfo uploadInfo = getUploadInfo(upload, uploadsDir, user);

    if (!uploadInfo.isPublishable()) {
      Validation.addError(null, "Upload is not valid, cannot publish. Fix errors first.");
      prepareForErrorRedirect();
      view(id);
    }

    List<models.ModuleVersion> versions = new LinkedList<models.ModuleVersion>();
    for (Module module : uploadInfo.modules) {
      models.Module mod = models.Module.find("name = ?", module.name).first();
      if (mod == null) {
        mod = new models.Module();
        mod.name = module.name;
        mod.owner = user;
        mod.create();
      }

      models.ModuleVersion modVersion = new models.ModuleVersion();
      modVersion.module = mod;
      modVersion.version = module.version;
      modVersion.isCarPresent = module.car.exists;
      modVersion.isJarPresent = module.jar.exists;
      modVersion.isJsPresent = module.js.exists;
      modVersion.isSourcePresent = module.source.exists;
      modVersion.isScriptsPresent = module.scripts.exists;
      modVersion.isAPIPresent = module.docs.hasUnzipped;
      modVersion.isDocPresent = module.docs.exists;
      modVersion.isResourcesPresent = module.docs.exists;
      modVersion.isRunnable = module.isRunnable;
      modVersion.jvmBinMajor = module.jvmBinMajor;
      modVersion.jvmBinMinor = module.jvmBinMinor;
      modVersion.jsBinMajor = module.jsBinMajor;
      modVersion.jsBinMinor = module.jsBinMinor;
      modVersion.isNativeJvm = module.isNativeJvm();
      modVersion.isNativeJs = module.isNativeJs();
      modVersion.published = Util.currentTimeInUTC();
      modVersion.doc = module.doc;
      modVersion.license = module.license;
      if (module.authors != null) {
        for (String author : module.authors) {
          modVersion.authors.add(Author.findOrCreate(author));
        }
      }
      modVersion.create();

      for (Import imp : module.getAllDependencies())
        modVersion.addDependency(
            imp.name,
            imp.version,
            imp.optional,
            imp.export,
            imp.mavenDependency != null,
            imp.herdDependency != null,
            imp.isNativeJvm(),
            imp.isNativeJs());

      for (ModuleChecker.Member member : module.members)
        modVersion.addMember(member.packageName, member.name, member.type, member.shared);

      for (ModuleChecker.Script script : module.scriptDescriptions)
        modVersion.addScript(
            script.name, script.description, script.unix, script.plugin, script.module);

      versions.add(modVersion);
    }

    FileUtils.copyDirectory(uploadsDir, Util.getRepoDir(), NonEmptyDirectoryFilter);
    FileUtils.deleteDirectory(uploadsDir);
    upload.delete();

    MyCache.evictUploadsForOwner(user);
    MyCache.evictModulesForOwner(user);

    if (versions.size() == 1) {
      flash("message", "Your module has been published");
      models.ModuleVersion moduleVersion = versions.get(0);
      Repo.view(moduleVersion.module.name, moduleVersion.version);
    } else {
      flash("message", "Your modules have been published");
      render(versions);
    }
  }
 private String repo(Id id) {
   return repo.tag(id).replaceFirst(":[^:]*$", "");
 }
 public List<Id> ids() {
   return repo.ids(false);
 }
 private String containerName(Id id) {
   ContainerConf container = repo.conf(id).getContainer();
   return container.hasName() ? container.getName() : repo.defaultContainerName(id);
 }