text:
x11 error when trying to shape window using cairo

I am trying to change the shape of an x11 window. I am hoping to use cairo rather than xshape so that I get anti-aliasing as well. I have modified the xeyes example from this repository using the cairo-example as a reference. However, I am stuck with the following errors:
Unknown error X11Error { error_kind: RenderPicture, error_code: 143, sequence: 48, bad_value: 44040206, minor_opcode: 7, major_opcode: 139, extension_name: Some("RENDER"), request_name: Some("FreePicture") }
Unknown error X11Error { error_kind: Drawable, error_code: 9, sequence: 50, bad_value: 44040193, minor_opcode: 4, major_opcode: 139, extension_name: Some("RENDER"), request_name: Some("CreatePicture") }
Unknown error X11Error { error_kind: RenderPicture, error_code: 143, sequence: 51, bad_value: 44040207, minor_opcode: 10, major_opcode: 139, extension_name: Some("RENDER"), request_name: Some("Trapezoids") }

It would be great if someone could point me in the right direction. Please let me know if this is not the right forum to ask this.
Here's the code I am using:
use std::f64::consts::PI;

use x11rb::connection::{Connection, RequestConnection as _};
use x11rb::errors::{ConnectionError, ReplyOrIdError};
use x11rb::protocol::shape::{self, ConnectionExt as _};
use x11rb::protocol::xproto::*;
use x11rb::protocol::Event;
use x11rb::wrapper::ConnectionExt as _;
use x11rb::xcb_ffi::XCBConnection;
use x11rb::COPY_DEPTH_FROM_PARENT;

/// A rust version of XCB's `xcb_visualtype_t` struct. This is used in a FFI-way.
#[derive(Debug, Clone, Copy)]
#[repr(C)]
pub struct xcb_visualtype_t {
    pub visual_id: u32,
    pub class: u8,
    pub bits_per_rgb_value: u8,
    pub colormap_entries: u16,
    pub red_mask: u32,
    pub green_mask: u32,
    pub blue_mask: u32,
    pub pad0: [u8; 4],
}

impl From<Visualtype> for xcb_visualtype_t {
    fn from(value: Visualtype) -> xcb_visualtype_t {
        xcb_visualtype_t {
            visual_id: value.visual_id,
            class: value.class.into(),
            bits_per_rgb_value: value.bits_per_rgb_value,
            colormap_entries: value.colormap_entries,
            red_mask: value.red_mask,
            green_mask: value.green_mask,
            blue_mask: value.blue_mask,
            pad0: [0; 4],
        }
    }
}
fn find_xcb_visualtype(conn: &impl Connection, visual_id: u32) -> Option<xcb_visualtype_t> {
    for root in &conn.setup().roots {
        for depth in &root.allowed_depths {
            for visual in &depth.visuals {
                if visual.visual_id == visual_id {
                    return Some((*visual).into());
                }
            }
        }
    }
    None
}

fn draw_eyes<C: Connection>(
    _conn: &C,
    _win_id: Window,
    _black: Gcontext,
    _white: Gcontext,
    _window_size: (u16, u16),
    surface: &cairo::XCBSurface,
) -> Result<(), ConnectionError> {
    let cr = cairo::Context::new(&surface).expect("failed to create cairo context");
    cr.arc(0.0, 0.0, 100.0, 0.0, 2.0 * PI);
    cr.arc(100.0, 0.0, 100.0, 0.0, 2.0 * PI);
    cr.fill_preserve().unwrap();
    surface.flush();

    // let mut arc1 = Arc {
    //     x: 0,
    //     y: 0,
    //     width: 100,
    //     height: 100,
    //     angle1: 0,
    //     angle2: 360 * 64,
    // };
    // let mut arc2 = arc1;
    // arc2.x = arc2.width as _;
    // conn.poly_fill_arc(win_id, black, &[arc1, arc2])?;

    Ok(())
}

fn shape_window<C: Connection>(
    conn: &C,
    cairo_conn: &cairo::XCBConnection,
    visual: &cairo::XCBVisualType,
    win_id: Window,
    window_size: (u16, u16),
) -> Result<(), ReplyOrIdError> {
    // Create a pixmap for the shape
    let pixmap = PixmapWrapper::create_pixmap(conn, 1, win_id, window_size.0, window_size.1)?;

    let surface = cairo::XCBSurface::create(
        &cairo_conn,
        &cairo::XCBDrawable(pixmap.pixmap()),
        &visual,
        window_size.0.into(),
        window_size.1.into(),
    )
    .unwrap();

    // Fill the pixmap with what will indicate "transparent"
    let gc = create_gc_with_foreground(conn, pixmap.pixmap(), 0)?;

    let rect = Rectangle {
        x: 0,
        y: 0,
        width: window_size.0,
        height: window_size.1,
    };
    conn.poly_fill_rectangle(pixmap.pixmap(), gc.gcontext(), &[rect])?;

    // Draw the eyes as "not transparent"
    let values = ChangeGCAux::new().foreground(1);
    conn.change_gc(gc.gcontext(), &values)?;
    draw_eyes(
        conn,
        pixmap.pixmap(),
        gc.gcontext(),
        gc.gcontext(),
        window_size,
        &surface,
    )?;

    // Set the shape of the window
    conn.shape_mask(shape::SO::SET, shape::SK::BOUNDING, win_id, 0, 0, &pixmap)?;
    Ok(())
}

fn setup_window<C: Connection>(
    conn: &C,
    screen: &Screen,
    window_size: (u16, u16),
    wm_protocols: Atom,
    wm_delete_window: Atom,
) -> Result<Window, ReplyOrIdError> {
    let win_id = conn.generate_id()?;
    let win_aux = CreateWindowAux::new()
        .event_mask(EventMask::EXPOSURE | EventMask::STRUCTURE_NOTIFY | EventMask::POINTER_MOTION)
        .background_pixel(screen.white_pixel);

    conn.create_window(
        COPY_DEPTH_FROM_PARENT,
        win_id,
        screen.root,
        0,
        0,
        window_size.0,
        window_size.1,
        0,
        WindowClass::INPUT_OUTPUT,
        0,
        &win_aux,
    )?;

    let title = "xeyes";
    conn.change_property8(
        PropMode::REPLACE,
        win_id,
        AtomEnum::WM_NAME,
        AtomEnum::STRING,
        title.as_bytes(),
    )?;
    conn.change_property32(
        PropMode::REPLACE,
        win_id,
        wm_protocols,
        AtomEnum::ATOM,
        &[wm_delete_window],
    )?;

    conn.map_window(win_id)?;

    Ok(win_id)
}

fn create_gc_with_foreground<C: Connection>(
    conn: C,
    win_id: Window,
    foreground: u32,
) -> Result<GcontextWrapper<C>, ReplyOrIdError> {
    GcontextWrapper::create_gc(
        conn,
        win_id,
        &CreateGCAux::new()
            .graphics_exposures(0)
            .foreground(foreground),
    )
}

fn choose_visual(
    conn: &impl Connection,
    screen_num: usize,
) -> Result<(u8, Visualid), x11rb::xcb_ffi::ReplyError> {
    let depth = 32;
    let screen = &conn.setup().roots[screen_num];

    // Try to use XRender to find a visual with alpha support
    let has_render = conn
        .extension_information(x11rb::protocol::render::X11_EXTENSION_NAME)?
        .is_some();
    if has_render {
        let formats =
            x11rb::protocol::render::ConnectionExt::render_query_pict_formats(&conn)?.reply()?;
        // Find the ARGB32 format that must be supported.
        let format = formats
            .formats
            .iter()
            .filter(|info| {
                (info.type_, info.depth) == (x11rb::protocol::render::PictType::DIRECT, depth)
            })
            .filter(|info| {
                let d = info.direct;
                (d.red_mask, d.green_mask, d.blue_mask, d.alpha_mask) == (0xff, 0xff, 0xff, 0xff)
            })
            .find(|info| {
                let d = info.direct;
                (d.red_shift, d.green_shift, d.blue_shift, d.alpha_shift) == (16, 8, 0, 24)
            });
        if let Some(format) = format {
            // Now we need to find the visual that corresponds to this format
            if let Some(visual) = formats.screens[screen_num]
                .depths
                .iter()
                .flat_map(|d| &d.visuals)
                .find(|v| v.format == format.id)
            {
                return Ok((format.depth, visual.visual));
            }
        }
    }
    Ok((screen.root_depth, screen.root_visual))
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let (conn, screen_num) =
        XCBConnection::connect(None).expect("Failed to connect to the X11 server");

    let cairo_conn =
        unsafe { cairo::XCBConnection::from_raw_none(conn.get_raw_xcb_connection() as _) };

    let (_depth, visualid) = choose_visual(&conn, screen_num)?;
    let mut visual = find_xcb_visualtype(&conn, visualid).unwrap();
    let visual_cairo = unsafe { cairo::XCBVisualType::from_raw_none(&mut visual as *mut _ as _) };

    let screen = &conn.setup().roots[screen_num];

    let wm_protocols = conn.intern_atom(false, b"WM_PROTOCOLS")?;
    let wm_delete_window = conn.intern_atom(false, b"WM_DELETE_WINDOW")?;

    let mut window_size = (700, 500);
    let has_shape = conn
        .extension_information(shape::X11_EXTENSION_NAME)
        .expect("failed to get extension information")
        .is_some();

    let (wm_protocols, wm_delete_window) =
        (wm_protocols.reply()?.atom, wm_delete_window.reply()?.atom);

    let win_id = setup_window(&conn, screen, window_size, wm_protocols, wm_delete_window)?;
    let mut pixmap = PixmapWrapper::create_pixmap(
        &conn,
        screen.root_depth,
        win_id,
        window_size.0,
        window_size.1,
    )?;

    let surface = cairo::XCBSurface::create(
        &cairo_conn,
        &cairo::XCBDrawable(pixmap.pixmap()),
        &visual_cairo,
        window_size.0.into(),
        window_size.1.into(),
    )
    .unwrap();

    let black_gc = create_gc_with_foreground(&conn, win_id, screen.black_pixel)?;
    let white_gc = create_gc_with_foreground(&conn, win_id, screen.white_pixel)?;

    conn.flush()?;

    let mut need_repaint = false;
    let mut need_reshape = false;
    let mut mouse_position = (0, 0);

    loop {
        let event = conn.wait_for_event()?;
        let mut event_option = Some(event);
        while let Some(event) = event_option {
            match event {
                Event::Expose(event) => {
                    if event.count == 0 {
                        need_repaint = true;
                    }
                }
                Event::ConfigureNotify(event) => {
                    window_size = (event.width, event.height);
                    pixmap = PixmapWrapper::create_pixmap(
                        &conn,
                        screen.root_depth,
                        win_id,
                        window_size.0,
                        window_size.1,
                    )?;
                    need_reshape = true;
                }
                Event::MotionNotify(event) => {
                    mouse_position = (event.event_x, event.event_y);
                    need_repaint = true;
                }
                Event::MapNotify(_) => {
                    need_reshape = true;
                }
                Event::ClientMessage(event) => {
                    let data = event.data.as_data32();
                    if event.format == 32 && event.window == win_id && data[0] == wm_delete_window {
                        println!("Window was asked to close");
                        return Ok(());
                    }
                }
                Event::Error(error) => {
                    println!("Unknown error {:?}", error);
                }
                event => {
                    println!("Unknown event {:?}", event);
                }
            }

            event_option = conn.poll_for_event()?;
        }

        if need_reshape && has_shape {
            shape_window(&conn, &cairo_conn, &visual_cairo, win_id, window_size)?;
            need_reshape = false;
        }
        if need_repaint {
            draw_eyes(
                &conn,
                pixmap.pixmap(),
                black_gc.gcontext(),
                white_gc.gcontext(),
                window_size,
                &surface,
            )?;

            // Copy drawing from pixmap to wind
            conn.copy_area(
                pixmap.pixmap(),
                win_id,
                white_gc.gcontext(),
                0,
                0,
                0,
                0,
                window_size.0,
                window_size.1,
            )?;

            conn.flush()?;
            need_repaint = false;
        }
    }
}

Thanks a lot your help! The point about xshape needing to know which pixels need to accept input which makes it aliased makes sense to me and I don't see a problem with that in particular. If I understand your suggestion, I can just draw anti aliased shapes (using something like cairo) and mark everything on the outside as transparent. I thought about that at first but the problem with that for my use case is that I want background blur for my window meaning my window is already going to be translucent. Currently the blur is achieved by just making my window transparent and picom is doing the blur. That may not be the best way to do it because that would require the end user to configure picom to do the blur. To give some context, I am trying to create a window to achieve a glassmorphism kind of effect and I want this window to also have rounded corners. I have also tried just directly using xshape to see how it looks, but the aliasing is extremely noticeable so I'm willing to put a bit of effort if there is a way I can avoid it. I suppose one way to do this would be to use xshape to control input as you suggested. Draw the anti aliased corners using cairo, make everything outside this shape to be fully transparent and manually have everything inside the border with background blur somehow. Currently I just have my compositor set all transparent windows to have  blurring. Is there a way to "communicate" with the compositor to achieve the effect I want? Or is there a better way to achieve this?

Uhm... sorry, but from the top of my head, I have no good suggestions.
If the compositor does some blurring, it will necessarily blur anything that is transparent. I don't know if picom offers some picom-specific API to influence its blurring, but I don't think there is anything generic for that.
You can try to query the wallpaper and draw that "manually" as the background of your window (with blurring). This can simulate the effect, but

only if there is no other window between your window and the wallpaper (otherwise one obviously still sees the wallpaper and not the in-between window)
it looks ugly when your window is moved (because the wallpaper moves along and then "snaps back" on the next redraw)

If you have urxvt around, you can run something like urxvt -tr -tint red -sh 40 to look at this (this example is copied straight from man 7 urxvt).

authors: psychon samyak-jain


text:
NITPICK: onyo init shows inconsistent output

When running onyo init two lines are shown as output:
Initialized empty Git repository in /path/to/dir/.git/
Initialized Onyo repository in /path/to/dir/.onyo/

The second (Onyo) line is missing 'empty'.

The change in phrasing for consistency with git would normally make sense --- however, I feel in this case it would not necessarily be true adding "empty" to Initialized Onyo repository in /path/to/dir/.onyo/, because, we add example templates and an onyo config.
I do not want to argue much about this, but this was the motivation why I did not change the line so far.

We will add the "empty", and change the git-information print to a debug message.

source: gharchive/issue

authors: TobiasKadelka nhjjr

repo: psyinfra/onyo

license: ISC

license_type: permissive

license_source: github-api


text:
add Cache constructor (rebase of #55)

Based on code from @zhangfan2012fall, I rebased it to the latest code base.
see #55 for more details.
Wish this time it could work.

Any blockers on this getting merged? It would be a very useful feature to have in our application.

source: gharchive/pull-request

repo: ptarjan/node-cache

license_source: bigquery


text:
the Steam Account Token variable field is required

I can not create a csgo server
required [detail] => The Steam Account Token variable field is required.
In which field should I enter the token?

Please use the Pterodactyl Discord for configuration related support instead of GitHub issues.

No one is accountable there...

up

up

when i select csgo server, panel replies "The Steam Account Token variable field is required." and there is no such field to put data on it

Refer to my first reply here.

repo: pterodactyl/whmcs

license: MIT


text:
Max Players variable and WHMCS quantity slider problem

My max_players variable has rule: required|integer|max:32, and in Configurable Options i use quantity (slider), when i try downgrade player slots with existing service lower or higher i received error:
Array
(
    [errors] => Array
        (
            [0] => Array
                (
                    [code] => DataValidationException
                    [status] => 500
                    [detail] => Data integrity exception encountered while performing database write operation. {"variable_value":["The variable value must be a string."]}
                )

        )

    [status_code] => 500
)

If change rule to string, it says error:
Array
(
    [errors] => Array
        (
            [0] => Array
                (
                    [code] => ValidationException
                    [status] => 422
                    [detail] => The Max Players variable must be a string.
                    [meta] => Array
                        (
                            [source_field] => environment.MAX_PLAYERS
                            [rule] => string
                        )

                )

        )

    [status_code] => 422
)

If i change Configurable Options from quantity to dropdown menu, all good. Is it problem with WHMCS module?

Any response?


text:
Add try_filter_map_results method.

You may wanna hold off merging this until https://github.com/rust-itertools/itertools/pull/377#issuecomment-547435270 (compatibility with Rust 1.24) is resolved. This commit also uses {Option,Result}::transpose(), which is not available in that version.

After actually using this, while conceptually I think it makes more sense to have the closure return a Option<Result>, it's inconvenient that the try-operator ? does not work in the closure. Thus I changed it to expect the return-type Result<Option> instead.

repo: pthariensflame/rust-itertools


text:
can this project be built in Windows?

I'd like to build it in windows, with vs2015, but I got hundreds errors, so can this projects be built in widows?

Hi! Sorry for the delay, I've been very busy lately. As you may have noticed. As of now, the project cannot be built on Windows. I plan to add this in v2.0. It requires a few changes (replacing dlopen/dlclose/dlsym with appropriate Windows system calls), but nothing insurmountable.

@ptillet do you have plan to enable Windows support?

Unfortunately, there is no short-term plan to add this, although contributions are welcome :) The OpenCL-compatible master branch is no longer actively supported (major improvements of the PTX v2.0 branch will be pushed at the end of the summer), and I don't remember the codebase well enough to add Windows support.

@ptillet  I just submitted a PR to add Windows support, please review. Thanks.

That's awesome, thanks :)

authors: aoke79 gongzg ptillet

repo: ptillet/isaac


text:
Added dontkillmyapp

Thank you for taking the time to work on a Pull Request for this project!
To ensure your PR is dealt with swiftly please check the following:

[x] Your submissions are formatted according to the guidelines in the contributing guide
[x] Your additions are ordered alphabetically
[x] Your submission has a useful description
[x] The description does not end with punctuation
[x] Each table column should be padded with one space on either side
[ ] You have searched the repository for any relevant issues or pull requests
[x] Any category you are creating has the minimum requirement of 3 items
[x] All changes have been squashed into a single commit

Hey, sorry for the delay.
Can you please link to the API docs https://dontkillmyapp.com/apidoc?

Closing this PR as I have no news on it. Feel free to reopen it if you work on it again

authors: KOLANICH yannbertrand

repo: public-apis/public-apis


text:
Star rating from pubnative always 0

Star rating from PubNative always return 0, there is a fix in #159

Maybe we must close it, if fix already in master?

authors: RagnarR cerberillo

license: mit


text:
Bug | Payment for warrant not being collected

Describe the bug
Payment for warrant not being collected by the system

Closing as no further clarity received on this ticket

repo: pucardotorg/dristi


text:
Merge 'Source' and 'Collection' into one domain object

This makes authz much simpler, and makes more sense in the context of allowing users to upload their own documents.

Just merged this. Things will be shaky for a while in 1.1

repo: pudo/aleph


text:
Loop for M3U8 File

Hello,
On certain publisher websites, video resolution and detection work successfully, and the download proceeds as expected. However, the M3U8 file does not loop, leading to a recording of only 10-20 seconds of the video stream.
Is it possible to record until the M3U8 file is completely empty? I wanted to develop this feature myself, but the required coding knowledge for this plugin is quite advanced.
For testing purposes, I wanted to try it on a site called "chatur...com". Although the video stream is found and recording starts, only a few seconds of the video are recorded. How can the loop be maintained indefinitely (until the file is empty)?
Thank you for your work.

Intersting, can you share the M3U8 file?

Hello @puemos
Of course, this link

Thanks. Can you share the mater m3u8 files with the links to the playlists?

I think you are talking about this file; https://bit.ly/3UVoUBT

Fantastic extension, thank you ! I'll try to debug when I find time

@onedayblack is this for recording Live broadcast? I was analyzing the source code and I missed this feature.

@onedayblack is this for recording Live broadcast? I was analyzing the source code and I missed this feature.

It does not work

@onedayblack  So I saw the source code of another extension that detects when m3u8 is a live stream and loops the m3u8 fetch to get the fragments and updates a queue that will be consumed by another loop that downloads the '.ts' files. Maybe we can implement this feature in this extension to be able to record live streaming.

I am also interested in how to do this. Does someone have insight into where the extension detects the video? This might help me figure out a solution for streams.

@MrKeon It is written in type script, using react ? and js libraries hence it needs to be 'compiled'. Too modern for my ancient rusty plain js knowledge. The detection happens in the src/extension/extension-background/. Look at setTabListener.ts - when tab is opened, a statement 'browser.tabs.onActivated.addListener' handler adds a listener. The listener should catch the Urls of the loaded web resources I guess. It has m3u parsing libraries, etc.

authors: AGenchev MrKeon Pequem emresaracoglu onedayblack puemos

repo: puemos/hls-downloader


text:
UIViewController实现JXPagerViewListViewDelegate协议 小问题

如果是UIViewController实现JXPagerViewListViewDelegate协议，控制器的navigationController拿不到，就无法push到另一个控制器。需要在- (id)pagerView:(JXPagerView *)pagerView initListAtIndex:(NSInteger)index;里面将其作为子控制器，才能push

可以参考demo里面，将外部的navigationController赋值给列表VC的一个自定义属性


text:
I'm able to post links in chat, recommend such activity for streamer/mods/VIPs only.

Allowing only streamer/mods/VIPs to post links in chat will prevent trolls from spamming links in chat. And such links could be links to porn sites. Typically this security enforcement is handled by nightbot or moobot, so adding this feature to MBH will make it more rebust.

Ok, I should be able to detect those links and do something fun with them.
Great suggestion.

repo: pulcher/TalkingHead


text:
Add new branch for the master project "Efficient Collective Communications in FlooNoC"

This is the branch of code for the master project "Efficient Collective Communications in FlooNoC".

Thanks Mingrui, we will review it and potentially open a new PR in this repo.

authors: MingruiYuan fischeti

repo: pulp-platform/FlooNoC


text:
New Get Started guides

SUPER STREAMLINED, TOTALLY AMAZING, new Get Started guides for AWS, Azure, Google Cloud, and Kubernetes.
There's definitely a bunch of things I'd still like to improve/streamline further (see some of the follow-ups listed in #1033), and there's opportunities to reduce some duplication, but I believe this is in a good enough state to land (modulo any review feedback). Once this has landed, we can iterate and refine as we continue improving the website this milestone.
Running live at: https://hugo.pulumi.io (repurposed dev stack).
Apologies for the large PR (and after we just discussed avoiding large PRs in the service team meeting! Last one!). I've broken the changes up into separate commits that can be reviewed commit by commit.

Fixes #1033
Depends on #1161 for a good experience around language selection across multiple pages
And #1163 to address a font issue for code snippets

Looks like I missed updating some links after moving things around (via broken link checker in CI). Will fix.

there are some places in the flow (on hugo.pulumi) where the nav is
inconsistent (the prev steps disappear) ... there are also a few broken
links.
i can show you or share bmps if not obvious .. i was using the kube workflow
On Thu, Jun 13, 2019 at 3:52 PM Justin Van Patten notifications@github.com
wrote:

SUPER STREAMLINED, TOTALLY AMAZING, new Get Started guides for AWS, Azure,
Google Cloud, and Kubernetes.
There's definitely a bunch of things I'd still like to improve/streamline
further (see some of the follow-ups listed in #1033
https://github.com/pulumi/docs/issues/1033), and there's opportunities
to reduce some duplication, but I believe this is in a good enough state to
land (modulo any review feedback). Once this has landed, we can iterate and
refine as we continue improving the website this milestone.
Running live at: https://hugo.pulumi.io (repurposed dev stack).
Apologies for the large PR (and after we just discussed avoiding large PRs
in the service team meeting! Last one!). I've broken the changes up into
separate commits that can be reviewed commit by commit.
[image: Screen Shot 2019-06-13 at 3 42 04 PM]
https://user-images.githubusercontent.com/710598/59471997-cbf55b00-8df1-11e9-8e00-3f2fd3a06e44.png
[image: Screen Shot 2019-06-13 at 3 43 06 PM]
https://user-images.githubusercontent.com/710598/59472038-f1826480-8df1-11e9-90e0-dc92d7d6e291.png
[image: Screen Shot 2019-06-13 at 3 43 21 PM]
https://user-images.githubusercontent.com/710598/59472048-fb0bcc80-8df1-11e9-8548-f6ee967d227c.png
[image: Screen Shot 2019-06-13 at 3 43 34 PM]
https://user-images.githubusercontent.com/710598/59472055-0232da80-8df2-11e9-92cc-4699bb08f685.png
[image: Screen Shot 2019-06-13 at 3 43 46 PM]
https://user-images.githubusercontent.com/710598/59472060-08c15200-8df2-11e9-8cf0-2488c736b3ac.png
[image: Screen Shot 2019-06-13 at 3 44 08 PM]
https://user-images.githubusercontent.com/710598/59472071-1676d780-8df2-11e9-8d00-ccce3446c1d9.png
[image: 2019-06-13 15-46-02 2019-06-13 15_46_43]
https://user-images.githubusercontent.com/710598/59472186-7c635f00-8df2-11e9-9d79-122468df3565.gif
Fixes #1033 https://github.com/pulumi/docs/issues/1033
Depends on #1161 https://github.com/pulumi/docs/pull/1161 for a good
experience around language selection across multiple pages
And #1163 https://github.com/pulumi/docs/pull/1163 to address a font
issue for code snippets
You can view, comment on, or merge this pull request online at:
https://github.com/pulumi/docs/pull/1169
Commit Summary

Move files out of quickstart to their new homes
Delete unneeded indexes for Kubernetes tutorials
Add aliases for all moved files
Update TOC entries for reference/clouds
Update TOC entries for reference/tutorials
Add TOC entry for reference/install.md
Add indexes for reference/tutorials
Update links for all moved files
Remove "Pulumi Cloud Framework" from quickstart menu
List "Download and Install" before "Changelog" and "Troubleshooting"
Add "nogo" option to the langchoose shortcode
Add langfile shortcode
Add lang shortcode
Add install-node shortcode
Add install-python shortcode
Add install-pulumi shortcode
Add get-started-stepper shortcode
Cleanup the detailed install page
Add updated brand images for the clouds
Add new Get Started guide for AWS
Add new Get Started guide for Azure
Add new Get Started guide for Google Cloud
Add new Get Started guide for Kubernetes
Update /quickstart to link to new guides with updated branding
Update docs homepage CTAs
Add links to the new Get Started guide throughout
Hide .language-prologue-* by default

File Changes

M CONTRIBUTING.md
https://github.com/pulumi/docs/pull/1169/files#diff-0 (4)
M assets/sass/_pulumi.scss
https://github.com/pulumi/docs/pull/1169/files#diff-1 (37)
M content/_index.md
https://github.com/pulumi/docs/pull/1169/files#diff-2 (23)
M content/quickstart/_index.md
https://github.com/pulumi/docs/pull/1169/files#diff-3 (42)
M content/quickstart/aws/_index.md
https://github.com/pulumi/docs/pull/1169/files#diff-4 (92)
A content/quickstart/aws/configure.md
https://github.com/pulumi/docs/pull/1169/files#diff-5 (16)
A content/quickstart/aws/create-project.md
https://github.com/pulumi/docs/pull/1169/files#diff-6 (136)
A content/quickstart/aws/deploy-changes.md
https://github.com/pulumi/docs/pull/1169/files#diff-7 (73)
A content/quickstart/aws/deploy-stack.md
https://github.com/pulumi/docs/pull/1169/files#diff-8 (57)
A content/quickstart/aws/destroy-stack.md
https://github.com/pulumi/docs/pull/1169/files#diff-9 (49)
A content/quickstart/aws/install-language-runtime.md
https://github.com/pulumi/docs/pull/1169/files#diff-10 (22)
A content/quickstart/aws/install-pulumi.md
https://github.com/pulumi/docs/pull/1169/files#diff-11 (14)
A content/quickstart/aws/modify-program.md
https://github.com/pulumi/docs/pull/1169/files#diff-12 (136)
A content/quickstart/aws/next-steps.md
https://github.com/pulumi/docs/pull/1169/files#diff-13 (40)
M content/quickstart/azure/_index.md
https://github.com/pulumi/docs/pull/1169/files#diff-14 (65)
A content/quickstart/azure/configure.md
https://github.com/pulumi/docs/pull/1169/files#diff-15 (16)
A content/quickstart/azure/create-project.md
https://github.com/pulumi/docs/pull/1169/files#diff-16 (162)
A content/quickstart/azure/deploy-changes.md
https://github.com/pulumi/docs/pull/1169/files#diff-17 (95)
A content/quickstart/azure/deploy-stack.md
https://github.com/pulumi/docs/pull/1169/files#diff-18 (59)
A content/quickstart/azure/destroy-stack.md
https://github.com/pulumi/docs/pull/1169/files#diff-19 (49)
A content/quickstart/azure/install-language-runtime.md
https://github.com/pulumi/docs/pull/1169/files#diff-20 (22)
A content/quickstart/azure/install-pulumi.md
https://github.com/pulumi/docs/pull/1169/files#diff-21 (14)
A content/quickstart/azure/modify-program.md
https://github.com/pulumi/docs/pull/1169/files#diff-22 (109)
A content/quickstart/azure/next-steps.md
https://github.com/pulumi/docs/pull/1169/files#diff-23 (19)
M content/quickstart/cloudfx/_index.md
https://github.com/pulumi/docs/pull/1169/files#diff-24 (6)
M content/quickstart/cloudfx/tutorial-rest-api.md
https://github.com/pulumi/docs/pull/1169/files#diff-25 (3)
M content/quickstart/cloudfx/tutorial-service.md
https://github.com/pulumi/docs/pull/1169/files#diff-26 (8)
M content/quickstart/cloudfx/tutorial-thumbnailer.md
https://github.com/pulumi/docs/pull/1169/files#diff-27 (3)
M content/quickstart/gcp/_index.md
https://github.com/pulumi/docs/pull/1169/files#diff-28 (59)
A content/quickstart/gcp/configure.md
https://github.com/pulumi/docs/pull/1169/files#diff-29 (16)
A content/quickstart/gcp/create-project.md
https://github.com/pulumi/docs/pull/1169/files#diff-30 (134)
A content/quickstart/gcp/deploy-changes.md
https://github.com/pulumi/docs/pull/1169/files#diff-31 (75)
A content/quickstart/gcp/deploy-stack.md
https://github.com/pulumi/docs/pull/1169/files#diff-32 (58)
A content/quickstart/gcp/destroy-stack.md
https://github.com/pulumi/docs/pull/1169/files#diff-33 (51)
A content/quickstart/gcp/install-language-runtime.md
https://github.com/pulumi/docs/pull/1169/files#diff-34 (22)
A content/quickstart/gcp/install-pulumi.md
https://github.com/pulumi/docs/pull/1169/files#diff-35 (14)
A content/quickstart/gcp/modify-program.md
https://github.com/pulumi/docs/pull/1169/files#diff-36 (131)
A content/quickstart/gcp/next-steps.md
https://github.com/pulumi/docs/pull/1169/files#diff-37 (18)
M content/quickstart/k8s-the-prod-way/identity.md
https://github.com/pulumi/docs/pull/1169/files#diff-38 (6)
M content/quickstart/k8s-the-prod-way/prerequisites.md
https://github.com/pulumi/docs/pull/1169/files#diff-39 (8)
M content/quickstart/kubernetes/_index.md
https://github.com/pulumi/docs/pull/1169/files#diff-40 (58)
A content/quickstart/kubernetes/configure.md
https://github.com/pulumi/docs/pull/1169/files#diff-41 (16)
A content/quickstart/kubernetes/create-project.md
https://github.com/pulumi/docs/pull/1169/files#diff-42 (148)
A content/quickstart/kubernetes/deploy-changes.md
https://github.com/pulumi/docs/pull/1169/files#diff-43 (91)
A content/quickstart/kubernetes/deploy-stack.md
https://github.com/pulumi/docs/pull/1169/files#diff-44 (57)
A content/quickstart/kubernetes/destroy-stack.md
https://github.com/pulumi/docs/pull/1169/files#diff-45 (49)
A content/quickstart/kubernetes/install-language-runtime.md
https://github.com/pulumi/docs/pull/1169/files#diff-46 (22)
A content/quickstart/kubernetes/install-pulumi.md
https://github.com/pulumi/docs/pull/1169/files#diff-47 (14)
A content/quickstart/kubernetes/modify-program.md
https://github.com/pulumi/docs/pull/1169/files#diff-48 (146)
A content/quickstart/kubernetes/next-steps.md
https://github.com/pulumi/docs/pull/1169/files#diff-49 (34)
D content/quickstart/kubernetes/tutorial-clusters.md
https://github.com/pulumi/docs/pull/1169/files#diff-50 (17)
D content/quickstart/kubernetes/tutorial-workloads.md
https://github.com/pulumi/docs/pull/1169/files#diff-51 (19)
M content/reference/_index.md
https://github.com/pulumi/docs/pull/1169/files#diff-52 (2)
M content/reference/cd-azure-devops.md
https://github.com/pulumi/docs/pull/1169/files#diff-53 (4)
M content/reference/cd-codefresh.md
https://github.com/pulumi/docs/pull/1169/files#diff-54 (2)
M content/reference/cd-github-actions.md
https://github.com/pulumi/docs/pull/1169/files#diff-55 (10)
M content/reference/cd-gitlab-ci.md
https://github.com/pulumi/docs/pull/1169/files#diff-56 (2)
M content/reference/changelog.md
https://github.com/pulumi/docs/pull/1169/files#diff-57 (2)
R content/reference/clouds/_index.md
https://github.com/pulumi/docs/pull/1169/files#diff-58 (12)
A content/reference/clouds/aws/_index.md
https://github.com/pulumi/docs/pull/1169/files#diff-59 (96)
R content/reference/clouds/aws/setup.md
https://github.com/pulumi/docs/pull/1169/files#diff-60 (10)
A content/reference/clouds/azure/_index.md
https://github.com/pulumi/docs/pull/1169/files#diff-61 (69)
R content/reference/clouds/azure/setup.md
https://github.com/pulumi/docs/pull/1169/files#diff-62 (10)
A content/reference/clouds/gcp/_index.md
https://github.com/pulumi/docs/pull/1169/files#diff-63 (62)
R content/reference/clouds/gcp/service-account.md
https://github.com/pulumi/docs/pull/1169/files#diff-64 (4)
R content/reference/clouds/gcp/setup.md
https://github.com/pulumi/docs/pull/1169/files#diff-65 (10)
A content/reference/clouds/kubernetes/_index.md
https://github.com/pulumi/docs/pull/1169/files#diff-66 (63)
R content/reference/clouds/kubernetes/faq.md
https://github.com/pulumi/docs/pull/1169/files#diff-67 (10)
R content/reference/clouds/kubernetes/introduction.md
https://github.com/pulumi/docs/pull/1169/files#diff-68 (18)
R content/reference/clouds/kubernetes/setup.md
https://github.com/pulumi/docs/pull/1169/files#diff-69 (19)
R content/reference/clouds/openstack/_index.md
https://github.com/pulumi/docs/pull/1169/files#diff-70 (10)
R content/reference/clouds/openstack/setup.md
https://github.com/pulumi/docs/pull/1169/files#diff-71 (10)
M content/reference/commands.md
https://github.com/pulumi/docs/pull/1169/files#diff-72 (2)
M content/reference/component-tutorial.md
https://github.com/pulumi/docs/pull/1169/files#diff-73 (2)
M content/reference/crosswalk/aws/_index.md
https://github.com/pulumi/docs/pull/1169/files#diff-74 (5)
R content/reference/install.md
https://github.com/pulumi/docs/pull/1169/files#diff-75 (81)
M content/reference/languages.md
https://github.com/pulumi/docs/pull/1169/files#diff-76 (2)
M content/reference/service/pulumi-button.md
https://github.com/pulumi/docs/pull/1169/files#diff-77 (2)
M content/reference/troubleshooting.md
https://github.com/pulumi/docs/pull/1169/files#diff-78 (2)
A content/reference/tutorials/_index.md
https://github.com/pulumi/docs/pull/1169/files#diff-79 (16)
A content/reference/tutorials/aws/_index.md
https://github.com/pulumi/docs/pull/1169/files#diff-80 (29)
R content/reference/tutorials/aws/tutorial-ec2-webserver.md
https://github.com/pulumi/docs/pull/1169/files#diff-81 (10)
R content/reference/tutorials/aws/tutorial-rest-api.md
https://github.com/pulumi/docs/pull/1169/files#diff-82 (14)
R content/reference/tutorials/aws/tutorial-s3-website.md
https://github.com/pulumi/docs/pull/1169/files#diff-83 (10)
R content/reference/tutorials/aws/tutorial-service.md
https://github.com/pulumi/docs/pull/1169/files#diff-84 (14)
R content/reference/tutorials/aws/tutorial-thumbnailer.md
https://github.com/pulumi/docs/pull/1169/files#diff-85 (10)
A content/reference/tutorials/azure/_index.md
https://github.com/pulumi/docs/pull/1169/files#diff-86 (13)
R content/reference/tutorials/azure/tutorial-container-webserver.md
https://github.com/pulumi/docs/pull/1169/files#diff-87 (14)
A content/reference/tutorials/gcp/_index.md
https://github.com/pulumi/docs/pull/1169/files#diff-88 (13)
R content/reference/tutorials/gcp/tutorial-gce-webserver.md
https://github.com/pulumi/docs/pull/1169/files#diff-89 (14)
A content/reference/tutorials/kubernetes/_index.md
https://github.com/pulumi/docs/pull/1169/files#diff-90 (31)
R content/reference/tutorials/kubernetes/tutorial-aks.md
https://github.com/pulumi/docs/pull/1169/files#diff-91 (8)
R
content/reference/tutorials/kubernetes/tutorial-configmap-rollout.md
https://github.com/pulumi/docs/pull/1169/files#diff-92 (17)
R content/reference/tutorials/kubernetes/tutorial-eks.md
https://github.com/pulumi/docs/pull/1169/files#diff-93 (7)
R
content/reference/tutorials/kubernetes/tutorial-exposed-deployment.md
https://github.com/pulumi/docs/pull/1169/files#diff-94 (15)
R content/reference/tutorials/kubernetes/tutorial-gke.md
https://github.com/pulumi/docs/pull/1169/files#diff-95 (11)
R content/reference/tutorials/kubernetes/tutorial-guestbook.md
https://github.com/pulumi/docs/pull/1169/files#diff-96 (14)
R content/reference/tutorials/kubernetes/tutorial-p8s-rollout.md
https://github.com/pulumi/docs/pull/1169/files#diff-97 (15)
R content/reference/tutorials/kubernetes/tutorial-stateless-app.md
https://github.com/pulumi/docs/pull/1169/files#diff-98 (15)
R
content/reference/tutorials/kubernetes/tutorial-wordpress-chart.md
https://github.com/pulumi/docs/pull/1169/files#diff-99 (14)
M content/tour/basics-deploying.md
https://github.com/pulumi/docs/pull/1169/files#diff-100 (4)
M content/tour/programs.md
https://github.com/pulumi/docs/pull/1169/files#diff-101 (2)
M layouts/shortcodes/aws-eks-prereqs.html
https://github.com/pulumi/docs/pull/1169/files#diff-102 (4)
M layouts/shortcodes/aws-js-prereqs.html
https://github.com/pulumi/docs/pull/1169/files#diff-103 (4)
M layouts/shortcodes/azure-aks-prereqs.html
https://github.com/pulumi/docs/pull/1169/files#diff-104 (4)
A layouts/shortcodes/get-started-stepper.html
https://github.com/pulumi/docs/pull/1169/files#diff-105 (41)
A layouts/shortcodes/install-node.html
https://github.com/pulumi/docs/pull/1169/files#diff-106 (1)
A layouts/shortcodes/install-pulumi.html
https://github.com/pulumi/docs/pull/1169/files#diff-107 (88)
A layouts/shortcodes/install-python.html
https://github.com/pulumi/docs/pull/1169/files#diff-108 (1)
A layouts/shortcodes/lang.html
https://github.com/pulumi/docs/pull/1169/files#diff-109 (24)
M layouts/shortcodes/langchoose.html
https://github.com/pulumi/docs/pull/1169/files#diff-110 (2)
A layouts/shortcodes/langfile.html
https://github.com/pulumi/docs/pull/1169/files#diff-111 (4)
A static/images/quickstart/aws.svg
https://github.com/pulumi/docs/pull/1169/files#diff-112 (9)
A static/images/quickstart/azure.svg
https://github.com/pulumi/docs/pull/1169/files#diff-113 (4)
A static/images/quickstart/gcp.svg
https://github.com/pulumi/docs/pull/1169/files#diff-114 (1)
A static/images/quickstart/k8s.svg
https://github.com/pulumi/docs/pull/1169/files#diff-115 (6)
M static/js/langchoose.js
https://github.com/pulumi/docs/pull/1169/files#diff-116 (2)

Patch Links:

https://github.com/pulumi/docs/pull/1169.patch
https://github.com/pulumi/docs/pull/1169.diff

—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/pulumi/docs/pull/1169?email_source=notifications&email_token=AB77TQWA4SZLPFDXW7Q2IL3P2LFTZA5CNFSM4HYA4SEKYY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4GZNZWPA,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AB77TQVF7YCGDABWRKM4AK3P2LFTZANCNFSM4HYA4SEA
.

there are some places in the flow (on hugo.pulumi) where the nav is inconsistent (the prev steps disappear)

Thanks, I’ll take a look later tonight. Sounds like I may have inadvertently broken something as I was reorganizing the changes into cleaner commits or hastily deploying the dev stack.

Would it be possible to have the buttons for the specific clouds take you to the "install-pulumi" page for the specific clouds instead of the page that just says "we are gonna help you use the cloud you just told us about, please click next now"

Would it be possible to have the buttons for the specific clouds take you to the "install-pulumi" page for the specific clouds instead of the page that just says "we are gonna help you use the cloud you just told us about, please click next now"

I'm not sure I agree. I like that the initial step tells you first what it's all about. It's easy to take for granted that clicking the AWS icon would lead to first installing Pulumi, but I don't think we should assume that's obvious to people. I also think having it as a distinct step will help us measure falloff better (e.g., I assume 100% people will click "Next", and then we can see if they disappear at "Install").

This is awesome work. You could commit it as-is, and it would be a giant improvement over what we've got. (In fact, I would encourage you to basically do just that.) I'd love it if you can land this tomorrow with as many of the suggestions incorporated, and then follow up on anything else and iterate afterwards. I predict this will significantly help users successfully onboard to Pulumi!

Would it be possible to have the buttons for the specific clouds take you to the "install-pulumi" page for the specific clouds instead of the page that just says "we are gonna help you use the cloud you just told us about, please click next now"

I'm not sure I agree. I like that the initial step tells you first what it's all about. It's easy to take for granted that clicking the AWS icon would lead to first installing Pulumi, but I don't think we should assume that's obvious to people. I also think having it as a distinct step will help us measure falloff better (e.g., I assume 100% people will click "Next", and then we can see if they disappear at "Install").

I've left this as-is.

authors: ellismg ericrudder joeduffy justinvp

repo: pulumi/docs


text:
Add missing GroupMember resource

Add missing GroupMember resource

Vote on this issue by adding a 👍 reaction
If you want to implement this feature, comment to let us know (we'll work with you on design, scheduling, etc.)

Issue details
When looking at the terraform documentation there should be an extra resource used to associate databricks.User with databricls.Group.  I am expecting that it would be called databricks.GroupMember but it is missing from this package.
Equivalent terraform resource:
https://registry.terraform.io/providers/databricks/databricks/latest/docs/resources/group_member
Example terraform
resource "databricks_group" "this" {
  display_name               = "Some Group"
  allow_cluster_create       = true
  allow_instance_pool_create = true
}

resource "databricks_user" "this" {
  user_name = "someone@example.com"
}

# -> The Pulumi equivalent of this resource is missing
resource "databricks_group_member" "vip_member" {
  group_id  = databricks_group.this.id
  member_id = databricks_user.this.id
}

Affected area/feature
It looks like it's missing from the this projects resource.go file file.
I don't know enough about pulumi dev to know if that's the only change needed or who should act on this.

Hi @petergledhillinclusive
We have an issue with docs generation for this specific resource - we will look at how to overcome this issue and then re-enable it
Paul

It seems like the issue keeps getting moved to the next milestone. Is there any indication that this will be picked up soon?

This will be fixed by #29

Version v1.3.0 that was published last week (https://github.com/pulumi/pulumi-databricks/releases/tag/v1.3.0), which I think @lukehoban is referring to. I saw that in #29, #19 is closed, however as far as I can tell, it is not yet available.
Unfortunately I still cannot find a databricks.NewGroupMember resource. I'm using Go, and using the following dependency github.com/pulumi/pulumi-databricks/sdk v1.3.0.

Apologies - I missed that the resource is explicitly excluded due to doc generation issues: https://github.com/pulumi/pulumi-databricks/blob/main/provider/resources.go#L70. I will reopen.

Is the root cause for the schema not being deterministic known? And if so, is that something I can fix?

authors: petergledhillinclusive simonkarman stack72 viveklak

repo: pulumi/pulumi-databricks


text:
GCP ApiConfig creation always returns 404

What happened?
When creating gcp api config we get the following error:
    error: 1 error occurred:
        * Error creating ApiConfig: googleapi: got HTTP response code 404 with body: <!DOCTYPE html>

      <meta charset=utf-8>
      <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
      <title>Error 404 (Not Found)!!1</title>

404. That’s an error.

The requested URL /v1beta/projects/889354801458/locations/global/apis/projects/vital-dev-305313/locations/global/apis/vital-consumer-api-eu/configs?alt=json&apiConfigId=projects%2Fvital-dev-305313%2Flocations%2Fglobal%2Fapis%2Fvital-consumer-api-eu-config was not found on this server.  That’s all we know.

The URL looks wrong.
We are on the latest published versions of GCP and Pulumi
Steps to reproduce
export const DEFAULT_YAML: string = "../modules/api_spec/open_api_spec.yaml";

export const getYamlData = (cloudRunUrl: string, yamlLocation: string) => {
  const doc = yaml.load(fs.readFileSync(yamlLocation, "utf8"));
  // @ts-ignore
  doc["x-google-backend"] = {
    address: cloudRunUrl,
    disable_auth: true,
  };
  const data = yaml.dump(doc);
  return data;
};

 const gatewayApi = new gcp.apigateway.Api(
    `${baseName}-${getVitalRegion(region)}`,
    {
      apiId: `${baseName}-${getVitalRegion(region)}`,
    }
  );

    const apiConfig = cloudRunUrl.apply((cloudRunUrl) => {
      const yamlSpecForEnvironment = getYamlData(cloudRunUrl, DEFAULT_YAML);
      return gatewayApi.id.apply((apiId) => {
        return new gcp.apigateway.ApiConfig(`${apiId}-config`, {
          api: apiId,
          openapiDocuments: [
            {
              document: {
                path: "open_api_spec.yaml",
                contents: Buffer.from(yamlSpecForEnvironment).toString(
                  "base64"
                ),
              },
            },
          ],
        });
      });
    });

Expected Behavior
To create a config resource
Actual Behavior
404
Output of pulumi about
No response
Additional context
No response
Contributing
Vote on this issue by adding a 👍 reaction.
To contribute a fix for this issue, leave a comment (and link to your pull request, if you've opened one already).

Thank you for reporting this issue! Would it be possible to include a more complete repro? Perhaps a minimal version of how API was constructed to derive apiId, yamlSpecForEnvironment value, and this.opts if relevant. Thank you!

@t0yv0 I've updated the example

Sorry I still cannot repro as your code is not a complete runnable program. Here is something I tried that seems to work for me:
import * as pulumi from "@pulumi/pulumi";
import * as fs from "fs";
import * as gcp from "@pulumi/gcp";

const apiCfgApi = new gcp.apigateway.Api("apiCfgApi", {apiId: "api-cfg"});

const spec: string = btoa(JSON.stringify({
  "swagger": "2.0",
  "info": {
    "version": "1.0.0",
    "title": "Swagger Petstore",
    "description": "A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification",
    "termsOfService": "http://swagger.io/terms/",
    "contact": {
      "name": "Swagger API Team"
    },
    "license": {
      "name": "MIT"
    }
  },
  "host": "petstore.swagger.io",
  "basePath": "/api",
  "schemes": [
    "http"
  ],
  "consumes": [
    "application/json"
  ],
  "produces": [
    "application/json"
  ],
  "paths": {
    "/pets": {
      "get": {
          "x-google-backend": {
              "address": "http://publicIP/api/v1/app/catalogos/direcciones"
          },
        "operationId": "petsget",
        "description": "Returns all pets from the system that the user has access to",
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "A list of pets.",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/Pet"
              }
            }
          }
        }
      }
    }
  },
  "definitions": {
    "Pet": {
      "type": "object",
      "required": [
        "id",
        "name"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "format": "int64"
        },
        "name": {
          "type": "string"
        },
        "tag": {
          "type": "string"
        }
      }
    }
  }
}));

const apiCfgApiConfig = new gcp.apigateway.ApiConfig("apiCfgApiConfig", {
    api: apiCfgApi.apiId,
    apiConfigId: "cfg",
    openapiDocuments: [
        {
            document: {
                path: "openapi.json",
                contents: spec,
            },
        }
    ],
});

Output of pulumi about:
CLI
Version      3.48.0
Go Version   go1.19.2
Go Compiler  gc

Plugins
NAME    VERSION
gcp     6.43.0
nodejs  unknown

Host
OS       darwin
Version  13.0.1
Arch     x86_64

This project is written in nodejs: executable='/Users/t0yv0/.nix-profile/bin/node' version='v16.16.0'

Current Stack: dev

TYPE                                URN
pulumi:pulumi:Stack                 urn:pulumi:dev::i951::pulumi:pulumi:Stack::i951-dev
pulumi:providers:gcp                urn:pulumi:dev::i951::pulumi:providers:gcp::default_6_43_0
gcp:apigateway/api:Api              urn:pulumi:dev::i951::gcp:apigateway/api:Api::apiCfgApi
gcp:apigateway/apiConfig:ApiConfig  urn:pulumi:dev::i951::gcp:apigateway/apiConfig:ApiConfig::apiCfgApiConfig

Found no pending operations associated with dev

Backend
Name           pulumi.com
URL            https://app.pulumi.com/t0yv0
User           t0yv0
Organizations  t0yv0, pulumi

Dependencies:
NAME            VERSION
@pulumi/gcp     6.43.0
@pulumi/pulumi  3.48.0
@types/node     14.18.33

Pulumi locates its logs in /var/folders/gk/cchgxh512m72f_dmkcc3d09h0000gp/T/ by default

A very similar thing is happening to me.
Commands:
export GOOGLE_APPLICATION_CREDENTIALS=key.json
export PULUMI_CONFIG_PASSPHRASE=""
export GITHUB_TOKEN=${PULUMI_TOKEN_GITHUB}
pulumi login ${PULUMI_STATE_BUCKET}
pulumi stack select ${CI_COMMIT_BRANCH}
pulumi config set gcp:project REDACTED
pulumi config set gcp:region REDACTED
pulumi preview

Pulumi.yaml
name: Vega
runtime: yaml
resources:
  pulumi-data-uk:
    type: google-native:storage/v1:Bucket
    properties:
      location: EU
  pulumi-api-gw-api:
    type: google-native:apigateway/v1:Api
    properties:
      apiId: api-gw-dev-id
      displayName: api-gw-dev-id
      location: global
  pulumi-api-gw-service-account:
    type: google-native:iam/v1:ServiceAccount
    properties:
      accountId: pulumi-api-gw-service-account
      displayName: pulumi-api-gw-service-account
  pulumi-api-gw-config-native:
    type: google-native:apigateway/v1:Config
    properties:
      apiConfigId: pulumi-api-gw-config-native
      apiId: ${pulumi-api-gw-api.id}
      location: global
      openapiDocuments:
        - document:
            path: "spec.yaml"
            contents: "<REDACTED>"
  pulumi-api-gw-config-classic:
    type: gcp:apigateway:ApiConfig
    properties:
      api: ${pulumi-api-gw-api.id}
      apiConfigId: pulumi-api-gw-config-classic
      openapiDocuments:
        - document:
            path: "spec.yaml"
            contents: "<REDACTED>"

I used both gcp:apigateway:ApiConfig and google-native:apigateway/v1:Config to see which one works but they both cause similar error.
Pulumi/GCP is looking for a config that is creating and it can't find it.
configs/pulumi-api-gw-config-native' was not found

apiConfigId=pulumi-api-gw-config-classic was not found on this server

➜  pulumi up
Previewing update (dev):
     Type                                   Name                          Plan
     pulumi:pulumi:Stack                    Vega-dev
 +   ├─ google-native:apigateway/v1:Config  pulumi-api-gw-config-native   create
 +   └─ gcp:apigateway:ApiConfig            pulumi-api-gw-config-classic  create

Resources:
    + 2 to create
    4 unchanged

Do you want to perform this update? yes
Updating (dev):
     Type                                   Name                          Status                  Info
     pulumi:pulumi:Stack                    Vega-dev                      **failed**              1 error
 +   ├─ google-native:apigateway/v1:Config  pulumi-api-gw-config-native   **creating failed**     1 error
 +   └─ gcp:apigateway:ApiConfig            pulumi-api-gw-config-classic  **creating failed**     1 error

Diagnostics:
  google-native:apigateway/v1:Config (pulumi-api-gw-config-native):
    error: error sending request: googleapi: Error 404: Resource 'parent resource not found for projects/REDACTED/locations/global/apis/v1%2Fprojects%REDACTED%2Flocations%2Fglobal%2Fapis%2Fapi-gw-dev-id/configs/pulumi-api-gw-config-native' was not found
    Details:
    [
      {
        "@type": "type.googleapis.com/google.rpc.ResourceInfo",
        "resourceName": "parent resource not found for projects/REDACTED/locations/global/apis/v1%2Fprojects%REDACTED%2Flocations%2Fglobal%2Fapis%2Fapi-gw-dev-id/configs/pulumi-api-gw-config-native"
      }
    ]: "https://apigateway.googleapis.com/v1/projects/REDACTED/locations/global/apis/v1%2Fprojects%REDACTED%2Flocations%2Fglobal%2Fapis%2Fapi-gw-dev-id/configs?apiConfigId=pulumi-api-gw-config-native" map[apiConfigId:pulumi-api-gw-config-native apiId:v1/projects/REDACTED/locations/global/apis/api-gw-dev-id location:global openapiDocuments:[map[document:map[contents:REDACTED path:spec.yaml]]] project:REDACTED]

  gcp:apigateway:ApiConfig (pulumi-api-gw-config-classic):
    error: 1 error occurred:
        * Error creating ApiConfig: googleapi: got HTTP response code 404 with body: <!DOCTYPE html>

      <meta charset=utf-8>
      <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
      <title>Error 404 (Not Found)!!1</title>

404. That’s an error.

The requested URL /v1beta/projects/REDACTED/locations/global/apis/v1/projects/REDACTED/locations/global/apis/api-gw-dev-id/configs?alt=json&apiConfigId=pulumi-api-gw-config-classic was not found on this server.  That’s all we know.

  pulumi:pulumi:Stack (Vega-dev):
    error: update failed

Resources:
    4 unchanged

Duration: 5s

I have the same problem creating the API config using Python
# API Gateway -----------------------------
# Create the API Gateway
api = apigateway.Api.get("linkedai-integration", id="linkedai-integration")

# Assume the configuration file is base64-encoded, replace with actual content
config_path = os.path.join(Path(__file__).parent,"api_definition.yaml")
config_contents = base64.b64encode(open(config_path).read().encode()).decode()

# Create an ApiConfig resource for the API
api_config = apigateway.ApiConfig(
    "api-config",
    api_config_id="",
    api=api.name,
    openapi_documents=[
        gcp.apigateway.ApiConfigOpenapiDocumentArgs(
            document=gcp.apigateway.ApiConfigOpenapiDocumentDocumentArgs(
                path=config_path,
                contents=config_contents,
            ),
        )
    ],
)

# # Create a Gateway for the API
gateway = apigateway.Gateway("linkedai-webhooks",
    region="us-central1",
    api_config=api_config.id,
    gateway_id="linkedia-webhooks",
)

I got this error
The requested URL /v1beta/projects/autonomy-286821/locations/global/apis/projects/autonomy-286821/locations/global/apis/linkedai-integration/configs?alt=json&apiConfigId=terraform-20230608225806753600000001 was not found on this server.  That’s all we know.

It looks like the issue is y'all are using api_config.id instead of api_config.api_id.
The .id includes the prefix /projects/<project>/locations/global/apis/ so you end up with that twice in the request URL. The .api_id is just the api id without that prefix.

import pulumi_gcp as gcp

def encode_file_b64():
    import base64

    with open("openapi.yaml", "rb") as binary_file:
        binary_file_data = binary_file.read()
        base64_encoded_data = base64.b64encode(binary_file_data)
        base64_output = base64_encoded_data.decode("utf-8")

        return base64_output

def create_api():
    api = gcp.apigateway.Api("carechat", api_id="carechat")

    api_config_resource = gcp.apigateway.ApiConfig(
        "carechat_api_config",
        api=api.id,
        api_config_id="carechat_api_config",
        openapi_documents=[
            {
                "document": {
                    "contents": encode_file_b64(),
                    "path": "openapi.yaml",
                },
            }
        ],
    )

Still didnt figure out the problem, I am getting 404.

404. That’s an error.

The requested URL /v1beta/projects/primary-care-378721/locations/global/apis/projects/primary-care-378721/locations/global/apis/carechat/configs?alt=json&apiConfigId=carechat_api_config was not found on this server.  That’s all we know.

Hi, i have the same issue just creating the config.
Like @mythral stated, there seems to be an issue with the resource url that is being checked. But the origin is unclear to me, is it relates to the actual resource i am trying to create.
i get the same error output: Error creating ApiConfig: googleapi: got HTTP response code 404
For me the api path reads (line breaks to show the doubling of /projects/<project_id>/locations/global/apis):
/v1beta
/projects/<project_id>/locations/global/apis
/projects/<project_id>/locations/global/apis
/<api_id>/configs?alt=json&apiConfigId=<config_id>
Any hint is highly appreciated!

authors: 23ewrdtf heitzerj-grapes juansebashr maitham mythral pedrorjbr t0yv0

repo: pulumi/pulumi-gcp


text:
[Blog] Top 5 Things an Azure Developer Needs to Know: Introduction

This was supposed to be published last week but was delayed to this week. It was already approved.

@spara Is there a word missing from the title?

Top 5 an Azure Developer Needs to Know: Introduction

Maybe is was meant to be

Top 5 Things an Azure Developer Needs to Know: Introduction

?

@spara Is there a word missing from the title?

Top 5 an Azure Developer Needs to Know: Introduction

Maybe is was meant to be

Top 5 Things an Azure Developer Needs to Know: Introduction

?

We have a 60 character limit for titles, if I add 'Things' then the other titles in the series would exceed 60 chars. I can fix it, but the titles will have to be reworked for the other articles and not consistent.

FWIW, I believe there's a meta-tag you can add to suppress the 60 character warning. I know that's bad SEO practice, but if you're asking me, I honestly prefer correct grammar in the titles than slightly exceeding the limit. Just my $0.02.

I'll search for the metatag and fix it
On Tue, Aug 3, 2021 at 6:24 PM Joe Duffy @.***> wrote:

FWIW, I believe there's a meta-tag you can add to suppress the 60
character warning. I know that's bad SEO practice, but if you're asking me,
I honestly prefer correct grammar in the titles than slightly exceeding the
limit. Just my $0.02.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/pulumi/pulumi-hugo/pull/467#issuecomment-892261088,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAE35UGII4SNGJP36FWVDKLT3CCEBANCNFSM5BNPTW2Q
.

I dug through hugo and it looks like the check for title length happens
when the site is built from a PR. I'll dig through the build process
tomorrow.
I've fixed the title, if you approve this PR, I can merge it.
https://github.com/pulumi/pulumi-hugo/pull/475
On Tue, Aug 3, 2021 at 6:28 PM sophia parafina @.***>
wrote:

I'll search for the metatag and fix it
On Tue, Aug 3, 2021 at 6:24 PM Joe Duffy @.***> wrote:

FWIW, I believe there's a meta-tag you can add to suppress the 60
character warning. I know that's bad SEO practice, but if you're asking me,
I honestly prefer correct grammar in the titles than slightly exceeding the
limit. Just my $0.02.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/pulumi/pulumi-hugo/pull/467#issuecomment-892261088,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAE35UGII4SNGJP36FWVDKLT3CCEBANCNFSM5BNPTW2Q
.

authors: joeduffy spara

repo: pulumi/pulumi-hugo


text:
Update pulumi-terraform to 3635bed3a5

This PR updates pulumi-terraform to 3635bed3a5, and re-runs code generation

LGTM!

repo: pulumi/pulumi-openstack


text:
Arbitrary keys and code at base indent level after resources: does not throw warning or error

What happened?
I created two new resources in my Pulumi.yaml and pulumi seemed blind to them. pulumi preview showed no sign of them.
I was able to introduce arbitrary properties and there is no error.
Example
To Reproduce:

Create valid Pulumi.yaml with at least one resource.
At the base indent left (far left) add any arbitrary text that is valid yaml syntax.
Pulumi will ignore it.

e.g.
# Pulumi.yaml

config: {}
variables: {}
resources:
  myResource:
      [...] # some valid config

whatever:
  youwant:
    - something

Instead pulumi ought to throw an error or a warning.
Output of pulumi about
% pulumi about
CLI
Version      3.96.2
Go Version   go1.21.4
Go Compiler  gc

Plugins
NAME  VERSION
yaml  unknown

Host
OS       darwin
Version  13.6.3
Arch     arm64

This project is written in yaml

Additional context
https://pulumi-community.slack.com/archives/C03E69EQRD2/p1702879893055319
Contributing
Vote on this issue by adding a 👍 reaction.
To contribute a fix for this issue, leave a comment (and link to your pull request, if you've opened one already).

Related to https://github.com/pulumi/pulumi/issues/14775.
The CLI used a JSON schema to validate the Pulumi file was of the expected structure, but that had to mark some places as "additionalItems: true" to handle that pulumi-yaml adds it's own keys to the Pulumi.yaml.
If we want Pulumi to be able to validate project configs but also allow language runtimes like yaml to add stuff to the project config we're going to need to come up with a much more complex validation routine that involves both parties.

This is not that big of a deal to me if it's going to be really complex to address.

This is not that big of a deal to me if it's going to be really complex to address.

Zero validation of the project file would cause a lot of user issues so this definitely needs fixing.

authors: Frassle jamest-pin

repo: pulumi/pulumi-yaml


text:
limit for arrays, field defaults for arrays, refactoring

Also:

Refactored crazy redundant event handlers
Documented methods
Reduced redundant refreshes

Looks good to me Tom. Made a fix here 0164028 and an adjustment here 08b3469.

I agree, being at the max is not an error. It's a normal thing in your life. Calling some attention to it seems appropriate but red will make people think they Did It Wrong.

authors: austinstarin boutell

repo: punkave/apostrophe


text:
Modal array tab ui

modal array tabs are a bit wider
modal array tabs don't wrap for long titles, they truncate with text-overflow:ellipsis
padding added to the bottom of the modal array tabs container to account for the position:fixed Add Item button

This looks great to me @stuartromanek. Minor changes.
cc @boutell

@stuartromanek Made those changes. Looks good to me.
cc/ @boutell

authors: austinstarin stuartromanek


text:
Screenshot (17 Feb 2022 07:11:21)

http://treatment.plazi.org/id/D7781AC6-EB44-4863-BFAC-8FA15FE24A21
https://ocellus.info/?source=all&q=Tyrannoscelio&page=1&size=30
Missing images in Ocellus

@myrmoteras please try again. I am not able to reproduce it so it is possible that you hit that when there was a gap in the database. Ordinarily, that should not happen, so I can't figure out right away why you experienced the above. But if it does again, please let me know.

authors: myrmoteras punkish

repo: punkish/ocellus


text:
Sonatype Nexus support (archive::nexus)

You can Query Nexus HTTP API to download an artifact, e.g.:

https://oss.sonatype.org/service/local/artifact/maven/content?g=io.hawt&a=hawtio-web&v=1.4.36&p=war&r=releases

And with a little trick you can also download md5 or sha1:

https://oss.sonatype.org/service/local/artifact/maven/content?g=io.hawt&a=hawtio-web&v=1.4.36&p=war.md5&r=releases (p=war.md5 or war.sha1)
I was playing around trying to create a simple implementation for this using archive: https://github.com/jairojunior/puppet-archive/blob/master/manifests/nexus.pp
But Bodeco.Util.download doesn't support query strings. Any chances to add support for query string in this module? Or it's not intended to this (could break something or any other reason that I can't see)?
I'm really interested to add this support to archive, so any help would be appreciated.

The other two define types use a function because the checksum file needs processing. The archive parameter checksum_source was intended for this, but not yet implemented. I think checksum_url might be a better name?

@nanliu If you're working with a remote source (http, ftp, s3), checksum_url is probably a better name.

@jairojunior please review latest changes and provide feedback if you run into any issues.

Sorry didn't mean to close issue. Per last comment, I will accept a nexus define type wrapper. I'll list it as experimental along with the go/artifactory wrapper in the readme.

Thank you.
I was able to finish archive::nexus with the latest changes, but I have a small concern about performance.
Check this gist: https://gist.github.com/jairojunior/071a5256abeb1d39e54a
In the second run, with HTTP checksum URL it tooks 12s, with HTTPS, 6s, and hardcoded checksum only takes 0.4s
I have a module that uses net/http to query a HTTP API and the request are really fast (~100ms). Do you have any idea of what is causing this?
Meanwhile, I'll work on rspec tests for archive::nexus.

I'm not able to reproduce the difference. Can you time curl to the url in comparison:
https://gist.github.com/nanliu/0d3f5bf4a53431f81ed2

My bad, it's something with my puppetlabs/centos-6.6-64-puppet vagrant setup:
time curl -i -X GET 'https://oss.sonatype.org/service/local/artifact/maven/content?g=io.hawt&a=hawtio-web&v=1.4.36&p=war.md5&r=releases'
Took 5.5s there and only 0.4s in my machine
puppet apply --debug --trace --profile site.pp --modulepath '/home/jjunior/wildfly-vagrant/deploy/modules'
Is doing fine, less then a second.Thanks again.

@nanliu I think we should close this issue.

Fix by #54

authors: jairojunior nanliu

repo: puppet-community/puppet-archive


text:
Why chrome-80 npm distribution tag is not provided?

According to the documentation, Puppeteer provides npm distribution tags coressponded with Chrome version.
I suppose the current latest release v2.1.x (Chromium 80) should provide in chrome-80 distribution tag, but actually both of puppeteer and puppeteer-core don't provide.
Steps to reproduce
Tell us about your environment:

Puppeteer version: 2.1.x
Platform / OS version: any
URLs (if applicable): https://www.npmjs.com/package/puppeteer?activeTab=versions / https://www.npmjs.com/package/puppeteer-core?activeTab=versions
Node.js version: any

What steps will reproduce the problem?

Run npm install puppeteer@chrome-80 or npm install puppeteer-core@chrome-80

What is the expected result?
Install puppeteer(-core) v2.1.1.
What happens instead?
npm ERR! code ETARGET
npm ERR! notarget No matching version found for puppeteer@chrome-80.
npm ERR! notarget In most cases you or one of your dependencies are requesting
npm ERR! notarget a package version that doesn't exist.

Resolved with releasing v3.0.0.

repo: puppeteer/puppeteer


text:
(maint) Bump leatherman for execute change and Xcode 7 fixes

Commit for LTH-48 is cherry-picked from master.

/cc @peterhuene

repo: puppetlabs/facter


text:
DOCS-465 release notes for Puppet Server 1.0.8

1.0.8 release notes and minor tuning guide edits.

I think it would be good in the release notes to mention that we upgraded Puppet Server's dependencies on JRuby to 1.7.19 (SERVER-273) and on the Jetty web server to 9.2.10 (SERVER-380 and SERVER-513).
There aren't any major functional changes that we're anticipating as part of those updates.  A few maybe worth mentioning, however, are:

JRuby 1.7.19 resolves a memory leak around the use of the "jruby-pool" DELETE admin API.

Between the 9.1.0 version that Puppet Server 1.0.2 was using and the 9.2.10 version that Puppet Server 1.0.8 will use, the Jetty team has implemented a number of fixes related to problems with intermittent response handling failures and associated threading deadlocks.

The upgrade to the newer Jetty version also coincides with changes to a couple of the default values that Puppet Server uses for the webserver.  Via a change to the shutdown-timeout-seconds setting, the webserver can now create up to 200 threads -- rather than up to 100 threads -- by default.  Via a change to the shutdown-timeout-seconds setting, the webserver will now allow for up to only 30 seconds for a graceful shutdown rather than up to 60 seconds by default.  These are documented in SERVER-513.

Looks good to me, with just a few comments / clarifications on some of the items in the notes that you may want to consider adding / revising.

@jbondpdx Latest edits look good to me.  Were you planning on making any further changes around how the PE Puppet Server vs. Puppet Server versions are described or any of the other additional items I mentioned that could be documented - new JRuby and Jetty version changes?  If not, I could go ahead and merge this...

I think this ticket was done as part of https://tickets.puppetlabs.com/browse/SERVER-465 not DOCS-465, since the latter doesn't seem to be a real JIRA ticket.  SERVER-465 is marked "done" so presuming that @jbondpdx was done with her edits on this and will merge.

repo: puppetlabs/puppet-server


text:
(NPUP-42) Implement new expression and the new function.

This implements new expressions in the parser that get translated to calls to the new function during evaluation.
This also implements the new function for the following types (String is forthcoming):

Array
Boolean
Float
Hash
Integer
NotUndef
Numeric
Optional
Struct
Tuple

Putting up for review so that progress can be made while I complete the implementation for the String type (which is, by far, the most involved).

Could only find a typo in a comment, and some additional tests that would be good to have.

Thanks, @hlindberg.  I'll get those fixes pushed up.

Pushed up the fixes.

authors: hlindberg peterhuene

repo: puppetlabs/puppetcpp


text:
(maint) Cleanup Azure container leftovers smarter

Cleanup containers by name that are > 14 days old by default

New cleanup message
Pruning Containers
Total reclaimed space: 0B

Found puppet/puppetdb images:
6.0.2 16833fdab765 2019-02-10 23:27:42 +0000 GMT
5.2.7 1eea7ca0e945 2019-02-08 20:03:16 +0000 GMT
6.2.0 5b84704c1d01 2019-02-01 20:23:46 +0000 GMT

Filtering removal candidates...

Pruning Dangling Images
Deleted Images:
deleted: sha256:992a0d77f7c0ca5b5beb4bee42b8d76e7470b04551c0ab4eab96a390b8b5468a
deleted: sha256:7ec8b7266a9eafb289eab1a04a62cdd44df6d00bbc653b997a54d025322c28cc
deleted: sha256:add31a1cde5167fd89f39a212bcf7e74278ea3bbaee0941171bc0af8d5a49969
deleted: sha256:53bd8ed7553999749ae63ca63d71263e69eb082409183feca02fe5cbe1e2b06d
deleted: sha256:5e5109d67ead48fecc05dbef47735e4d13118b0d1841e4cfd8ec7021273b8c23
deleted: sha256:bca71f7ceae15bf41989d93d0037e59d2284932e63d9bb18abbca531f60fe09c
deleted: sha256:ddc204d065767e0d5f23c7d7bceeb574fc5dc4eb251e1dd3c64e4bfaffeb9956
deleted: sha256:a03241ceddd7d31270f30fad890c70f062a190641e2cc133b5ba980a3b08cbfe
deleted: sha256:27a3614bbccb7932cd87a37cae8d563446321ab203e26bc002f5517d2a62974a
deleted: sha256:90f260ef5849ab855bab6f3340e7f628f4594b5bc0439da250e6f0367e925d54
deleted: sha256:746d7dfaa8ff73de7a8e6d071b08d663351b7ef0d042ca5f4e37dca486fc9b7c
deleted: sha256:39f435adbf421e33829c7efbc94abadb5f2eff99b28173bac65c6c5caec06889
deleted: sha256:42267402921785637be4d779668e38622e5baa78a704f4848548367e476582ca
deleted: sha256:99128dbefdfc150afd24b3b09f836e3f1f2d79ce5435168eb229505d035129df
deleted: sha256:a450f099117b9dfac148b04a071af459970ad0101023513276062ac6519a4c95
deleted: sha256:fc2eeae1d6d5d26dd3b208202623bd7ec5c294f7868eebe673f0ad8ed14c6841
deleted: sha256:2ea7c17ace21a444c771af338cbc0a8ffc6cd89059c3a548b4d73c094d47be9e
deleted: sha256:032f8d5b8f2ba43134a076fe417ac78496578a2e4a1c5e0eddac3513844e0fa7
deleted: sha256:0ba4de92d1cecfc0ea01d6ecfd7cb016a96e2499a034640cca79c9572fafeb47
deleted: sha256:cd79c1170456f995b18e905ef0e0ed35b7e0ddd6facf582981033db07ad4e149
deleted: sha256:634f8040c396b8ceb433c47f308c4cbec3390e6ed7fd85ea1f43801be0aa12d0
deleted: sha256:7742f340bcb07438ccc958b53a516120d93ea03fab1765638d6a371e29418667
deleted: sha256:761e4e89463f1fff825ea6889f35bb97bfb7c342ee0b086dddb7dd279c2d682c
deleted: sha256:47f9c0973b7d28477c02943e2edbbb4b6d1fc8ec5a56e3051cc07a4d1481c313
deleted: sha256:aee4d8fdc351478e056bd543ba4d1002421e9962f834ef92b12e6574bc2eed32
deleted: sha256:c6ebcec5df72981b28a9806167cd07e91ad91d22559e1a8cc015c444ae4f1d3f
deleted: sha256:166d2d6749acf180737069a9233430b7f3047ae186caaaf1611c8145146694ef
deleted: sha256:8723c579ef856e036a85b66c37999b357a60cbcf773ef21048d5c01e1e27dcad
deleted: sha256:78f76df5759d81d43bf6277b2536d3c16cbfc5c2ed914e6c1a6c60344a2b02a6
deleted: sha256:7ff8effd2daa1e0f020e6473e800df66566accb7b0e2de0842421a2dae7d2740
deleted: sha256:398b6464a4b43609bd43f8a327659d7e52b0f79f428993b6462026a3bc445344
deleted: sha256:779159080ab6d429c97a94f1de94007a295c98997dafae84d4276de7328beb61
deleted: sha256:d5e1f671414d41d9342a674ac326514b0ec4fd921ad5614f5544d7471e7a8f0f
deleted: sha256:81ab6f7ce0324d26278d819c4789484b181c9558df37d71975a8f58b6d12bf56
deleted: sha256:8f5e2aab7f4b7dc59c5c6238c9844397f40590346a5b46b52e2956ddc951ba21
deleted: sha256:18b249cd4fdc11a4a512f8af1bbbd0e8b2cbd36973e252391354e50bce70d4ec
deleted: sha256:54549c9160c621a6d0556e2f6832181940077f750f121d9ed64ccae00ad6a1cc
deleted: sha256:9636060005d0f80c9aef9dc8b0298a9b37b04da0a48b510297782cdcd80cc586
deleted: sha256:3043f90514ce14b7bc6476d33a4b38610d058a63f7700b18755c45e78e294f7f
deleted: sha256:66157dfad7e70a3f50bf37fe07bc28f15da200093487e633831ec3f3b0f3ff10
deleted: sha256:9704aaea8dfbee9d1ecfa9f527acf2287e534029217738f9d6fa866f9915e094
deleted: sha256:46ddf0d01d97812d87f31571abec3c458307da5d0febb5a6979aba53f49d9618
deleted: sha256:d24ab74909f21f2c9a8a235279003a6117b42861f410f2d98267a22163968dca
deleted: sha256:8ca2ce35c7cf3d5081aab16b0b309f54a196f6a2c911b463688c6b232d7d53ef
deleted: sha256:6d92c3cfdfcedb88b1ee8a4ddd0239e38a4ec968e137d246c269e3ba60f84240
deleted: sha256:d55c8cae3741e083360a4f8ce5dd542675d5fb8dcfbb63d400bd4d3ea9ddf5f7
deleted: sha256:9973037e9cc0e00186fa7d0936b491a478d33d44b3f6ac308ae615e4aa23540b
deleted: sha256:5000a8c5c2e66c6a69f7f16fac3dd436ae9e26900d9876321a8e62e49237692c
deleted: sha256:3c6021fa5e0e00f5b210341ebc200ce7b312ff47a356c11abfa1f47c302aa434
deleted: sha256:27af54932442414a43ec0acda7031290d258286dd303a8e714080003859280b6
deleted: sha256:5f3794b8c3a8c124ff638c6838adb9990ca5c1949632bfaf3ed90a43aeeb0ce5
deleted: sha256:bd3584bf7716b4837654bd26554d14a4554d8c3a23adff4159bf10d4a27460e5
deleted: sha256:dd75bcf08c8b676c44e8eb1fc7432c83b5a5e1036d04d8e19dd8b97f0d7aa967
deleted: sha256:4965a703c931ac98bd75b83cd706901d94d5b1b9e9904cd901a73f0d9e85faff
deleted: sha256:2139c9a4c6821446677ddd58e3f1f60ac844548b2174c502c58eda8759621c73
deleted: sha256:e9297a97a1e883a7019ef1e14648196c20bc4c7e5c9b5f8deae4218b9d9366ad
deleted: sha256:2359aa99740a8e0505a53578bf2da081cc15d53f37e20b84e6e76dd343fbe5e4
deleted: sha256:b17677060f76b9f3d13a3a0c8f49cf89f793fe09cf5cd5d86d19fac2fd38276f
deleted: sha256:93ad9fda24bc109291b0cb6824cd6a5ef715952a2eaf1d1e0d3cccf0f5d03135
deleted: sha256:0d494315efbdb3166abf41762098bed9f3b9284dcf76b9ea8c3b375044751502
deleted: sha256:1b2a948d750b15a6e1aa7977f0cec5b023b9d13d67ec88ee7150dc8475e2a640
deleted: sha256:da3bcc6940eb3607c6c2d857ca49cf4c62b523cafa720e9d444dd511361422e9
deleted: sha256:82bd23290c1ea6ff7814dd53c321f5dec04bbc4e56671c424a1bf4969279e70f
deleted: sha256:0534ed72417a06455151d0196c6cad6d1041917c0c05b5f55303a964fe3fdf17
deleted: sha256:a3dbe80d329e6ff8057ee2f227388c88e61de2c2abad654b44dca0d0926fa758
deleted: sha256:d3c6af12d2ee432f4006042c18aba373e8341ac4deb5725b93d533d018f3ff7c
deleted: sha256:65f3fe2eb63e7371766fedb29f2f2bef2b307ffa9f4ebc74c4b9eb80e7fcc584
deleted: sha256:f673fce7c7b9c3b88d7a6c6165be55d1c9108b13eef28e108a3a77d3286e3bd0
deleted: sha256:0f0ea75f39c2e346558e2b8158ddbd71e8647e4d24334e29874ef0d68f33d0bd
deleted: sha256:87026c1e07453f1e1d3fab031326eefa8133f7e78409a025a738bdbbebbceaa7
deleted: sha256:4b41d0c49ea06a7376592a108e02c8374f67adc5b285e034015c678ff28110ba
deleted: sha256:1747e920b233b2476a3522c72fe29d74d84963af94e54338518d3b4bdd15ec3a
deleted: sha256:97ae6319bfb8cc281031115c9914236b590ce3745fcf9f98623b06c24874bd97
deleted: sha256:3305739f4a4d7fe62edb586c9c68aba2606a70adfb9a9455e5a1cea295f608a1
deleted: sha256:9c4a30903c7f6bc72a8fc9c18dabff67e1cef441c9feabdacb28b3db718b31cb
deleted: sha256:8241e786661891103f2d0d1aa1d1f302e3eb6bf5ae0fc7458fc07837f3d271cf
deleted: sha256:39fec40aa13ea0c25f4481ff293358c583b73c3267c72112551a6d759cc3d18a
deleted: sha256:0ad4eda5a9ee4404677056a67005ba9160f5adebecb83a191d60b0dfef240ac4
deleted: sha256:c3738f2d4a62aa54eb869af71ec819a01a486afcde481c549e639d8f13ece36d
deleted: sha256:23a8684a5e6948c5602905bba19765d4d31f592869fac511195cb21fb1b779b3
deleted: sha256:ebf1a5c510896ff107e0c3b609c0a5070ca5cd680327c3f817d8aa68023d786c
deleted: sha256:5aa0264c9b8533520837b2b324783da62dad118584b62cd1303c30f962311b4c
deleted: sha256:0f1a1627244085692327671a8b1653221236c7fe7cc299c01262f0d608854466
deleted: sha256:20352a3f5e42dac2d8a52310849f7c75a301fb78c0b0ef22f54fda5ef6181fba
deleted: sha256:feae345f8256057764c202be15c55eebca94f0c7f3ceac3faee845aeea7f5086
deleted: sha256:ab07ece25b1635cf8827221774c70c00b25abdb8c6c89889c48af2028eca69b2
deleted: sha256:3ef5e33ec6436e4c82bf8026013ee2ed57f5642998c39a2ad683acfd5b6e4e56
deleted: sha256:2c3ced0d0fce7e7736bf16971cefef455151da330451458cdb4bd35750151faa
deleted: sha256:9af3cede32424eef42b9c144c6cc6ab888ab38fef16cec4d8e436791d6abdb63
deleted: sha256:4f2d599a31a7639f0e3cf2118dfb43d7e7c711eac0f838eb5a36d6076f878f32
deleted: sha256:da66fe66ddd21a27f02f0fa6b7a2224ebce4cb8e84b70f7a40d6de3510c2a855
deleted: sha256:5bf69b22c704c879f1248f2f527750a1f286542cc92f118dc33757a452f3e952
deleted: sha256:a4b64b2eaac451686fcf40899ea3209fe72c594344ece6768628837e500c7026
deleted: sha256:514d242d698fcd94b3dbd84c8ccca3818e92f078a33ee9d66ff2dd7dc4441ac7
deleted: sha256:6f2649f68c478839752e70c4f392b051b4613fbaa34b1f3105373f51fca33e13
deleted: sha256:d56fac7f36197e94b12f67ad206a3edd69f59a09c5a5506c4776a599f1e1b805

Total reclaimed space: 93.35MB

Test PASSed

CLA signed by all contributors.

authors: Iristyle puppetcla puppetlabs-jenkins

repo: puppetlabs/puppetdb


text:
(MODULES-2324) Rake Tasks for Testing

Add rake tasks for acceptance and integration testing. The Gemfile was
updated to group gems related to installing Puppet into the "development"
group. The Rakefile was modified to put in logic to prevent load errors
if someone didn't install all the Gemfile groups.

@Iristyle @ferventcoder  @jpogran  I touched a bunch of stuff so you should take a look at the changes.

@cowofevil It appears you backed a few changes away from gemfile? The GemFile is under modulesync, so any changes you make will be switched back by the next sync.

@ferventcoder I forgot that the module Gemfile is configured by module-sync. The issue is that I'm running on Windows with Cygwin so the install of Puppet, Facter and Heira is never going to work. Also, for the "acceptance_tests" task and the "integration_tests" tasks none of the development gems are necessary. The only thing that is required is rake to run the tasks.

@ferventcoder @Iristyle @jpogran @zreichert Nevermind, I'm closing this PR because it is too ambitious for the way things are currently. Will revisit soon.

authors: cowofevil ferventcoder

repo: puppetlabs/puppetlabs-dsc


text:
errata: site-lisp/README

https://github.com/purcell/emacs.d/blob/b8948ae6ea8ac63a090682cc89049d3eb900157d/site-lisp/README#L1-L3

This directory (errata: does not added to load-path) and its immediate subdirectories will be added to load-path at start-up time.

https://github.com/purcell/emacs.d/blob/b8948ae6ea8ac63a090682cc89049d3eb900157d/lisp/init-site-lisp.el#L7-L20

Sorry, it's not clear what the issue here is.

The content of https://github.com/purcell/emacs.d/blob/master/site-lisp/README says:

This is a place for 3rd party code which isn't available in MELPA or
other package repositories.
This directory and its immediate subdirectories will be added to
load-path at start-up time.

but https://github.com/purcell/emacs.d/blob/b8948ae6ea8ac63a090682cc89049d3eb900157d/lisp/init-site-lisp.el#L7-L20 only adds every non-hidden immediate subdirectories, and not including the site-lisp/ folder itself into load-path.

only adds every non-hidden immediate subdirectories, but not including the site-lisp/ parent folder itself into load-path.

Are you sure? Locally, I can see that ~/.emacs.d/site-lisp is in load-path.

authors: purcell snowman


text:
Control element method does not work in Safari Version 11.0 (12604.1.38.1.7)

Table of Contents

Expected Behavior
Current Behavior
Possible Solution
Steps to Reproduce (for bugs)
Context
Your Environment

Expected Behavior

Click on the control element example should load the calendar.
Current Behavior

Click on the control element example does nothing
Possible Solution

Steps to Reproduce (for bugs)

Navigate to http://pushtell.github.io/react-bootstrap-date-picker/
Click on the Control Element example

Context

Whatever breaks this example also breaks similar usage in my app.  When using the Control Element method, users can't use the date control.
Your Environment

Version used:
Browser Name and version: Safari http://pushtell.github.io/react-bootstrap-date-picker/
Operating System and version (desktop or mobile): macOS Sierra 10.12.6
Link to your project:

@juanpaco Have you had any luck debugging this issue? I am experiencing this same issue in Safari.

I haven't, no.  I ended up using https://github.com/YouCanBookMe/react-datetime instead.

Ok, thanks.

My fix for this, setting the onClick event to call the onFocus function.
``const CustomControl = ({...props}) => {
return (<Button onClick={props.onFocus} {...props}>{props.value});
};

authors: DanPfeifer juanpaco mbrimmer83

repo: pushtell/react-bootstrap-date-picker


text:
🛑 API is down

In 232268c, API (https://api.unmer.ac.id/) was down:

HTTP code: 0
Response time: 0 ms

Resolved: API is back up in 66c43d5.

repo: pusimgit/upptime


text:
Add stuff from "Windows Attacks: AT is the new black"

http://www.slideshare.net/mubix/windows-attacks-at-is-the-new-black-26665607

Going to go ahead and pick up where this left off. Hopefully should be able to squash this issue in time for the original Summer Bug Fixups milestone.

Starting on slide 36


text:
Rewrite MOTD parser

Full rewrite of MOTD parser. I also made an API for users, so they can easily write their own parser.
Closes #204.

Found something strange, when I read about the protocol, found that all text in MOTD can be formatted with one tag on top level. See this. Should I implement parsing for this?

Found something strange, when I read about the protocol, found that all text in MOTD can be formatted with one tag on top level. See this. Should I implement parsing for this?

That's interesting, good catch, yeah it probably should be respected, even though I don't think I've seen that before. If you are going to be adding support for that here, make sure to also add a unit-test for that. Otherwise, you can reference this comment in a new issue about this and let someone else handle it later.

NOTE: If this PR wasn't yet supposed to be reviewed, please mark it back as draft PR and feel free to ignore this review up until you think the PR will be ready.

This is ready to review, but not for merge. I'm keep doing ansi and xterm-256 properties.

I pretty sure, few big moments here still needs more work.

Hmmmmmmm... I wonder, how many things was broken in first implementation from Iapetus-11...

Adding do-not-merge label, as requested.
This PR can be still reviewed, but can only be merged after 306, and should be reviewed as something that will already use some changes by this PR.

[ ] #306

By the way, I found a server that's using text that includes the special color formatting:

However this implementation is currently treating these text blocks as just plain strings (line 265):
text = item.get("text")
        if text is not None:
            parsed_motd.append(text)

Perhaps it would be wise to do parsed_motd.extend(cls._parse_as_string(text, bedrock)), so that we'll actually parse out the colors in this text too.

I do not remember what I wanted to improve here, so opening this for review.

Perhaps it would be wise to do parsed_motd.extend(cls._parse_as_string(text, bedrock)), so that we'll actually parse out the colors in this text too.

Done!

As flows out of this conversation, we no longer support ANSI 3-bit, 4-bit and 8-bit. At now, we only support 24-bit.
If you want this feature - implement it yourself, or raise a feature request. We can reconsider this.

Also, I found a public database with 130k servers and their answers. If you need to test this PR on real world - I can give a file with 45mb of raw answers. Just contact me.

I found a database with several hundred thousand unparsed Minecraft servers' answers, and I will run all methods on them. Although, simplifies can be improved in some situations, you said that improving of them should go as separated PR, so this PR will be merged faster.

authors: ItsDrike PerchunPak

repo: py-mine/mcstatus


text:
[pyos meta repo] Use GitHub Artifact Attestations

GitHub now has full support for Artifact Attestations: https://github.blog/changelog/2024-06-25-artifact-attestations-is-generally-available/
The feature supersedes our usage of SigStore (#156), since it uses SigStore under the hood and has built-in support in the GitHub API/cli, e.g. gh attestation verify PATH/TO/ARTIFACT -o myorganization.
I am happy to make this change if there is agreement.
cc @webknjaz

Either that, or the official action. Keep the old job for making releases, perhaps reduce its privileges and add a new job with new privileges.
I actually filed an issue to update this in PyPUG yesterday, too.
The upload attestations will be built into the publish action once that work is completed, by the way.

By official action do you mean actions/attest-build-provenance or sigstore/gh-action-sigstore-python?
You're saying it might get folded into gh-action-pypi-publish?

As of https://github.com/pypa/gh-action-pypi-publish/releases/tag/v1.11.0, sigstore attestations enabled by default.  https://github.com/pypa/gh-action-pypi-publish/issues/288 is for adding them to GitHub Attestations as well.

By official action do you mean actions/attest-build-provenance or sigstore/gh-action-sigstore-python?

Oh, I missed this question. I think I meant pypi-publish back then.

You're saying it might get folded into gh-action-pypi-publish?

Kind of. I want to try uploading the same attestations that are sent to PyPI, to GitHub as well. However, the difference with actions/attest-build-provenance is that technically GH advertises that theirs is for “build provenance” and ours is for “upload provenance”. This is because pypi-publish does not know where your dists are coming from — you might've built them elsewhere and configured GHA to download them into the job from S3 or some other place + publish from there. So within the action we know that we “sign what's published”, but we don't know if we “sign what's built within the same workflow”. As a user, you know what you configured, so you could say that this is build provenance as well.
What I dislike about actions/attest-build-provenance is that they demonstrate running it from test/build jobs and setting elevated privileges there. If you're to use it, I'd recommend still going through the GH workflow artifacts route and signing them in a separate job.
Here's an example of doing this + producing SLSA artifacts as well: https://github.com/ansible/awx-plugins/blob/678ea69/.github/workflows/ci-cd.yml#L925-L1115.

[...] sigstore/gh-action-sigstore-python?
You're saying it might get folded into gh-action-pypi-publish?

Oh, and yes, pypi-publish attestations do use sigstore under the hood (as does GitHub's attestations action). So we could say that we absorbed this. Although, there might be slight differences. Still, you could probably extract those files since they end up under dist/ on disk, next to the dists, and upload them to GH Releases instead of the manual signing invocation.

repo: pyOpenSci/pyosMeta


text:
Running scenes gives unknown device ID error

Describe the bug
Running a scene often times gives an unknown device ID error.  The device does show up correctly.
This error originated from a custom integration.
Logger: homeassistant
Source: custom_components/alarmdotcom/base_device.py:198
Integration: Alarm.com (documentation, issues)
First occurred: 9:37:39 AM (11 occurrences)
Last logged: 9:43:30 AM
Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/pyalarmdotcomajax/devices/registry.py", line 299, in get
return self._devices[device_id]
~~~~~~~~~~~~~^^^^^^^^^^^
KeyError: 10294121
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 233, in _handle_refresh_interval
await self._async_refresh(log_failures=True, scheduled=True)
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 389, in _async_refresh
self.async_update_listeners()
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 172, in async_update_listeners
update_callback()
File "/config/custom_components/alarmdotcom/base_device.py", line 91, in _handle_coordinator_update
super()._handle_coordinator_update()
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 469, in _handle_coordinator_update
self.async_write_ha_state()
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 743, in async_write_ha_state
self._async_write_ha_state()
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 843, in _async_write_ha_state
state, attr = self._async_generate_attributes()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 787, in _async_generate_attributes
attr.update(self.extra_state_attributes or {})
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/alarmdotcom/base_device.py", line 198, in extra_state_attributes
raw = self._controller.api.devices.get(self._adc_id).raw_attributes
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/pyalarmdotcomajax/devices/registry.py", line 301, in get
raise UnkonwnDevice(device_id) from err
pyalarmdotcomajax.exceptions.UnkonwnDevice: Unknown device ID '10294121'.
To Reproduce
Clicking 'Activate' on a scene.
Expected behavior
Running the scene.
Home Assistant Version:
2023.11.0
Additional context

This is occurring for me as well, but all the time, rather than just when running a scene. One example effect is that it causes the alarm state not to be fetched: e.g. when I turn off the alarm through the alarm.com app, it stays marked as "armed". When I then arm it from homeassistant, it does get armed (alarm.com app sees that), but homeassistant doesn't know that (still shows disarmed).
I think this used to happen rarely, and cause delays in homeassistant updating; but now it seems to happen almost all the time. This makes me wondering whether we're hitting some kind of rate-limiting on the alarm.com server.
That being said, the ID for my "UnkonwnDevice" (sic) is 10726749; when using the Web UI, the call to https://www.alarm.com/web/api/settings/manageDevices/deviceCatalogs/6785477 only has IDs of the form 96747708-\d+.
It would be super helpful if we could get the exception to dump the entire page payload that it's looking at to try and understand what's going on. Also perhaps a dump of whatever device IDs pyalarmdotcom is holding?

Same here.  I just updated from 2023.10.x to 2023.11.1.  I don't THINK this was happening before; I think it is new with 2023.11.

More info...  For me, this seems to be isolated to v3.0.10.  I reverted to v3.0.9 and the error is gone.

Can confirm I'm not getting the log messages with v3.0.9. There's still a significant delay (2 minutes?) between turning the alarm on and having homeassistant realize that it's on (alarm.com finds out immediately), so I'm still not convinced what's going on.

I had requested scenes. I see that it was implemented but I can't find them as an option. I still have the same choices I've always had, did I miss a checkbox somewhere to enable it?

think i found it outside the integration but inside the HA scenes folder but I also get
**Failed to call service scene/turn_on. Unknown device ID '26155923'.
**

@elahd It looks like there were some issues with v3.0.10 and quite a few people had to roll back to the previous version.  Just curious if you have had a chance to look into it and what your thoughts are?  Thanks!

I just released 3.0.11, which is a re-release of 3.0.9. This is in interim solution to stopping those log messages. The code base has become too messy since I rolled out WebSocket support and started chasing session timeout issues. I'm working on a refactor that I'll release as a beta in a week or so.
With that said, I won't ever be able to fix the lag that exists between a sensor triggering and the action being reported via API. Alarm.com has server-side logic that delays state reporting and that prevents a sensor from reporting the same status more than once in a 3 min period. The same delays exist on their own website and app.

Thanks for working on this!
About the delay, it definitely seems like the app notices the state change long before homeassistant does. For example, when arming the alarm, within a couple of seconds I usually get a notification from the alarm.com app, and checking the app shows the alarm is armed; it takes homeassistant a few more minutes to notice (more than 3, I think, but less than 10 for sure). I think this is worse with 3.0.10 compared to 3.0.9, presumably because some of those polls are failing, so the status only updates on the next successful poll.

I just released 3.0.11

Thanks, but I think something went wrong with the tag.  When I updated in HA, it went back to 3.0.10 rather than 3.0.11.  Then I went to the repo and noticed the "v" was missing from .11.  So maybe it still thinks 3.0.10 is the latest.

Just to add myself to the list of people who are having this issue and wish it gone.
I get the folloing log entry every few seconds:
2024-01-06 19:48:46.314 ERROR (MainThread) [homeassistant] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/pyalarmdotcomajax/devices/registry.py", line 299, in get
    return self._devices[device_id]
           ~~~~~~~~~~~~~^^^^^^^^^^^
KeyError: 37279686

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 243, in _handle_refresh_interval
    await self._async_refresh(log_failures=True, scheduled=True)
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 399, in _async_refresh
    self.async_update_listeners()
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 182, in async_update_listeners
    update_callback()
  File "/config/custom_components/alarmdotcom/base_device.py", line 91, in _handle_coordinator_update
    super()._handle_coordinator_update()
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 479, in _handle_coordinator_update
    self.async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 745, in async_write_ha_state
    self._async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 845, in _async_write_ha_state
    state, attr = self._async_generate_attributes()
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 789, in _async_generate_attributes
    attr.update(self.extra_state_attributes or {})
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/alarmdotcom/base_device.py", line 198, in extra_state_attributes
    raw = self._controller.api.devices.get(self._adc_id).raw_attributes
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/pyalarmdotcomajax/devices/registry.py", line 301, in get
    raise UnkonwnDevice(device_id) from err
pyalarmdotcomajax.exceptions.UnkonwnDevice: Unknown device ID '37279686'.

This is fixed in v3.0.12.

authors: adamantivm elahd jpoole412 lutzky mikesalz thomasshawn

repo: pyalarmdotcom/alarmdotcom